[解決済み] Pythonのロギング機能にカスタムログレベルを追加する方法
質問
私のアプリケーションのログレベルTRACE (5)を持ちたい。
debug()
で十分です。さらに
log(5, msg)
は、私が欲しいものではありません。Pythonのロガーにカスタムログレベルを追加するにはどうすればよいですか?
私の場合は
mylogger.py
を以下の内容で作成します。
import logging
@property
def log(obj):
myLogger = logging.getLogger(obj.__class__.__name__)
return myLogger
私のコードでは、次のように使っています。
class ExampleClass(object):
from mylogger import log
def __init__(self):
'''The constructor with the logger'''
self.log.debug("Init runs")
では、次に
self.log.trace("foo bar")
編集 (2016年12月8日)です。受理された答えを変更しました pfaの これは、Eric S. からの非常に優れた提案に基づく、優れた解決策であると IMHO は考えています。
解決方法は?
2022年以降に読む人へ:現在、次に評価の高い答えはこちらで確認した方がいいと思います。 https://stackoverflow.com/a/35804945/1691778
私の当初の回答は以下の通りです。
--
@Eric S.
Eric S.の回答は素晴らしいのですが、私は実験によって、ログレベルが何に設定されているかに関わらず、新しいデバッグレベルで記録されたメッセージが常に出力されるようになることを学びました。ですから、もしあなたが新しいレベルの番号を
9
を呼び出すと
setLevel(50)
は、その
下層
というメッセージが誤って出力されます。
これを防ぐには、"debugv" 関数内にもう一行追加して、問題のロギングレベルが実際に有効かどうかをチェックする必要があります。
ロギングレベルが有効かどうかを確認する例を修正しました。
import logging
DEBUG_LEVELV_NUM = 9
logging.addLevelName(DEBUG_LEVELV_NUM, "DEBUGV")
def debugv(self, message, *args, **kws):
if self.isEnabledFor(DEBUG_LEVELV_NUM):
# Yes, logger takes its '*args' as 'args'.
self._log(DEBUG_LEVELV_NUM, message, args, **kws)
logging.Logger.debugv = debugv
のコードを見てみると
class Logger
で
logging.__init__.py
Python 2.7 の場合、これはすべての標準的なログ関数 (.critical, .debug, etc) が行うことです。
どうやら私は評判が良くないため、他の方の回答への返信を投稿できないようです...Ericがこれを見たら、彼の投稿を更新してくれることを願っています =)。
関連
-
Pythonによるjieba分割ライブラリ
-
Python interpreted model libraryによる機械学習モデル出力の可視化 Shap
-
[解決済み] Pythonのeasy_installでインストールしたパッケージはどのように削除すればよいですか?
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] 既存のDataFrameに新しい列を追加する方法は?
-
[解決済み] Pythonのsuper()は多重継承でどう動くのか?
-
[解決済み] React Nativeでロギングを行う方法
-
[解決済み] Androidアプリのリリース版をビルドする前に、すべてのデバッグログ呼び出しを削除するにはどうすればよいですか?
-
[解決済み】Spring Boot。application.propertiesでロギングレベルを設定するにはどうすればよいですか?
-
[解決済み】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 実装 サイバーパンク風ボタン
おすすめ
-
PythonによるLeNetネットワークモデルの学習と予測
-
opencvとpillowを用いた顔認証システム(デモあり)
-
Pythonの画像ファイル処理用ライブラリ「Pillow」(グラフィックの詳細)
-
[解決済み] データ型が理解できない
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み】Django: ImproperlyConfigured: SECRET_KEY 設定は空であってはならない
-
[解決済み】Python elifの構文が無効です【終了しました
-
[解決済み】ImportError: bs4という名前のモジュールがない(BeautifulSoup)
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac