基本的なログ出力方法
Pythomでログを出力するには以下のように書く。
import logging
logging.critical('メッセージ')
logging.error('メッセージ')
logging.warning('メッセージ')
logging.info('メッセージ')
logging.debug('メッセージ')
実行するとこのようになる。
CRITICAL:root:メッセージ
ERROR:root:メッセージ
WARNING:root:メッセージ
pythonではログレベルを設定することができるが、
デフォルトでは「WARNING」が設定されているため、この例では「WARNING」より重要度の低い「INFO」や「DEBUG」が表示されない。
ログレベルの設定
ログレベルの設定変更を行うには logging.basicConfig を使う。
import logging
logging.basicConfig(level=logging.INFO) # 追加
logging.critical('メッセージ')
logging.error('メッセージ')
logging.warning('メッセージ')
logging.info('メッセージ')
logging.debug('メッセージ')
CRITICAL:root:メッセージ
ERROR:root:メッセージ
WARNING:root:メッセージ
INFO:root:メッセージ # INFOが表示される
logging.basicConfig の引数に level=logging.INFO を設定するとINFOもログとして出力される。
DEBUGまで出力したい場合は引数を level=logging.DEBUG とする。
ログファイルの出力
logging.basicConfig の引数に filename='ファイル名' を設定すると、カレントディレクトリにログファイルを出力する。
また、filename='/パス/パス/ファイル名' とすることでログファイルの出力先を指定できる。
相対パスでも指定可能。
import logging
logging.basicConfig(level=logging.DEBUG, filename='hoge.log') # 追加
logging.critical('メッセージ')
logging.error('メッセージ')
logging.warning('メッセージ')
logging.info('メッセージ')
logging.debug('メッセージ')
CRITICAL:root:メッセージ
ERROR:root:メッセージ
WARNING:root:メッセージ
INFO:root:メッセージ
DEBUG:root:メッセージ
loggingの子供、logger
loggingの設定を引き継いだ上で、log出力の内容を変えたい場合がある。
そんな時はloggerを使うと便利。
loggingで設定したログレベルも変更することができる。
import logging
# ロギングの設定。ログレベルはINFO。
logging.basicConfig(level=logging.INFO)
logging.critical('メッセージ')
logging.error('メッセージ')
logging.warning('メッセージ')
logging.info('メッセージ')
logging.debug('メッセージ')
# ロガーの設定
logger = logging.getLogger(__name__) # ※1
logger.setLevel(logging.DEBUG) # ログレベルをDEBUGに変更。
logger.debug('ロガー')
CRITICAL:root:メッセージ
ERROR:root:メッセージ
WARNING:root:メッセージ
INFO:root:メッセージ
DEBUG:__main__:ロガー # ロガーの出力結果
※1 __name__はmain意外のファイルから実行されると、実行したファイル名が代入される。
loggerのファイル出力設定をするhandler
loggerのログ出力先やそのフォーマットを指定するにはhandlerを使う。
以下はloggerでログ出力を行う例です。
import logging
from logging import StreamHandler, Formatter
# loggerオブジェクトの宣言
logger = logging.getLogger(__name__)
# loggerのログレベル設定
logger.setLevel(logging.DEBUG)
# ログ出力フォーマット設定
handler_format = Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# FileHandlerの設定
file_handler = logging.FileHandler('hoge.log')
# FileHandlerにログ出力フォーマット設定
file_handler.setFormatter(handler_format)
# loggerにfile_handlerの設定適用
logger.addHandler(file_handler)
# logを出力する
logger.debug("Hello World!")
2021-03-05 22:00:06,689 - __main__ - DEBUG - Hello World!