Flask - 如何使用RotatingFileHandler将werkzeug日志写入日志文件?

时间:2017-03-14 21:54:26

标签: python logging flask werkzeug

我发现了一些类似的问题,但没有任何直接解决这个问题。

我正在尝试将所有Werkzeug日志记录输出到日志文件中。我可以将部分日志记录输出到文件中,但我似乎无法捕获任何错误或基本路由/请求行之外的任何内容。

这就是我所拥有的。如何包含Werkzeug的所有输出?

if __name__ == '__main__':
    configure_app(app)
    handler=RotatingFileHandler('server_werkzeug.log', maxBytes=10000000, backupCount=5)
    log = logging.getLogger('werkzeug')
    log.setLevel(logging.DEBUG)
    log.addHandler(handler)

2 个答案:

答案 0 :(得分:3)

此代码适用于日志记录。至于没有记录错误的问题,似乎除了'werkzeug'之外你还必须指定其他记录器。对于Flask中的追溯错误,它是 app.logger 您要查找的内容。并且不要忘记将级别设置为警告。

import logging
import logging.handlers

app = Flask(__name__)

handler = logging.handlers.RotatingFileHandler(
        'log.txt',
        maxBytes=1024 * 1024)
logging.getLogger('werkzeug').setLevel(logging.DEBUG)
logging.getLogger('werkzeug').addHandler(handler)
app.logger.setLevel(logging.WARNING)
app.logger.addHandler(handler)

如果您的应用使用某些第三方工具进行类似的数据库查询,cron作业等,您也可以添加其他记录器。

logging.getLogger('apscheduler.scheduler').setLevel(logging.DEBUG)
logging.getLogger('apscheduler.scheduler').addHandler(handler)

可以在终端窗口中找到记录器的名称:

INFO:werkzeug:127.0.0.1 - - [10/Mar/2018 15:41:15] "GET /file.js HTTP/1.1" 200 -
DEBUG:apscheduler.scheduler:Next wakeup is due at 2018-03-10 16:00:00+03:00 (in 1124.668881 seconds)

答案 1 :(得分:0)

使用dictConfig是更可扩展的方法。

from logging.config import dictConfig

dictConfig({
    'version': 1,
    'handlers': {
        'file.handler': {
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': 'server_werkzeug.log',
            'maxBytes': 10000000,
            'backupCount': 5,
            'level': 'DEBUG',
        },
    },
    'loggers': {
        'werkzeug': {
            'level': 'DEBUG',
            'handlers': ['file.handler'],
        },
    },
})