寫個小點的程式,寫日誌太麻煩了,大點的程式,不寫日誌是萬萬不行的,鑑於日誌頻繁的使用,對python的logging稍微封裝一下,適合自己的需求:
#coding=utf-8
import os, logging, sys
from logging.handlers import rotatingfilehandler as rfhandler
class commlogger:
log_file_size_max = 1024
# byte
log_file_backup_max = 5
# def __init__(self):
self.__log_argv =
self.__log_fmt_t = '%(f_info)s%(ctrl)s%(ctime)s%(ctrl)s%(msg)s%(ctrl)s%(tail)s%(ctrl)s' % /
self.__log_fmt = logging.formatter(self.__log_fmt_t)
self.__loggers = {}
def __getlogpath(self, log_name):
fpath = os.path.join(self.__log_argv['dirname'], log_name)
ifnot os.path.exists(fpath):
os.makedirs(fpath)
return fpath
def __initlog(self, log_name, level, bprint):
if log_name not
inself.__loggers:
logger = logging.getlogger(log_name)
if len(logger.handlers) == 0:
if bprint:
chdlr = logging.streamhandler(sys.stdout)
chdlr.setformatter(self.__log_fmt)
logger.addhandler(chdlr)
else:
fname = os.path.join(self.__getlogpath(log_name), log_name + self.__log_argv['extend'])
fhdlr = rfhandler(fname, 'a', commlogger.log_file_size_max, commlogger.log_file_backup_max,)
fhdlr.setformatter(self.__log_fmt)
logger.addhandler(fhdlr)
logger.setlevel(level)
self.__loggers[log_name] = logger
return
self.__loggers[log_name]
def getlogger(self, log_name = none, bprint = false, level= logging.debug, ):
if log_name is
none:
log_name = self.__log_argv['name_default']
if log_name not
inself.__loggers:
self.__initlog(log_name, level, bprint)
return
self.__loggers[log_name]
def mini_log(fn):
def moniter(*args, **argkv):
return fn(*args, **argkv)
logger = commlogger().getlogger(fn.func_name)
log_info =
logger.info('the function of %(fn_name)s has been running.%(ctrl)s%(fn_code)s' % log_info)
return moniter
@mini_log
def test():
'test logging module.'
if __name__ == '__main__':
ccls = commlogger()
log0 = ccls.getlogger()
log1 = ccls.getlogger('log1', true)
for i in range(3):
log0.debug('debug')
log0.info('info')
log0.warning('warn')
log0.error('error')
log0.critical('critical')
log1.debug('debug')
log1.info('info')
log1.warn('warn')
log1.error('error')
log1.critical('critical')
test()
'end___'
Shell 十三問整理
組成 literal meta 就是一些字母單詞,組成命令的 特殊保留字元,對於shell有特殊意義 重點meta有分command meta和shell meta 舉例awk 1.txt 這裡 會被解釋成shell meta。awk 1.txt 中的 被解釋成command meta 常見meta...
學習Python 十三
import signal define signal handler function def myhandler signum,frame print i received signum register signal.sigtstp s handler signal.signal signal...
Python入門(十三)
1.名字空間 a.local 區域性命名空間 檢視 local b.global 全域性命名空間,只要在全域性命名空間的內容到處都能使用 檢視 globals name 模組名,如果是執行檔案,值為 main builtins 內建名字空間物件,用於檢視內建名字空間中的內容 file 當前檔案的絕對...