[解決済み] Pythonのログフォーマット文字列にカスタムフィールドを追加するには?
2022-08-20 03:51:08
質問
現在のフォーマット文字列は
formatter = logging.Formatter('%(asctime)s : %(message)s')
という新しいフィールドを追加したいのですが
app_name
という新しいフィールドを追加したいのですが、これはこのフォーマッタを含む各スクリプトで異なる値を持つことになります。
import logging
formatter = logging.Formatter('%(asctime)s %(app_name)s : %(message)s')
syslog.setFormatter(formatter)
logger.addHandler(syslog)
しかし、その受け渡し方法として
app_name
の値をロガーに渡し、フォーマット文字列に挿入する方法がわかりません。私は明らかにそれを毎回渡すことによって、ログメッセージに表示させることができますが、これは面倒です。
試してみました。
logging.info('Log message', app_name='myapp')
logging.info('Log message', {'app_name', 'myapp'})
logging.info('Log message', 'myapp')
が、どれも動作しない。
どのように解決するのですか?
Python3
Python3.2以降では、以下のように LogRecordFactory
import logging
logging.basicConfig(format="%(custom_attribute)s - %(message)s")
old_factory = logging.getLogRecordFactory()
def record_factory(*args, **kwargs):
record = old_factory(*args, **kwargs)
record.custom_attribute = "my-attr"
return record
logging.setLogRecordFactory(record_factory)
>>> logging.info("hello")
my-attr - hello
もちろん
record_factory
は任意の callable にカスタマイズ可能で、その値は
custom_attribute
の値は、ファクトリーの callable への参照を保持していれば、更新される可能性があります。
なぜアダプタ/フィルタを使用するよりも良いのですか?
- ロガーをアプリケーションに渡す必要がありません。
-
独自のロガーを使用するサードパーティライブラリでも実際に動作します (これは、単に
logger = logging.getLogger(..)
を呼び出すだけで、) 同じログフォーマットを持つようになります。(これは、同じロガーオブジェクトを使用する必要があるフィルタ/アダプタの場合ではありません) - 複数のファクトリーをスタック/チェーンすることができます。
関連
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] Pythonでファイルやフォルダを削除する方法は?
-
[解決済み] Pythonで文字列の部分文字列を取得するにはどうすればよいですか?
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] Pythonで文字列を小文字にするには?
-
[解決済み] 文字列フォーマット:% vs. .format vs. f-stringリテラル
-
[解決済み] Python 2.7サポート終了?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PythonでファイルのMD5チェックサムを計算するには?重複
-
[解決済み] Pythonでコード行間にかかる時間を測定するには?
-
[解決済み] 小数点以下1桁を取得する[重複]。
-
[解決済み] スペースがないテキストを単語のリストに分割する方法
-
[解決済み] PyMongoで.sortを使用する
-
[解決済み] Cythonのコードを含むPythonパッケージはどのように構成すればよいのでしょうか?
-
[解決済み] djangoフレームワークでフォームフィールドから値を取得するには?
-
[解決済み] Pythonの検索パスを他のソースに展開する
-
[解決済み] Pythonでランダムなファイル名を生成する最良の方法
-
[解決済み] Alembicアップグレードスクリプトでインサートやアップデートを実行するにはどうすればよいですか?