import logging, os
import logging.handlers
import datetime
loggers = []
def getlogroot(name) :
logroot = os.path.basename(name)
if logroot.endswith('.py') :
logroot = logroot[:-3]
elif logroot.endswith('.pyc') :
logroot = logroot[:-4]
return logroot
def init_logging_system(log_dir = '/data/logs', root = __file__):
logroot = getlogroot(root)
if logroot in loggers : return
loggers.append(logroot)
logger = logging.getLogger(logroot)
#hdlr = logging.FileHandler(os.path.join(log_dir, '%s-%s.log' % (logroot, datetime.datetime.today().strftime('%F'))))
logfile = os.path.join(log_dir, logroot + '.log')
hdlr = logging.handlers.RotatingFileHandler(logfile, maxBytes = 10240000, backupCount = 5)
formatter = logging.Formatter('%(asctime)19s %(levelname)-8s %(name)s %(threadName)s %(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)
logger.setLevel(logging.DEBUG)
def get(root = __file__) :
logroot = getlogroot(root)
if logroot not in loggers : logroot = __file__
return logging.getLogger(logroot)
if __name__ == '__main__' :
init_logging_system()
l = get()
l.warn('testing')
l.debug('this is a debug message')
蓝色部分表示每天一个文件。适合于定时任务。
绿色部分表示文件到了10M就自动滚动,适合于后台的服务
日志的文件名,是__file__去掉扩展名之后的文件名。当然如果传过来的root参数不是以.py或.pyc结尾,则使用传过来的值作为文件名。
调用时
import logger
logger.init_logging_system(root = __file__)
log = logger.get(__file__)
log.debug(......)
log.error(......)