[解決済み] DjangoにおけるPythonロギングのエレガントなセットアップ
質問
Django で Python ログをセットアップする方法で、私が満足するものをまだ見つけていません。私の要件はかなり単純です。
- 異なるイベントに対して異なるログハンドラ - つまり、異なるファイルにログを記録できるようにしたいです。
- モジュール内のロガーに簡単にアクセスできること。モジュールは少しの努力でそのロガーを見つけることができなければなりません。
- コマンドラインモジュールに簡単に適用できること。システムの一部は、スタンドアロンのコマンドラインまたはデーモンプロセスです。ロギングはこれらのモジュールで容易に使用可能であるべきです。
私の現在のセットアップは
logging.conf
ファイルを使用して、ログを記録する各モジュールでログをセットアップすることです。それは正しいとは思えません。
あなたが好きなロギングセットアップをお持ちですか?どのように設定を行うか、詳しく教えてください。
logging.conf
を使用するか、コードで設定するか)、いつどこでロガーを開始するか、モジュールでそれらにアクセスする方法などです。
どのように解決するのですか?
私が見つけた最良の方法は、settings.pyでロギング設定を初期化することです。あなたは、設定ファイルを使用するか、プログラムによって段階的に行うことができます - それはあなたの要件に依存します。重要なことは、私は通常、root logger に必要なハンドラを追加し、levels と時には logging.Filters を使って、必要なイベントを適切なファイル、コンソール、syslogs などに取得することです。もちろん、他のロガーにハンドラを追加することもできますが、私の経験では、一般的にこの必要性はありません。
各モジュールでは、ロガーを
logger = logging.getLogger(__name__)
を作成し、それをモジュール内のイベントのロギングに使用します(さらに差別化したい場合は、上で作成したロガーの子であるロガーを使用します)。
私のアプリがsettings.pyでロギングを設定しないサイトで使用される可能性がある場合、私は以下のようにNullHandlerをどこかに定義します。
#someutils.py
class NullHandler(logging.Handler):
def emit(self, record):
pass
null_handler = NullHandler()
で、そのインスタンスが私のアプリでロギングを使用するモジュールで作成されたすべてのロガーに追加されることを確認します。(注意: NullHandler は Python 3.1 の logging パッケージにすでに含まれており、Python 2.7 にも含まれる予定です)。だから
logger = logging.getLogger(__name__)
logger.addHandler(someutils.null_handler)
これは、settings.py でロギングを設定していないサイトで、あなたのモジュールがうまく動作することを保証し、迷惑な "No handlers could be found for logger X.Y.Z" メッセージ(潜在的に誤ったロギング設定に関する警告)を受け取らないようにするために行われます。
この方法で行うことは、指定された要件を満たします。
- 現在行っているように、異なるイベントに対して異なるログ ハンドラを設定することができます。
-
モジュール内のロガーに簡単にアクセスできるようになりました。
getLogger(__name__)
. -
コマンドラインモジュールに簡単に適用できる - これらはまた、インポートされた
settings.py
.
更新しました。 バージョン 1.3 で、Django には をサポートするようになりました。 .
関連
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] PythonでSVGからPNGに変換する
-
[解決済み] Pythonのargparseを使った隠し引数の作成
-
[解決済み] Pythonでマルチプロセッシングキューを使うには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 2つの線分が交差しているかどうかを確認するにはどうすればよいですか?
-
[解決済み] PythonでSVGからPNGに変換する
-
[解決済み] Djangoで2つの日付の間を選択する
-
[解決済み] Spyderを仮想環境で動作させるには?
-
[解決済み] Pythonの要素別タプル演算(sumなど
-
[解決済み] Pythonのインスタンス変数とクラス変数
-
[解決済み] Python 3でバイナリデータを標準出力に書き込むには?
-
[解決済み] Flaskで非同期タスクを作る
-
[解決済み] Python Empty Generator 関数
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?