TimedRotatingFileHandler 格式和控制台打印

TimedRotatingFileHandler with format and console prints

提问人:Jos 提问时间:8/15/2015 更新时间:12/17/2015 访问量:3004

问:

我喜欢 TimedRotatingFileHandler,我想使用它。

但是,我当前的日志记录是我喜欢的,包括一些格式,以及控制台中的日志记录,如下所示:

logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(levelname)-8s %(message)s',
                    datefmt=dtfmt,
                    filename=logfile,
                    filemode='w')
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s %(levelname)-8s %(message)s',
                              datefmt='%m-%d %H:%M')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)

logger = logging.getLogger('logger') 

logger.info('log something')

这将在日志文件中返回如下内容:

2015-08-14 22:55:35 INFO 记录一些东西

在控制台中:

08-14 22:56 INFO 记录一些东西

我如何实现这一点,但除此之外,日志文件每天午夜轮换?

python-2.7 日志记录

评论


答:

4赞 Snorre Løvås 12/17/2015 #1

一个老问题,但由于它是 Google 上的搜索结果,当我想做同样的事情时,我会添加我的结果。

从本质上讲,你不应该使用 basicConfig。手动添加这两个处理程序。

import logging, logging.handlers

#get the root logger
rootlogger = logging.getLogger()
#set overall level to debug, default is warning for root logger
rootlogger.setLevel(logging.DEBUG)

#setup logging to file, rotating at midnight
filelog = logging.handlers.TimedRotatingFileHandler('./mylogfile.log',
                   when='midnight', interval=1)
filelog.setLevel(logging.DEBUG)
fileformatter = logging.Formatter('%(asctime)s %(levelname)-8s %(message)s')
filelog.setFormatter(fileformatter)
rootlogger.addHandler(filelog)

#setup logging to console
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s %(levelname)-8s %(message)s',
                          datefmt='%m-%d %H:%M')
console.setFormatter(formatter)
rootlogger.addHandler(console)

#get a logger for my script
logger = logging.getLogger(__name__)

logger.info('This is logged to console and file')
logger.debug('This is only logged to file')

评论

0赞 Jos 12/19/2015
感谢您费心回答。不过,我没有时间验证您的解决方案。干杯!