見出し画像

【覚書】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()

いいなと思ったら応援しよう!