背景
新しいプロジェクトにロギング関数を追加し、自分で作成したいと思っていましたが、偶然、Google を通じて、Python に非常に強力な組み込みログ モジュールであるロギングがあることを発見しました。いくつかの大まかな調査を行った後、メモをいくつか記載します。
ログを使用する理由
プログラムの実行状況を常に把握し、プログラム例外を迅速に捕捉し、プログラムエラーをタイムリーに発見するという目的を達成するために、プログラムの実行情報を追跡します
ログモジュールの紹介
Pythonから始める2.3、Python 標準ライブラリには、ログ モジュールが追加されました。ログ モジュールは、実行中のアプリケーションに標準の情報出力インターフェイスを提供します。ログ メカニズムの一般的な実装方法は、出力されるデータを txt ファイルに書き込むことです。ログ ファイルはログを記録する一般的な方法であり、ログ モジュールは、TCP および UDP ソケット、電子メール サーバー、Unix syslog システム、NT シリーズ イベント ログ システム、メモリなど、すべてのファイル状オブジェクトに出力情報を出力できます。バッファと HTTP サーバー、そしてもちろん「実際の」ファイルです。
ロギング モジュールの紹介:
import logging #import logging module #使用logging模块: class CLog: #---------------------------------------------------------------------------- def __init__(self): self.logger = logging.getLogger() fileHandler = logging.FileHandler(LOG_FILE_PATH) formatHandler = logging.Formatter('%(asctime)s %(levelname)s: %(message)s') fileHandler.setFormatter(formatHandler) self.logger.addHandler(fileHandler) self.logger.setLevel(logging.NOTSET) #---------------------------------------------------------------------------- def DebugMessage(self,msg): self.logger.debug(msg) pass oCLog = CLog()
単純なログ モジュールは上で定義されており、この単純なコードを使用してそれを説明します。 ロギング モジュールに行きましょう
logger
を使用してログのインスタンスを取得します。コードのこの部分は、さまざまなハンドラーを追加することで、ログ インスタンスの機能を強化できます。
FileHandler
は、ログの出力端がファイルであることを指定します。ファイル パスを渡して出力ファイルを指定します。StreamHandler などの他の出力ターミナルやその他の複雑な出力メソッドを定義できます。ファイルはおそらく最も一般的に使用されるメソッドであり、他のメソッドについてはゆっくりと検討する必要があります。 FormatHandler
FomartHandler は、FileHandler の出力形式を指定します。たとえば、次の形式を使用します: ('%(asctime)s %(levelname)s: %(message)s')、その場合、出力テキスト形式は次のようになります。 2013-07 -25 08:20:01,525 INFO: Goodbye [127.0.0.1]:60442
asctime、levelname などの形式キーワードについては、LogRecord 属性の公式ドキュメントを参照してください
レベル
Logging モジュールは以下を定義します5 種類のログ情報
レベル使用時の優先度
DEBUG詳細情報。通常、問題を診断する場合にのみ重要です。
INFO物事が期待どおりに動作していることの確認。
警告何か予期せぬことが起こったこと、または何らかの問題を示すもの近い将来 (例: 「ディスク容量が少ない」)。ソフトウェアは引き続き期待どおりに動作しています。
エラーより深刻な問題により、ソフトウェアは一部の機能を実行できませんでした。
クリティカルは、次のことを示します。プログラム自体が実行を継続できない可能性があります。
優先関係:
DEBUG
self.logger.debug(msg)、self.logger.info( msg)、およびその他の関数 Priority
SetLevel
SetLevel 関数は、ログ情報を処理するための Log インスタンスの優先順位を定義します。定義された優先順位が info の場合、すべてのデバッグ情報は無視され、出力には出力されません。設定された優先順位とそれ以上の情報が入力されます