带格式和控制台打印的TimedRotatingFileHandler

时间:2015-08-14 20:58:17

标签: python-2.7 logging

我喜欢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记录一些东西

我如何实现这一点,但另外每天午夜都会轮换日志文件?

1 个答案:

答案 0 :(得分: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')