loggerによるシンプルなログ出力設定を記載します。
このサンプルでは、ファイルとコンソールのどちらにも出力を行うように設定しています。
コンソール出力が不要な場合は、stream_handler
がつく行を削除すればファイル出力のみを行うようになります。
setup_log.py
import os
from datetime import datetime
from logging import (StreamHandler, FileHandler,
Formatter, basicConfig,
INFO) # 必要であればDEBUG, NOTSET, WARN, ERORR, CRITICALを設定)
def setup_log():
'''ログ出力の行う準備を行う関数'''
# このファイル(setup_log.py)がある箇所を絶対パスで取得
BASE_PATH = os.path.abspath(os.path.dirname(__file__))
# ログレベルの設定。DEBUG, INFO, NOTSET, WARN, ERORR, CRITICALの中からひとつを指定
LOG_LEVEL = INFO
'''ストリームハンドラの設定 コンソール出力が必要な場合に設定'''
stream_handler = StreamHandler()
# ログレベルの設定
stream_handler.setLevel(LOG_LEVEL)
# ログ出力フォーマットを設定
stream_handler.setFormatter(Formatter("[%(asctime)s]:%(levelname)s:%(message)s"))
'''ファイルハンドラの設定 ログファイルに関する設定を行う箇所'''
file_handler = FileHandler(f"{BASE_PATH}/log_{datetime.now():%Y%m%d%H%M%S}.log")
# ログレベルの設定
stream_handler.setLevel(LOG_LEVEL)
# ログ出力フォーマットを設定
file_handler.setFormatter(Formatter("[%(asctime)s]:%(levelname)s:%(message)s"))
'''ルートロガーの設定'''
basicConfig(level=LOG_LEVEL, handlers=[stream_handler, file_handler])
setup_log.pyが上手く設定されているかチェックします。
下記では、適当なファイルhoge.pyを作成してsetup_log.exec()を呼び出しています。
また、LOG_LEVELをINFOに設定しているため、infoよりログレベルの低いdebugのログは出力されない想定です。
hoge.py
import setup_log
import logging
setup_log.exec()
logging.debug('hogehoge_debug')
logging.info('hogehoge_info')
logging.error('hogehoge_error')
実行結果(コンソール)
[2022-03-06 11:02:17,418]:INFO:hogehoge_info
[2022-03-06 11:02:17,420]:ERROR:hogehoge_error
実行結果(ファイル:log_20220306110217.log)
[2022-03-06 11:02:17,418]:INFO:hogehoge_info
[2022-03-06 11:02:17,420]:ERROR:hogehoge_error
想定通りログ出力が行えていることを確認できました。