Pythonでログ出力する方法を、loggingモジュールを使って解説します。
Pythonでログ出力する方法を教えてください。
loggingモジュールを使うことで、簡単にログ出力ができます。
loggingモジュールとは
loggingモジュールは、Pythonの標準ライブラリの一つで、アプリケーションの実行中に発生するイベントを記録するための機能を提供します。ログ出力によって、アプリケーションの動作状況を確認することができます。
loggingモジュールを使うことで、以下のような特徴を持っています。
- ログレベルの設定が可能:
- ログの重要度に応じて、レベルを設定することができます。Pythonのloggingモジュールでは、デフォルトで以下の5つのログレベルが定義されています。
- DEBUG: デバッグ情報
- INFO: 情報
- WARNING: 警告
- ERROR: エラー
- CRITICAL: 致命的なエラー
- ログの重要度に応じて、レベルを設定することができます。Pythonのloggingモジュールでは、デフォルトで以下の5つのログレベルが定義されています。
- ログの出力先をファイルやコンソールなどに設定できる:
- ログの出力先を設定することができます。ファイルにログを出力することで、後からログを確認することができます。また、コンソールに出力することで、アプリケーションの動作状況をリアルタイムで確認することができます。
- ログのフォーマットをカスタマイズできる:
- ログの出力フォーマットをカスタマイズすることができます。出力されるログの内容や形式を自由に変更できるため、自分が欲しい形式でログを出力することができます。
loggingモジュールは、ログの出力先をファイルやコンソールに設定したり、ログレベルを設定したりするための機能を提供しています。また、複数のファイルやクラスでログを出力する場合にも、loggingモジュールを使うことで、簡単にログの管理ができます。
loggingモジュールの基本的な使い方
loggingモジュールの基本的な使い方は、以下のようになります。
- loggingモジュールをインポートする
import logging
- ログの設定を行う
ログの設定を行うには、basicConfig()
メソッドを使います。このメソッドを使うことで、ログレベルやログの出力先、ログのフォーマットなどを設定することができます。
logging.basicConfig(level=logging.DEBUG, filename='example.log', format='%(asctime)s %(levelname)s %(message)s')
上記の例では、ログレベルをDEBUG
に設定し、ログの出力先をexample.log
ファイルに設定しています。また、ログのフォーマットを指定して、ログの発生時刻、ログレベル、メッセージを出力するように設定しています。
- ログを出力する
ログを出力するには、debug()
、info()
、warning()
、error()
、critical()
メソッドを使います。
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')
上記の例では、debug()
、info()
、warning()
、error()
、critical()
メソッドを使って、それぞれのレベルのログを出力しています。
以上が、loggingモジュールの基本的な使い方になります。ログのレベルや出力先、フォーマットを設定することで、ログの出力をカスタマイズすることができます。また、複数のファイルやクラスでログを出力する場合にも、loggingモジュールを使うことで、簡単にログの管理ができます。
LogRecordオブジェクトについて
ログの出力時には、LogRecord
オブジェクトが自動的に作成されます。LogRecord
オブジェクトには、ログに関する情報が含まれています。これらの情報は、Logger
オブジェクトによって収集され、LogRecord
オブジェクトに格納されます。
LogRecord
オブジェクトには、以下のような属性があります。
asctime
: ログが発生した時刻を表す文字列levelname
: ログのレベルを表す文字列message
: ログのメッセージを表す文字列name
: ロガーの名前を表す文字列filename
: ログが発生したファイル名を表す文字列lineno
: ログが発生した行番号を表す整数funcName
: ログが発生した関数名を表す文字列threadName
: ログが発生したスレッド名を表す文字列
これらの属性は、ログの出力先やフォーマットで使用することができます。また、LogRecord
オブジェクトは、Logger
オブジェクトによって自動的に作成されるため、通常は直接操作することはありませんが、ログの情報を拡張するためには、カスタムのLogRecord
オブジェクトを作成することもできます。
例えば、以下のようにして、カスタムのLogRecord
オブジェクトを作成することができます。
import logging
class CustomLogRecord(logging.LogRecord):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.custom_attribute = 'custom value'
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)s %(message)s')
logger = logging.getLogger(__name__)
record = CustomLogRecord(
name=__name__,
level=logging.DEBUG,
pathname=__file__,
lineno=10,
msg='Custom message'
)
logger.handle(record)
上記の例では、CustomLogRecord
クラスを定義して、LogRecord
クラスを継承しています。CustomLogRecord
クラスには、custom_attribute
という属性が追加されており、これはカスタムの情報を表すものです。CustomLogRecord
クラスのインスタンスを作成し、Logger
オブジェクトのhandle()
メソッドでログを出力しています。このようにして、LogRecord
オブジェクトを拡張することで、より詳細なログ情報を取得することができます。
サンプルプログラムを使った解説
以下のサンプルプログラムでは、loggingモジュールを使って、ログを出力する方法を説明します。
import logging
# ログの設定
logging.basicConfig(level=logging.INFO, filename='example.log', format='%(asctime)s %(levelname)s %(message)s')
# ログの出力
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')
上記のプログラムでは、basicConfig()
メソッドを使って、ログの設定を行っています。ここでは、ログレベルをINFO
に設定し、ログの出力先をファイルexample.log
に指定しています。また、ログのフォーマットもカスタマイズして、ログの発生時刻、ログレベル、メッセージを出力するようにしています。
その後、debug()
、info()
、warning()
、error()
、critical()
メソッドを使って、ログを出力しています。それぞれのメソッドは、ログのレベルに応じて出力される内容が異なります。
例えば、上記のプログラムでは、ログレベルをINFO
に設定しているため、debug()
メソッドで出力したdebug message
は、ログに出力されません。一方、info()
、warning()
、error()
、critical()
メソッドで出力したメッセージは、ログに出力されます。また、ログの出力先をファイルに設定しているため、ログはファイルexample.log
に出力されます。
ログの出力は、以下のようになります。
2022-04-13 11:22:33,111 INFO info message
2022-04-13 11:22:33,111 WARNING warning message
2022-04-13 11:22:33,111 ERROR error message
2022-04-13 11:22:33,111 CRITICAL critical message
上記のログでは、ログの発生時刻、ログレベル、メッセージが出力されています。また、ログのフォーマットをカスタマイズすることで、ログの出力形式を自由に変更することができます。
このように、loggingモジュールを使ってログを出力することで、アプリケーションの動作状況を確認することができます。
リスキリングでキャリアアップしてみませんか?
リスキリング(学び直し)は、経済産業省が推奨しており、
今だけ、最大70%のキャッシュバックを受けることができます。
最大70%の給付金が出るおすすめのプログラミングスクール!
国策で予算が決められているため申し込みが多い場合は早期に終了する可能性があります!
興味のある方はすぐに確認しましょう。
まとめ
Pythonでログ出力する方法を、loggingモジュールを使って解説しました。
- loggingモジュールは、Pythonの標準ライブラリの一つで、アプリケーションの実行中に発生するイベントを記録するための機能を提供する。
- ログレベルの設定が可能で、デフォルトで以下の5つのログレベルが定義されている: DEBUG、INFO、WARNING、ERROR、CRITICAL。
- ログの出力先をファイルやコンソールなどに設定でき、ログのフォーマットをカスタマイズできる。
- loggingモジュールを使うことで、アプリケーションの動作状況を確認することができる。
- ログを出力するには、debug()、info()、warning()、error()、critical()メソッドを使う。
LogRecord
オブジェクトには、ログの出力時に自動的に作成され、ログに関する情報が含まれている。disable()
メソッドを使うことで、あるレベル以下のログを無視することができる。
loggingモジュールを使って、ログを出力することで、アプリケーションの動作状況を確認することができました!
ログ出力は、開発や運用において重要な機能であるため、実装する際には適切な設定を行い、必要な情報を正しく出力することが求められます。
また、ログ出力が必要ない状況下では、disable()
メソッドを使って、ログ出力を無効化することで、アプリケーションのパフォーマンスを向上させることができます。ログ出力には注意深く取り組み、アプリケーションの改善に役立てていきましょう。
コメント