提问人:Jos 提问时间:8/15/2015 更新时间:12/17/2015 访问量:3004
TimedRotatingFileHandler 格式和控制台打印
TimedRotatingFileHandler with format and console prints
问:
我喜欢 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 记录一些东西
我如何实现这一点,但除此之外,日志文件每天午夜轮换?
答:
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
感谢您费心回答。不过,我没有时间验证您的解决方案。干杯!
评论