一开始的封装如下,产生的日志出现了问题,打印出的行号是函数中printlog(message)
这一句的,导致不能快速准确定位问题。
import logging
def log(logType,message):
logger = logging.getLogger('')
if not logger.handlers:
formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
#控制台打印日志
console = logging.StreamHandler()
console.setLevel(logging.ERROR)
console.setFormatter(formatter)
logger.addHandler(console)
#日志回滚与定期删除
rotating_handler = logging.handlers.TimedRotatingFileHandler('./test.log', when='D', interval=1, backupCount=7)
#rotating_handler.suffix = "%Y-%m-%d.log"
rotating_handler.setLevel(logging.ERROR)
rotating_handler.setFormatter(formatter)
logger.addHandler(rotating_handler)
printlog=getattr(logger,logType)
printlog(message)
log('critical','test1')
log('critical','test2')
输出:
2019-12-28 14:58:09,701 test_log.py[line:18] CRITICAL test1
2019-12-28 14:58:09,703 test_log.py[line:18] CRITICAL test2
将函数返回值改变一下就可以啦,返回logger实例即可。其实是很简单的道理,但是实际使用的时候容易画蛇添足。
import logging
def log():
logger = logging.getLogger('')
if not logger.handlers:
formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
#控制台打印日志
console = logging.StreamHandler()
console.setLevel(logging.ERROR)
console.setFormatter(formatter)
logger.addHandler(console)
#日志回滚与定期删除
rotating_handler = logging.handlers.TimedRotatingFileHandler('./test.log', when='D', interval=1, backupCount=7)
rotating_handler.setLevel(logging.ERROR)
rotating_handler.setFormatter(formatter)
logger.addHandler(rotating_handler)
return logger
log().critical('test1')
log().critical('test2')
输出:
2019-12-28 15:00:17,348 test_log.py[line:17] CRITICAL test1
2019-12-28 15:00:17,351 test_log.py[line:18] CRITICAL test2