目的
- ファイル出力とコンソール出力の両方のログを出力できるようにする。
- ファイル出力については、エラーレベル以上のみ出力されたファイルも作る。
注意点
ログについては最近勉強を始めたばかりなので、ここ少しおかしいなとか、もっと効率的に書けるなというところがあれば、コメントいただければ幸いです。
ライブラリのインポート
from logging import ERROR, Formatter, getLogger, StreamHandler,FileHandler,DEBUG
ログの出力形式を設定
formatter=Formatter('[%(levelname)s] %(asctime)s - %(message)s(%(filename)s)')
logger = getLogger(__name__)
コンソール表示用ハンドラーの生成
stream_handler = StreamHandler()
テキストファイル出力用ハンドラーの生成
デバッグレベルとエラーレベルに分ける。
file_handler = FileHandler('log.txt')
error_handler = FileHandler('log_error.txt')
各ハンドラーのレベルとフォーマットの設定
stream_handler.setLevel(ERROR)
stream_handler.setFormatter(formatter)
file_handler.setLevel(DEBUG)
file_handler.setFormatter(formatter)
error_handler.setLevel(ERROR)
error_handler.setFormatter(formatter)
ロガーのレベル設定とハンドラー追加
logger.setLevel(DEBUG)
logger.addHandler(file_handler)
logger.addHandler(stream_handler)
logger.addHandler(error_handler)
実行ファイル
test_funcという関数内で、文字列+数字をしてエラーを発生させる。
log_practice.py
## ファイル出力とコンソール出力の両方のログを出力できるようにする。
## ファイル出力については、更にエラーのみの出力ファイルに分ける。
from logging import ERROR, Formatter, getLogger, StreamHandler,FileHandler,DEBUG
## ログの出力形式を設定
formatter=Formatter('[%(levelname)s] %(asctime)s - %(message)s(%(filename)s)')
logger = getLogger(__name__)
## コンソール表示用
stream_handler = StreamHandler()
## テキスト出力用
file_handler = FileHandler('log.txt')
error_handler = FileHandler('log_error.txt')
## レベルと形式の設定
stream_handler.setLevel(ERROR)
stream_handler.setFormatter(formatter)
file_handler.setLevel(DEBUG)
file_handler.setFormatter(formatter)
error_handler.setLevel(ERROR)
error_handler.setFormatter(formatter)
logger.setLevel(DEBUG)
logger.addHandler(file_handler)
logger.addHandler(stream_handler)
logger.addHandler(error_handler)
logger.debug('ロギング 開始')
def test_func(num):
return num + 3
try:
test_func("ss")
except Exception as e:
logger.exception("test_func関数にてエラー発生。エラー内容は下記のとおり。")
logger.debug('ロギング 終了')
コンソール出力画面
[ERROR] 2021-12-04 22:01:43,877 - test_func関数にてエラー発生。エラー内容は下記のとおり。(logpractice.py)
Traceback (most recent call last):
File "c:\Users\addre\dev\log_practice\logpractice.py", line 35, in <module>
test_func("ss")
File "c:\Users\addre\dev\log_practice\logpractice.py", line 33, in test_func
return num + 3
TypeError: can only concatenate str (not "int") to str
ファイル出力
デバッグレベル以上を出力したファイル
log.txt
[DEBUG] 2021-12-04 22:01:43,876 - ロギング 開始(logpractice.py)
[ERROR] 2021-12-04 22:01:43,877 - test_func関数にてエラー発生。エラー内容は下記のとおり。(logpractice.py)
Traceback (most recent call last):
File "c:\Users\addre\dev\log_practice\logpractice.py", line 35, in <module>
test_func("ss")
File "c:\Users\addre\dev\log_practice\logpractice.py", line 33, in test_func
return num + 3
TypeError: can only concatenate str (not "int") to str
[DEBUG] 2021-12-04 22:01:43,881 - ロギング 終了(logpractice.py)
エラーレベル以上を出力したファイル
log_error.txt
[ERROR] 2021-12-04 22:01:43,877 - test_func関数にてエラー発生。エラー内容は下記のとおり。(logpractice.py)
Traceback (most recent call last):
File "c:\Users\addre\dev\log_practice\logpractice.py", line 35, in <module>
test_func("ss")
File "c:\Users\addre\dev\log_practice\logpractice.py", line 33, in test_func
return num + 3
TypeError: can only concatenate str (not "int") to str