dogwood008の開発メモ!

最近のマイブームは機械学習, Ruby on Rails。中でも機械学習を使った金融商品の自動取引に興味があります。

【Python】ロガーとハンドラをログレベルで制御して、表示のオンオフを管理する

要旨

とりあえずここに書いてあることを真似しておけばOK。

詳細

詳細はまた別の日に記載するとして、ひとまずコードだけを置いておく。個人的には非常に便利に使用しているので、きちんと使用方法やTipsを話をまとめ直したい。

import sys
from logging import Logger, Handler, getLogger, StreamHandler, Formatter, DEBUG, INFO, WARN, ERROR

logger_name = __name__
logger_level = WARN
logger = getLogger(logger_name)
logger.setLevel(logger_level)
logger.propagate = False

handler_loglevel = WARN
handler = StreamHandler(sys.stdout)
handler.setLevel(handler_loglevel)
handler.setFormatter(
    Formatter('[%(levelname)s] %(message)s'))

logger.addHandler(handler)
msg = 'WARNレベルだと、同レベルなので表示される'
loglevel = WARN
logger.log(loglevel, msg)
# => [WARNING] WARNレベルだと、同レベルなので表示される
msg = 'ERRORレベルだと、WARNよりレベルが上なので表示される'
loglevel = ERROR
logger.log(loglevel, msg)
# => [ERROR] ERRORレベルだと、WARNよりレベルが上なので表示される
msg = 'DEBUGレベルだと、WARNよりレベルが下なので表示されない'
loglevel = DEBUG
logger.log(loglevel, msg)
# => (何も表示されない)