ホームページ  >  記事  >  バックエンド開発  >  Python でロギング モジュール コードをデバッグする方法

Python でロギング モジュール コードをデバッグする方法

WBOY
WBOY転載
2023-05-10 16:31:061139ブラウズ

1. ログ階層

始める前に、ログ レコードにはログ ツリーまたはロガー階層と呼ばれる階層構造があることに注意してください。階層は複数のレベルで構成され、各レベルはログ情報の異なる重大度を表します。最も一般的なレベルは次のとおりです。

CRITICAL #重大なエラーが発生しました。プログラムは実行を続行できない可能性があります。
ERROR #調査する必要があるエラーが発生しました。
WARNING #予期せぬことが起こったこと、または近い将来の問題を示唆するもの。
INFO #プログラムの実行に関する一般情報。
DEBUG #デバッグ目的の詳細情報。

二。モジュールの作成

set_logging.py という名前の Python モジュールを作成しましょう:

import logging
logger = logging.getLogger()
def set_logger():
  logger.setLevel(logging.INFO)
  handler = logging.StreamHandler()
  handler.setLevel(logger_level)
  formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
  handler.setFormatter(formatter)
  logger.addHandler(handler)

コードを明確にするために、getLogger## を使用してモジュールを作成します。 # 関数 Logger インスタンスを作成し、setLevel を使用してログ レベル (DEBUGINFO など) を設定します。ロガーの setLevel メソッドはフィルターのようなもので、ログ メッセージを処理してハンドラーに送信するかどうかを決定します。たとえば、ロガーのレベルを INFO に設定すると、レベル DEBUG のメッセージは、設定する最低レベルよりも重大度が低いため、ロガーはハンドラーに送信しません。ロガー。レベル INFO 以上 (つまり、WARNINGERROR、または CRITICAL) のログ メッセージのみを処理のためにハンドラーに送信します。

コンソールや端末などのストリームにログ情報を送信するための

StreamHandler を作成します。デバッグ目的でログ情報を出力するために使用されます。ハンドラーのレベルも設定します。

これを行うのは、ハンドラーがロガーからメッセージを受信すると、それらのメッセージをそのレベルと比較し、出力する前に重大度の低いメッセージをフィルターで除外するためです。異なるハンドラーがある場合:

logger.setLevel(logging.INFO)

file_handler =logging.FileHandler()
file_handler.setLevel(logging.ERROR)
console_handler =logging .StreamHandler()
console_handler.setLevel(logging.WARNING)

ロガーのレベルが

INFO に設定されているため、レベル # のログ メッセージを送信する 2 つのプログラムのみを処理します。 ##INFO 以上ですが、各ハンドラーは、指定されたログ レベル以上のメッセージのみを処理します。 メインの例に戻り、フォーマッタを作成してハンドラに追加します。フォーマッタは、タイムスタンプ、ロガー名、ログ レベル、メッセージなどのログ メッセージの形式を指定します。最後に、ロガーにハンドラーを追加します。

コード内で、次のように

set_logger

を呼び出す必要があります: <pre class="brush:py;">import logging from set_logging import set_logger set_logger() logger = logging.getLogger() def roman_number(s: str) -&gt; int: dic = {&quot;I&quot;: 1, &quot;V&quot;: 5, &quot;X&quot;: 10, &quot;L&quot;: 50, &quot;C&quot;: 100, &quot;D&quot;: 500, &quot;M&quot;: 1000} res = 0 pre = None for char in s: res += dic.get(char) if dic.get(pre) and dic.get(pre) &lt; dic.get(char): res -= 2 * dic.get(pre) pre = char logger.info(&quot;logging is awesome&quot;) return res roman_number(&quot;IV&quot;)</pre>このコードを実行すると、結果は次のようになります。次は次のとおりです:

#2023-03-04 02:26:57,619 - root - 情報 - ログは素晴らしいです

3. ログを使用する利点

#レベル
    。ロガーは、
  • DEBUG

    INFO 、##など、さまざまな種類のメッセージに対してさまざまなログ レベルを設定する方法を提供します。 #WARNINGERROR、および CRITICAL。これにより、重大度に基づいてログ メッセージをフィルタリングし、優先順位を付けることが容易になります。もちろん、印刷はログ記録と同じ動作を模倣できます。 パフォーマンス

    . ログ情報の印刷は、特に大量のデータを処理する場合、ロガーを使用するよりも遅くなる可能性があります。
  • #構成可能性 ロガーは、ログ レベル、ログの宛先、ログ形式などのアプリケーションのログ動作を構成する方法を提供します。ソース コードの変更。これにより、長期にわたるログ動作の管理と維持が容易になります。

  • 柔軟性。ロガーを使用すると、ログ情報を複数の宛先に送信できます。コンソール、ファイル、データベースなど。この柔軟性により、ログの管理と分析が容易になります。

以上がPython でロギング モジュール コードをデバッグする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。