Flask のログ記録 - ファイルに書き込むことができません 質問する

Flask のログ記録 - ファイルに書き込むことができません 質問する

さて、すべてを設定したコードは次のとおりです。

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')

何が起こるかというと

  1. error.logが作成される
  2. そこには何も書かれていない
  3. StreamHandler を追加せず、デバッグを false に設定しても、すべてが STDOUT に出力されます (これは正しいかもしれませんが、それでも奇妙に思えます)

私はどこか完全に間違っているのでしょうか、それとも何が起こっているのでしょうか?

ベストアンサー1

次のようにしてみませんか:

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

さて、私が示した方法では 2 つのハンドラーを持つことはできないと主張しているので、これを非常に明確にする例を追加します。まず、次のログ記録コードをメインに追加します。

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/

おすすめ記事