好的,这是我设置所有内容的代码:

if __name__ == '__main__':
    app.debug = False

    applogger = app.logger

    file_handler = FileHandler("error.log")
    file_handler.setLevel(logging.DEBUG)

    applogger.setLevel(logging.DEBUG)
    applogger.addHandler(file_handler)

    app.run(host='0.0.0.0')

发生的是
  • error.log得到创建
  • 没有写任何东西
  • 尽管未添加StreamHandler并将debug设置为false,但我仍然将所有内容都添加到STDOUT中(这可能是正确的,但似乎仍然很奇怪)

    我是完全离开这里还是发生什么事?

    最佳答案

    为什么不这样做呢?

    if __name__ == '__main__':
        init_db()  # or whatever you need to do
    
        import logging
        logging.basicConfig(filename='error.log',level=logging.DEBUG)
    
        app.run(host="0.0.0.0")
    

    如果现在启动应用程序,则将看到error.log包含:
    INFO:werkzeug: * Running on http://0.0.0.0:5000/
    

    有关更多信息,请访问http://docs.python.org/2/howto/logging.html

    好的,因为您坚持使用我展示的方法不能拥有两个处理程序,所以我将添加一个示例,以使这一点很清楚。首先,将此日志记录代码添加到您的主目录中:
    import logging, logging.config, yaml
    logging.config.dictConfig(yaml.load(open('logging.conf')))
    

    现在还添加一些调试代码,以便我们可以看到我们的设置有效:
    logfile    = logging.getLogger('file')
    logconsole = logging.getLogger('console')
    logfile.debug("Debug FILE")
    logconsole.debug("Debug CONSOLE")
    

    剩下的就是“logging.conf”程序。让我们使用它:
    version: 1
    formatters:
      hiformat:
        format: 'HI %(asctime)s - %(name)s - %(levelname)s - %(message)s'
      simple:
        format: '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
    handlers:
      console:
        class: logging.StreamHandler
        level: DEBUG
        formatter: hiformat
        stream: ext://sys.stdout
      file:
        class: logging.FileHandler
        level: DEBUG
        formatter: simple
        filename: errors.log
    loggers:
      console:
        level: DEBUG
        handlers: [console]
        propagate: no
      file:
        level: DEBUG
        handlers: [file]
        propagate: no
    root:
      level: DEBUG
      handlers: [console,file]
    

    此配置比所需的配置复杂得多,但它还显示了日志记录模块的某些功能。

    现在,当我们运行应用程序时,我们看到以下输出(werkzeug和console-logger):
    HI 2013-07-22 16:36:13,475 - console - DEBUG - Debug CONSOLE
    HI 2013-07-22 16:36:13,477 - werkzeug - INFO -  * Running on http://0.0.0.0:5000/
    

    另请注意,使用了带有“HI”的自定义格式器。

    现在查看“errors.log”文件。它包含:
    2013-07-22 16:36:13,475 - file - DEBUG - Debug FILE
    2013-07-22 16:36:13,477 - werkzeug - INFO -  * Running on http://0.0.0.0:5000/
    

    关于python - flask 日志记录-无法将其写入文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17743019/

  • 10-11 05:08