Flask で debug=False 時にログを出力する

Flask で開発時は debug = True にし app.logger を使用するとログを標準出力する。
本番環境では標準出力じゃなくて、ファイルに出力するようにしてた。

import os
import logging
from logging.handlers import RotatingFileHandler
from flask import Flask

app = Flask(__name__)

formatter = logging.Formatter(
    '%(asctime)s %(levelname)s: %(message)s '
    '[in %(pathname)s:%(lineno)d]'
)
debug_log = os.path.join(app.root_path, 'logs/debug.log')
    
debug_file_handler = RotatingFileHandler(
    debug_log, maxBytes=100000, backupCount=10
)
    
debug_file_handler.setLevel(logging.INFO)
debug_file_handler.setFormatter(formatter)
app.logger.addHandler(debug_file_handler)
    
error_log = os.path.join(app.root_path, 'logs/error.log')
error_file_handler = RotatingFileHandler(
    error_log, maxBytes=100000, backupCount=10
)    
error_file_handler.setLevel(logging.ERROR)
error_file_handler.setFormatter(formatter)
app.logger.addHandler(error_file_handler)

こんな感じで定義しているとログファイルを出力する場所に出力してくれる。
ただ、app.debug = False にした際に、app.logger.debug(), app.logger.info() ではログ出力されなかった。


色々試してみて分かったのが、app.logger.level の値がデフォルトでは 0 になっているようで、これを設定したら上手い事行った。

app.logger.setLevel(logging.INFO)