私はラッパを使っていると少しばかげているのですが、ラムダを使って "extras"に似た、長い、厄介なパラメータを持つラップをラップすると、この問題が解決しました。他のところで良い答えを見つけられなかったので、私は分かち合うと思った。
(これは、Python 3.2.3ソリューションであり、再び、それはラムダラッパーではなく、クラスのラッパーに固有です。。)
ステップ1:..Lib \ログを見つけ、Pythonのソースコードを調べます\ __ init__.py、
手順b: "Logger.findCaller"メソッドを見つけ、どこかのユーティリティファイルにコピーし、 "find_caller_no_lambda"という名前に変更します。
次のステップ:味わうように変更、任意のモジュールレベル属性の接頭辞、メソッドシグネチャから「自己」を削除し、次のように変更します。
# if filename == _srcfile: # Original line
if filename == logging._srcfile or f.f_code.co_name == "<lambda>": # New line
f = f.f_back # Original line for context.
continue # Original line for context.
ステップを最後:あなたのロガーが宣言されている場所は、次のように挿入します行:
my_logger.findCaller = util.find_caller_no_lambda
Voilà。
(そしてもちろん、あなたがそれのように感じる場合は、1つの小さな変更のためだけのサブクラスロガーをすることができます。)
補遺:
逆に、あなたがキーの競合に対してチェックを削除するLogger.makeRecordを書き換えることができますそして、行番号、関数名などをログ呼び出し自体に追加する/あなたのラッパーでそのようなものを検出する。
ロガーはシングルトンなので、ラッパーインスタンスに保持することで何も得られません。私はラッパーを取り除くだろう - あなたを買うのは何ですか? –