logo

Python でのログイン

ログは、一部のソフトウェアの実行時に発生するイベントを追跡する手段です。ログは、ソフトウェアの開発、デバッグ、実行にとって重要です。ログ記録がなく、プログラムがクラッシュした場合、問題の原因を検出できる可能性はほとんどありません。そして、原因を突き止めると、膨大な時間がかかります。ログを使用すると、ブレッドクラムの痕跡を残すことができるため、何か問題が発生した場合に問題の原因を特定できます。

整数を期待している場合に浮動小数点が与えられ、雲を与えることができるなど、さまざまな状況があります。 API 、メンテナンスのためサービスが停止しているなど。このような問題は制御不能であり、判断するのが困難です。



print ステートメントが Python ではない理由

一部の開発者は、ステートメントを出力するという概念を使用して、ステートメントが正しく実行されたかどうか、または何らかのエラーが発生したかどうかを検証します。しかし、印刷するのは得策ではありません。単純なスクリプトの場合は問題が解決する可能性がありますが、複雑なスクリプトの場合、印刷アプローチは失敗します。
Pythonには組み込みモジュールがあります ロギング これにより、ステータス メッセージをファイルまたはその他の出力ストリームに書き込むことができます。ファイルには、コードのどの部分が実行され、どのような問題が発生したかに関する情報を含めることができます。

Python のログレベル

ログ メッセージには 5 つの組み込みレベルがあります。

  • デバッグ: これらは、通常は問題を診断する場合にのみ必要となる詳細情報を提供するために使用されます。
  • 情報: これらは、物事が期待どおりに動作していることを確認するために使用されます
  • 警告: これらは、何か予期せぬことが起こったこと、または近い将来の問題を示唆するものとして使用されます。
  • エラー: これは、より深刻な問題により、ソフトウェアが一部の機能を実行できなくなったことを示しています。
  • 致命的: これは重大なエラーを示し、プログラム自体が実行を続行できない可能性があることを示します。

必要に応じて、開発者はさらに多くのレベルを作成するオプションがありますが、考えられるすべての状況に対処するにはこれらで十分です。各組み込みレベルには数値が割り当てられています。



ロギング モジュールにはいくつかの機能が満載されています。いくつかの定数、クラス、メソッドがあります。すべて大文字の項目は定数、大文字の項目はクラス、小文字で始まる項目はメソッドです。

基本ハンドラー自体によって提供されるロガー オブジェクトがいくつかあります。



  • ロガー情報(メッセージ): これにより、このロガーにレベル INFO のメッセージが記録されます。
  • ロガー.警告(メッセージ): これにより、このロガーにレベル WARNING のメッセージが記録されます。
  • ロガーエラー(メッセージ): これにより、このロガーにレベル ERROR のメッセージが記録されます。
  • Logger.critical(msg): これにより、このロガーにレベル CRITICAL のメッセージが記録されます。
  • Logger.log(lvl,msg): これにより、このロガーに整数レベル lvl のメッセージが記録されます。
  • ロガー例外(メッセージ): これにより、このロガーにレベル ERROR のメッセージが記録されます。
  • Logger.setLevel(lvl): この関数は、このロガーのしきい値を lvl に設定します。これは、このレベル以下のメッセージはすべて無視されることを意味します。
  • Logger.addFilter(filt): これにより、このロガーに適合する特定のフィルターが追加されます。
  • Logger.removeFilter(filt): これにより、このロガーに適合する特定のフィルターが削除されます。
  • Logger.filter(レコード): このメソッドは、提供されたレコードにロガーのフィルターを適用し、レコードが処理される場合は True を返します。それ以外の場合は False を返します。
  • Logger.addHandler(hdlr): これにより、特定のハンドラー hdlr がこのロガーに追加されます。
  • Logger.removeHandler(hdlr) : これにより、特定のハンドラー hdlr がこのロガーに削除されます。
  • Logger.hasHandlers(): これにより、ロガーにハンドラーが構成されているかどうかがチェックされます。

便利なハンドラー

基本のハンドラー クラスに加えて、多くの便利なサブクラスが提供されています。

ハンドラ

説明

ストリームハンドラー メッセージをストリーム (ファイルのようなオブジェクト) に送信します。
ファイルハンドラ メッセージをディスク ファイルに送信します。
BaseRotatingHandler 特定の時点でログ ファイルをローテーションするハンドラーの基本クラス。使用 回転ファイルハンドラ または TimedRotatingFileHandler その代わり。
回転ファイルハンドラ 最大ログ ファイル サイズとログ ファイルのローテーションをサポートして、メッセージをディスク ファイルに送信します。
TimedRotatingFileHandler メッセージをディスク ファイルに送信し、一定の間隔でログ ファイルをローテーションします。
ソケットハンドラー メッセージを TCP/IP ソケットに送信します。 Python 3.4 以降では Unix ドメイン ソケットもサポートしています。
データグラムハンドラ メッセージを UDP ソケットに送信します。 Python 3.4 以降では Unix ドメイン ソケットもサポートしています。
SMTPハンドラ 指定されたメールアドレスにメッセージを送信します。
SysLogハンドラ おそらくリモート マシン上の Unix Syslog デーモンにメッセージを送信します。
NTEventLogHandler メッセージを Windows NT/2000/XP イベント ログに送信します。
メモリハンドラ メッセージをメモリ内のバッファに送信します。バッファは、特定の条件が満たされるたびにフラッシュされます。
HTTPハンドラー GET または POST セマンティクスを使用してメッセージを HTTP サーバーに送信します。
監視ファイルハンドラ ログを記録しているファイルを監視します。ファイルが変更された場合は、ファイルが閉じられ、ファイル名を使用して再度開かれます。
キューハンドラ キューまたはマルチプロセッシング モジュールに実装されているメッセージなどのキューにメッセージを送信します。
Nullハンドラ エラーメッセージに関しては何もしません。 「ロガーのハンドラーが見つかりませんでした」メッセージを回避するためにライブラリ開発者によって使用されます。

Python ロギングの基本

ロギング モジュールを使用してイベントをファイルに記録する基本は非常に簡単です。そのためには、ライブラリからモジュールをインポートするだけです。

  1. ロガーを作成して構成します。複数のパラメーターを含めることができます。ただし重要なのは、イベントを記録するファイルの名前を渡すことです。
  2. ここでロガーの形式も設定できます。デフォルトでは、ファイルは次の場所で動作します。 追加する モードですが、必要に応じて書き込みモードに変更できます。
  3. また、各レベルに割り当てられた数値に基づいて、追跡のしきい値として機能するロガーのレベルを設定することもできます。
    パラメータとして渡すことができる属性がいくつかあります。
  4. これらすべてのパラメータのリストは次のとおりです。 Pythonライブラリ 。ユーザーは要件に応じて必要な属性を選択できます。
    その後、オブジェクトを作成し、例に示すようにさまざまなメソッドを使用します。

変数のログを記録する

このコードは、エラー メッセージをログに記録する方法を示しています。 logging.error() 関数は、変数名のプレースホルダー %s を使用してエラー メッセージをログに記録するために使用されます。

Python3




import> logging> name>=> 'GFG'> logging.error(>'%s raised an error'>, name)>

>

Javaの歴史

>

出力:

ERROR:root:GFG raised an error>

すべてのレベルのロギング

このコードは、ログのすべてのレベルを示しています。

パイソン




# importing module> import> logging> # Create and configure logger> logging.basicConfig(filename>=>'newfile.log'>,> >format>=>'%(asctime)s %(message)s'>,> >filemode>=>'w'>)> # Creating an object> logger>=> logging.getLogger()> # Setting the threshold of logger to DEBUG> logger.setLevel(logging.DEBUG)> # Test messages> logger.debug(>'Harmless debug Message'>)> logger.info(>'Just an information'>)> logger.warning(>'Its a Warning'>)> logger.error(>'Did you try to divide by zero'>)> logger.critical(>'Internet is down'>)>

>

>

上記のコードは、指定された名前のファイルを生成します。ファイルを開くと、ファイルには次のデータが含まれています。

Python ロギングの基本

ロギングの構成

ファイルへのログ記録: temp.conf

[loggers] keys=root,simpleExample [handlers] keys=consoleHandler [formatters] keys=simpleFormatter [logger_root] level=DEBUG handlers=consoleHandler [logger_simpleExample] level=DEBUG handlers=consoleHandler qualname=simpleExample propagate=0 [handler_consoleHandler]>

例:

このコードは、 temp.conf ファイル。という名前のロガーを取得します。 簡単な例 さまざまなログ レベルでメッセージをログに記録します。

Python3

Javaのオブジェクトの配列


CSSリスト



import> logging> import> logging.config> logging.config.fileConfig(>'temp.conf'>)> # create logger> logger>=> logging.getLogger(>'simpleExample'>)> # 'application' code> logger.debug(>'debug message'>)> logger.info(>'info message'>)> logger.warning(>'warn message'>)> logger.error(>'error message'>)> logger.critical(>'critical message'>)>

>

>

出力:

2023-06-15 18:16:21 - simpleExample - DEBUG - debug message 2023-06-15 18:16:21 - simpleExample - INFO - info message 2023-06-15 18:16:21 - simpleExample - WARNING - warn message 2023-06-15 18:16:21 - simpleExample - ERROR - error message 2023-06-15 18:16:21 - simpleExample - CRITICAL - critical message>

Python ロギング例外

ログ記録中に例外を発生させると、特定のシナリオでアプリケーションの例外的な状態やエラーを示すのに役立ちます。例外を発生させることで、通常の実行フローを停止し、発生した問題について呼び出し元またはログ システムに通知できます。

このコードでは、ロギングによってキャッチされる例外を発生させています。例外。

Python3




import> logging> logging.basicConfig(level>=>logging.DEBUG,> >format>=>'%(asctime)s - %(levelname)s - %(message)s'>)> def> perform_operation(value):> >if> value <>0>:> >raise> ValueError(>'Invalid value: Value cannot be negative.'>)> >else>:> ># Continue with normal execution> >logging.info(>'Operation performed successfully.'>)> try>:> >input_value>=> int>(>input>(>'Enter a value: '>))> >perform_operation(input_value)> except> ValueError as ve:> >logging.exception(>'Exception occurred: %s'>,>str>(ve))>

>

>

出力:

Enter a value: -1 2023-06-15 18:25:18,064 - ERROR - Exception occurred: Invalid value: Value cannot be negative. ValueError: Invalid value: Value cannot be negative.>