Python TimedRotatingFileHandler同时记录到文件和标准错误
我想在我的应用程序中加入简单的日志记录,使用的是TimedRotatingFileHandler。不过我发现日志不仅输出到了指定的文件里,还输出到了标准错误(stderr)中。我把问题简化成了一个小例子:
import logging, logging.handlers
import sys
logging.basicConfig(format='%(asctime)s %(message)s')
loghandler = logging.handlers.TimedRotatingFileHandler("logfile",when="midnight")
logger = logging.getLogger()
logger.setLevel(logging.INFO)
logger.addHandler(loghandler)
for k in range(5):
logger.info("Line %d" % k)
我在我的'logfile'和这个程序的标准错误中都得到了5行日志。我到底哪里做错了呢?
2 个回答
5
logging.basicConfig
是用来设置一个处理器,它会把信息打印到标准错误输出,也就是你在程序出错时看到的地方。
logger.addHandler(loghandler)
是用来添加一个定时轮换文件处理器,这个处理器会定期把日志信息保存到文件里。
你想要停止输出到标准错误吗?如果想的话,只需要去掉对 logging.basicConfig
的调用就可以了。
17
这是一个方法,可以让你把打印的信息只记录在日志文件里,而不显示在标准输出或标准错误上:
import logging
from logging.handlers import TimedRotatingFileHandler
logHandler = TimedRotatingFileHandler("logfile",when="midnight")
logFormatter = logging.Formatter('%(asctime)s %(message)s')
logHandler.setFormatter( logFormatter )
logger = logging.getLogger( 'MyLogger' )
logger.addHandler( logHandler )
logger.setLevel( logging.INFO )
for k in range(5):
logger.info("Line %d" % k)