私の log4net ソリューションには、CallerInfo 属性を使用する API ラッパーがあります。
public void Write(string message,
[CallerMemberName] string memberName = "",
[CallerFilePath] string filePath = "",
[CallerLineNumber] int lineNumber = 0)
ただし、Invoke メソッドで以下のように ICallHandler を使用するなど、前後の応答のトレース ロギングを実行できるように、Unity Interception も使用しています。
public class TraceCallHandler : ICallHandler
{
...
public IMethodReturn Invoke(IMethodInvocation input,
GetNextHandlerDelegate getNext)
{
//---- Trace method inputs
this.LogInfoBeforeInvoke(input);
//---- invoking the target method
InvokeHandlerDelegate next = getNext();
IMethodReturn methodReturn = next(input, getNext);
//---- invoking the target method
this.LogInfoAfterInvoke(methodReturn.ReturnValue);
}
}
注: 上記のコードは決して完全ではなく、正しくもありません... しかし、私が Unity Interception のために何をしていたかをお見せしたかっただけです。
私の質問/課題は次のとおりです。最終的に log.Write(...) を呼び出すとき、TraceCallHandler 情報ではなく、ターゲットの発信者情報が必要です。
たとえば、メソッド名については、次のようにできます。
string methodName = input.MethodBase.Name;
発信者のファイル パスと発信者の行番号を取得するにはどうすればよいですか? リフレクションを介して行うことさえ可能ですか?
ありがとう!