この記事では、Python におけるロギング、そのさまざまなレベル、およびその重要性について紹介します。次に、Python ロギング モジュールをグローバルに使用する方法を学びます。
Python におけるロギングの概要とその重要性
ログは、ソフトウェアの実行中に発生するイベントを追跡する方法です。ソフトウェア開発者は、プログラムの実行時に発生するエラーやイベントを記録するために、ログ呼び出しを追加します。
Python プログラミングには、そのようなエラーやイベントを記録するロギングと呼ばれる組み込みモジュールがあります。イベントはメッセージであり、オプションでイベント固有のデータを保存することに注意してください。
これらのイベントには、ソフトウェア開発者が指定したさまざまなレベル/重大度を設定できます。したがって、ログ記録はアプリケーションをデバッグし、必要な情報を追跡するための非常に強力なツールであると言えます。
ロギング モジュールは、アプリケーションがさまざまなログ ハンドラーを構成し、ログ メッセージをこれらのハンドラーにルーティングし、さまざまなユース ケースの処理に役立つ非常に柔軟な構成を可能にするためのさまざまな方法を提供します。
ログ モジュールには、さまざまな重大度レベルに対処できるようにさまざまなログ レベルもあります。ロギング レベルの簡単な説明は次のとおりです。
- 情報- さまざまなことが期待どおりに動作していることを確認します。
- デバッグ- 問題を診断する際の一般的な詳細を提供します。
- 警告-予期せず何かが起こったことを示します。また、「警告」は、ディスク容量不足など、すぐに発生する可能性のある問題を示しているとも言えます。
- CRITICAL - アプリケーション自体が続行できない重大なエラーを示します。
- エラー- プログラムが操作や機能を実行できない、より深刻な問題を表します。
Python でログモジュールをグローバルに使用する
Python ではロギング モジュールをローカルおよびグローバルに使用できます。ここで、ローカルとは、特定のスコープでログ モジュールを使用することを指します。たとえば、ログ モジュールを A.py ファイルに導入したため、A.py ファイルでのみ使用でき、B.py ファイルでは使用できません。
一方、グローバルとは、A.py ファイルと B.py ファイルのあらゆる場所で使用されることを意味します。Python グローバル ロガーについて学ぶには、ネイティブ ロギング モジュールの使用法を理解することが重要です。
ロギング モジュールをローカルで使用するコード例 (test.py ファイルに保存):
import logging
logger = logging.getLogger("test_logger")
logger.setLevel(logging.INFO)
def sum_numbers(number1, number2):
try:
output = number1 + number2
except TypeError:
logger.exception("Oh! TypeError Occurred")
else:
return output
result = sum_numbers(10, 'Mehvish')
ここでは、インポートされた test.py ファイルでロギング モジュールをローカルに使用します。
次に、getLogger()
Python のロギング モジュールを使用してロギングを開始します。この のファクトリー関数を実行しますlogging.getLogger(name)
。
getLogger()
ロガーの名前を 1 つの引数として取り、名前が指定されている場合はその名前を使用し、指定されていない場合はルートを使用して、ロガー インスタンス (ロガーのオブジェクト) への参照を返します。
正確な名前で を複数回呼び出すと、getLogger()
同じロガー インスタンスへの参照が返されることに注意してください。これは、(後で説明するように) グローバルに使用する場合に便利です。
次に、setLevel()
メソッドを使用してログのレベルを設定し、 int 型の 2 つの数値を受け取り、それらを加算し、指定された値が正しい場合は結果を返し、そうでない場合は TypeError を生成する sum_numbers() 関数を作成します。
sum_numbers()
最後に、次の結果を生成することにより、ロギング モジュールが動作していることを確認するために呼び出します。
出力:
Oh! TypeError Occurred
Traceback (most recent call last):
File "E:\Code\use_logging_locally\test.py", line 8, in sum
output = number1 + number2
TypeError: unsupported operand type(s) for +: 'int' and 'str'
ロギング モジュールの使用は簡単ですが、このモジュールをグローバルに活用するにはどうすればよいでしょうか? 以下で学びましょう。
サンプルコード (log.py ファイルに保存):
import logging
def set_custom_logger(name):
formatter = logging.Formatter(
fmt='%(asctime)s - %(levelname)s - %(module)s - %(message)s'
)
handler = logging.StreamHandler()
handler.setFormatter(formatter)
logger = logging.getLogger(name)
logger.setLevel(logging.DEBUG)
logger.addHandler(handler)
return logger
サンプルコード (submodule.py ファイルに保存):
import logging
logger = logging.getLogger('root')
logger.debug('submodule message')
サンプルコード (main.py ファイルに保存):
import log
logger = log.setup_custom_logger('root')
logger.debug('main message')
import submodule
出力:
2022-10-27 09:31:02,447 - DEBUG - main - main message
2022-10-27 09:31:02,450 - DEBUG - submodule - submodule message
このコード例では、日付、時刻、ログ レベル、モジュール名、およびメッセージを出力します。
请注意
、logging.getLogger()
log.py ファイルで使用した正確なロガー インスタンスを使用するために submodule.py で使用しました。
どうやって?logging.getLogger(name)
通常は、Python のロギング モジュールを使用してロギングを開始するために実行します。getLogger() は、ロガーの名前という 1 つの引数を取ります。
この関数を使用するとgetLogger()
、指定された名前 (指定されている場合) またはルート ディレクトリ (指定されていない場合) を持つロガー インスタンスへの参照を取得できます。
正確な名前を指定して複数回呼び出すと、getLogger()
正確なロガー オブジェクトへの参照が返されるため、それをグローバルに使用するのに役立ちます。