この記事では、Python でのログインについて詳しく説明します (例とともに)。これには一定の参考価値があります。困っている友人は参照してください。お役に立てば幸いです。
#はじめに
インターネット上でのログ記録の基本的な使用法は数多くあるため、ここでは紹介しません。本文を紹介する前に、まず要件を見てみましょう: 他の人が使用できるように、特定の関数をクラス ライブラリにカプセル化する必要があるとします。クラス ライブラリ内のログをどのように処理するか? 数年前、 C# で開発されたプロジェクトでは、次のメソッドを使用しました: ロギング基本クラスを定義します。ロギングを使用する必要があるすべてのクラスは、この基本クラスを継承します。この基本クラスでは、 LogHandler イベント。特定のログ アクションを実装するために使用されます。同時に、クラス A の LogHandler デリゲートをクラス B の LogHandler デリゲートにリンクできます。 LogHandler では、2 つのクラスのログ情報が加算されます。 Python でのロギングの実装を見て以来、私のアプローチは非常に弱いことがわかりました。 前回のブログ「Python:logging.NullHandler の使用」で peewee フレームワークでのログ出力を紹介しましたが、簡単に言うと、peewee という名前の Logger が peewee に定義され、NullHandler が追加されます。ログを出力するための特定のハンドラーを追加すると、非常に便利です。メイン プログラムにも Logger があるとします。peewee を呼び出した後、2 つのログを同じログ ファイルに出力したいとします。明らかに、ファイルが同時にプリエンプションされるリスクがあるため、2 つのログの FileHandler が同じログ ファイルを指すことはお勧めできません。もちろん、メイン プログラムで Logger に peeweee という名前を付けることもできますが、これでは低すぎるだけでなく、同じく Logger をカプセル化する別のライブラリが呼び出された場合、扱いが難しくなります。
木の切り株構造のロガー
Logger オブジェクトはツリー構造として設計されており、parent 属性を持ちます。 root という名前のロガーは、すべてのロガーのルート ノードとしてロギングで定義されており、ルートの親属性は None です。ルートはグローバルです。 Logger オブジェクトを取得するためにlogging.getLogger(name=None)
import logging logA = logging.getLogger('a') logA.setLevel(logging.DEBUG) logA.addHandler(logging.StreamHandler()) logB = logging.getLogger('a.b') logB.addHandler(logging.StreamHandler())
Logger A Logger B Logger B
結論
実は、これは説明するのが比較的簡単な問題であり、それほど多くを書く必要はありません。 Python でのロギングの使用方法を共有するつもりはありませんが、ロギングがどのように実装されるかについてのアイデアを共有したいと思います。なぜなら、私はこの問題に遭遇し、解決策を設計したのですが、その後完全に衝撃を受けたからです。離れて。以上がPython でのロギングの詳細な紹介 (例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。