【覚書】Pythonでのログ出力
■動作環境
・Visual Studio Code 1.48.2
・Python 3.7.6
■my_logger.py
import os
import logging.handlers
from logging import getLogger, StreamHandler, FileHandler, Formatter, DEBUG
def get_logger():
# --------------------------------------------------
# おまけ
# --------------------------------------------------
# logフォルダの作成
if not os.path.exists('./log'):
os.mkdir('./log')
# --------------------------------------------------
# フォーマット、ハンドラ
# --------------------------------------------------
# フォーマット設定
format = Formatter(
# 第1引数は文字列フォーマット(右詰めがデフォルト、左詰めは-、数字は最小文字数
'%(asctime)s %(levelname)-7s %(filename)-20s %(funcName)-20s %(lineno)5d %(message)s',
# 第2引数は日時フォーマット
'%Y-%m-%d %H:%M:%S'
)
# ファイル出力用ハンドラ(ローテートなし)
handler1 = FileHandler('./log/test_norotate.log')
handler1.setLevel(DEBUG)
handler1.setFormatter(format)
# ファイル出力用ハンドラ(ローテートあり)
handler2 = logging.handlers.RotatingFileHandler(
'./log/test_rotate.log',
encoding='utf-8',
maxBytes=1000000, # 1MB
backupCount=10
)
handler2.setLevel(DEBUG)
handler2.setFormatter(format)
# ターミナル出力用ハンドラ
handler3 = StreamHandler()
handler3.setLevel(DEBUG)
handler3.setFormatter(format)
# --------------------------------------------------
# ロガー
# --------------------------------------------------
# ロガーを取得
logger = getLogger(__name__)
logger.setLevel(DEBUG)
# ロガーにハンドラを追加
logger.addHandler(handler1)
logger.addHandler(handler2)
logger.addHandler(handler3)
return logger
# 利用例
def test_logger():
logger = get_logger()
logger.debug('test_debug')
logger.info('test_info')
logger.warning('test_warning')
logger.error('test_error')
# スクリプト実行時
if __name__ == '__main__':
test_logger()