環境
- Windows 10
- Python 3.10.1
- VSCode
使用するソースコード
以下の公開リポジトリに置いています
GitHub - masayan1126/tao-py-py: 作業自動化用 Python ライブラリ
作業自動化用 Python ライブラリ. Contribute to masayan1126/tao-py-py development by creating an account on GitHub.
pythonでのロギング
基本的な書き方
- loggerオブジェクトの生成
- handlerオブジェクトの生成(どのようにログを出力するかを制御するオブジェクト)
- 出力するログレベルの設定
- ケースによって使い分ける(DEBUG,INFO,WARNING,ERROR,CRITICAL)
- handlerにセットされたログレベルよりレベルが低いログは出力されない
- 例えば、handlerにWARNINGのログレベルをセットすると、DEBUGやINFOのログは出力されない
- loggerオブジェクトにhandlerをセット
- logの出力
Logger.exception() は Logger.error() と似たログメッセージを作成するが、Logger.exception()を使用すると、スタックトレースを一緒にダンプしてくれる
from logging import DEBUG, Formatter, StreamHandler, getLogger
logger = getLogger(__name__)
handler = StreamHandler() # 標準出力
handler.setLevel(DEBUG)
logger.setLevel(DEBUG)
logger.addHandler(handler)
logger.debug("debug log")
// "debug log"
標準出力
標準出力の場合は、StreamHandlerを指定してhandlerオブジェクトを生成する
handler = StreamHandler() # 標準出力
ファイルへの出力
特定のfileへ出力したい場合は、FileHandlerを指定してhandlerオブジェクトを生成する
handler = FileHandler("logs/log.txt" ,encoding='utf-8') # ファイルへの出力
ログのフォーマット
- 上記だけだと、ログがそのままコンソールあるいはファイルに出力されるだけで少しみづらい。
- そこでFormatterを使用してログを整形する
formatter = Formatter("[%(asctime)s] : %(levelname)s - %(message)s - (%(filename)s)")
handler.setFormatter(formatter)
logger.debug("debug log")
// [2022-02-27 10:38:14,488] : DEBUG - debug log - (inspect.py)
ログ出力の際、ファイル名や出力時刻等の情報をフォーマット文字列として埋め込むことができる

logging --- Python 用ロギング機能
ソースコード: Lib/logging/__init__.py Important: このページには、リファレンス情報だけが含まれています。チュートリアルは、以下のページを参照してください 基本チュートリアル, 上級チュートリアル, ロギングクックブック. このモジュールは、アプリケーションやライブラリのための柔軟なエ...
フォーマット | 説明 |
---|---|
%(asctime)s | ログの出力時刻 |
%(created)f | ログ出力時刻(time.time()によって返される形式) |
%(filename)s | pathname のファイル名部分。 |
%(funcName)s | ロギングの呼び出しを含む関数の名前。 |
%(levelname)s | メッセージのための文字のロギングレベル (‘DEBUG’, ‘INFO’, ‘WARNING’, ‘ERROR’, ‘CRITICAL’)。 |
%(levelno)s | メッセージのための数値のロギングレベル (DEBUG, INFO, WARNING, ERROR, CRITICAL)。 |
%(lineno)d | ロギングの呼び出しが発せられたソース行番号 (利用できる場合のみ)。 |
%(message)s | msg % args として求められた、ログメッセージ。 Formatter.format が呼び出されたときに設定されます。 |
%(module)s | モジュール (filename の名前部分)。 |
%(msecs)d | LogRecord が生成された時刻のミリ秒部分 |
%(name)s | ロギングに使われたロガーの名前。 |
%(pathname)s | ロギングの呼び出しが発せられたファイルの完全なパス名 (利用できる場合のみ)。 |
%(process)d | プロセス ID (利用可能な場合のみ)。 |
%(processName)s | プロセス名 (利用可能な場合のみ)。 |
%(relativeCreated)d | logging モジュールが読み込まれた時刻に対する、LogRecord が生成された時刻を、ミリ秒で表したもの。 |
%(thread)d | スレッド ID (利用可能な場合のみ)。 |
%(threadName)s | スレッド名 (利用可能な場合のみ)。 |