我为Flask服务器创建了一个TimedRotatingHandler.但是werkzeug生成的所有日志仍然会抛出控制台.
如何使用日志轮换功能将这些日志重定向到日志文件(test.log).
代码段:
log = logging.getLogger(__name__)
log.setLevel(logging.DEBUG)
# add a file handler
fh = logging.handlers.TimedRotatingFileHandler("test.log",when='M',interval=1,backupCount=0)
fh.setLevel(logging.DEBUG)
# create a formatter and set the formatter for the handler.
frmt = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
fh.setFormatter(frmt)
# add the Handler to the logger
log.addHandler(fh)
app.run(host='0.0.0.0', debug=True)
Run Code Online (Sandbox Code Playgroud)
以下日志仍然在控制台上抛出.
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
* Restarting with stat
192.168.1.6 - - [25/Jun/2015 07:11:13] "GET / HTTP/1.1" 200 -
192.168.1.6 - - [25/Jun/2015 07:11:13] "GET /static/js/jquery-1.11.2/jquery-1.11.2.min.js HTTP/1.1" 304 -
192.168.1.6 - - [25/Jun/2015 07:11:13] "GET /static/js/main/main.js HTTP/1.1" 304 -
192.168.1.6 - - [25/Jun/2015 07:11:13] "GET /favicon.ico HTTP/1.1" 404 -
Run Code Online (Sandbox Code Playgroud)
将日志文件处理程序添加到werkzeug记录器也无法解决问题
logging.getLogger('werkzeug').addHandler(fh);
Run Code Online (Sandbox Code Playgroud)
小智 2
看起来 werkzeug 将消息发送到根记录器而不是命名记录器。
如果您尝试这样做,它应该开始记录到您的文件
logging.getLogger().addHandler(fh)
如果您希望它停止记录到控制台,那么您必须从根记录器中删除流处理程序。您可以使用以下命令查看根记录器的处理程序
>>> print logging.getLogger().handlers
[<logging.StreamHandler object at 0x.....>, logging.handlers.TimedRotatingFileHandler object at 0x.....>]