为什么Flask将日志写入我的日志日志?

时间:2020-05-01 18:46:28

标签: python python-3.x flask logging

我正在创建在烧瓶中以调试模式运行的简单应用程序。 我决定使用日志记录来写日志。

    import logging
    dlog = logging
    dlog.basicConfig(filename='app.log', format='%(asctime)s %(message)s',
                     datefmt='[%Y-%m-%d | %H:%M:%S]', level=logging.INFO)
    ...
if __name__ == '__main__':
    app.run(debug=True, host='localhost', port='8002')

但是我发现在app.log中(我的应用程序未称为“ app.py”),Flask除了我的之外还写了自己的日志。 喜欢:

[2020-05-01 | 21:36:04]  * Running on http://localhost:8002/ (Press CTRL+C to quit)
[2020-05-01 | 21:36:04]  * Restarting with stat
[2020-05-01 | 21:36:05]  * Debugger is active!
[2020-05-01 | 21:36:05]  * Debugger PIN: 290-968-029
[2020-05-01 | 21:36:15] 127.0.0.1 - - [01/May/2020 21:36:15] "[37mGET / HTTP/1.1[0m" 200 -
[2020-05-01 | 21:36:15] 127.0.0.1 - - [01/May/2020 21:36:15] "[36mGET /static/js/main.js HTTP/1.1[0m" 304 -

为什么会发生这种情况,如何将烧瓶记录与我自己的记录分开?

1 个答案:

答案 0 :(得分:1)

这是因为logging.basicConfig配置了根记录器。所有创建的记录器propagate log messages to their parents,除非明确告知他们不要:

app.logger.propagate = False

禁用记录器也是一种选择:

app.logger.disabled = True

或设置较少的详细模式

app.logger.setLevel(logging.WARNING)

仅将烧瓶日志记录到另一个文件中比较复杂。您必须删除StreamHandler并手动创建FileHandlerFormatterlogging模块为您提供了很多灵活性,但可能很麻烦:

# https://docs.python.org/3/library/logging.html#logrecord-attributes
formatter = logging.Formatter("{asctime:s} {name} [{levelname}] {filename}:{lineno} {msg}", style="{")
file_handler = logging.FileHandler("flask.log")
file_handler.setFormatter(formatter)
# set log level threshold for this handler
file_handler.setLevel(logging.INFO)
# flask creates StreamHandler for you, if you don't want that
# just set handlers to empty list
app.logger.handlers = []
app.logger.addHandler(file_handler)
# set log level on the flask logger
app.logger.setLevel(logging.INFO)
# don't propagate to parent logger (logging.root) to not duplicate
# the logs if you're handling log messages in root logger
app.logger.propagate = False

app.logger.info("spanish iniquisition")

# flask.log:
# 2020-05-02 09:12:31,631 t [INFO] t.py:16 spanish iniquisition