説明したラッパーを使用するのは少しばかげていることに同意しますが、ラムダを使用して「extras」に類似した、長くて迷惑なパラメーターを持つ呼び出しをラップするときに、この問題を自分で解決しました。他の場所で良い答えが見つからなかったので、共有したいと思いました。
(これはPython 3.2.3ソリューションです。また、クラスラッパーではなくラムダラッパーに固有です。)
ステップ1:Pythonソースコードを検索し、.. Lib \ logging \ __ init __。pyを見つけます。
ステップb:「Logger.findCaller」メソッドを見つけ、それをユーティリティファイルのどこかにコピーし、名前を「find_caller_no_lambda」に変更します。
次のステップ:メソッドシグネチャから「self」を削除し、モジュールレベルの属性のプレフィックスを付け、次の変更を加えて、好みに合わせて変更します。
# 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をサブクラス化することもできます。)
補遺:
逆に、Logger.makeRecordを書き直して、エクストラのキーの競合に対するチェックを削除し、行番号、関数名などをログ呼び出し自体に追加するか、ラッパーでそのようなものを検出することができます。