16

stdoutとstderrをログファイルに記録したいのですが、これが私が試したものです。

app = Flask(__name__)
app.logger.setLevel(logging.INFO)  # use the native logger of flask
app.logger.disabled = False
handler = logging.handlers.RotatingFileHandler(
    SYSTEM_LOG_FILENAME,
    'a',
    maxBytes=1024 * 1024 * 100,
    backupCount=20
    )

formatter = logging.Formatter(\
    "%(asctime)s - %(levelname)s - %(name)s: \t%(message)s")
handler.setFormatter(formatter)
app.logger.addHandler(handler)

@app.route('/')
def hello():

    return 'Hello World'
if __name__ == '__main__':
    app.run()        

次に、コンソール出力をファイルに記録したいと思います。そのような

* Running on http://127.0.0.1:5000/
127.0.0.1 - - [24/May/2013 14:55:14] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [24/May/2013 14:55:14] "GET /favicon.ico HTTP/1.1" 404 -

私に何ができる?

4

1 に答える 1

27

あなたが言及したロギングメッセージは、フラスコのロガーからのものではなく、のロガーから werkzeugものです。つまり、機能させるには、そのロガーインスタンスにハンドラーを追加する必要もあります。

log = logging.getLogger('werkzeug')
log.setLevel(logging.INFO)
log.addHandler(handler)

werkzeug がロガーを初期化する方法を見ると、ロギングがまだ設定されていない場合にのみデフォルト ハンドラーが追加されることがわかります。つまり、wekzeug より前に設定すると、デフォルトではなく、指定StreamHandlerしたハンドラーが使用されます。

于 2013-05-24T20:38:42.010 に答える