addFilter()関数を用いて、指定したログレベルに合致したログだけ出力させることができます。
import logging
# カスタムフィルタの定義
class MyFilter:
def __init__(self, level):
self._level = level
def filter(self, logRecord):
return logRecord.levelno == self._level
# ロガーの定義
mylogger = logging.getLogger(__name__)
# info用ハンドラ
handler_info = logging.FileHandler(filename='info.log', encoding='utf-8')
handler_info.setLevel(logging.INFO)
mylogger.addHandler(handler_info)
# カスタムフィルタの追加
handler_info.addFilter(MyFilter(logging.INFO)) # 出力させたいレベルを指定する。ここではinfoだけ出力させたいのでlogging.INFOを指定している。
# error用ハンドラ(フィルタは追加していない)
handler_error = logging.FileHandler(filename='error.log', encoding='utf-8')
handler_error.setLevel(logging.ERROR)
mylogger.addHandler(handler_error)
# ロガーのログレベル設定
mylogger.setLevel(logging.INFO)
使用例
mylogger.error("error message_")
mylogger.critical("critical message")
mylogger.info("info message")
mylogger.debug("debug message")
結果、error.logには、error messageとcritical messageが記録されますが、info.logにはinfo messageしか記録されません。
参考:https://stackoverflow.com/questions/8162419/python-logging-specific-level-only
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。