4

.NETCommon.Logginglog4netを使用しています。次のように、メソッドとクラス名を含めるようにメッセージパターンを構成しました。

<layout type="log4net.Layout.PatternLayout">
  <conversionPattern value="%-5level [%M %C] - %message%newline" />
</layout>

問題は、Common.Loggingメソッドとクラスの名前を常に取得することです。

FATAL [Fatal Common.Logging.Factory.AbstractLogger] - log message
INFO  [Info Common.Logging.Factory.AbstractLogger] - log message
DEBUG [Debug Common.Logging.Factory.AbstractLogger] - log message

それは最も役に立たないです。メソッド名を印刷する方法はありますか?

4

2 に答える 2

3

Common.Loggingを変更する必要があると思います。Log4NetLogger.csファイルで、次の行を置き換えます

private readonly static Type declaringType = typeof(Log4NetLogger);

private readonly static Type declaringType = typeof(AbstractLogger);

これでうまくいくはずです。これが機能する理由をいくつか説明します。

于 2011-01-13T14:33:49.050 に答える
1

この形式は私の設定で動作します

<layout type="log4net.Layout.PatternLayout">
  <conversionPattern value="%-5level [%logger] - %message%newline" />
</layout>

私のロガーは次のように定義されています

private static readonly Common.Logging.ILog logger = 
              Common.Logging.LogManager.GetCurrentClassLogger();

これらの変更されていないdllを使用します

  • Common.Logging.dll バージョン 2.0.0.0
  • Common.Logging.Log4Net.dll バージョン 2.0.0.0
  • log4net.dll バージョン 1.2.10

更新: ロギング メッセージで、メソッド名をテキストとしてロギング コールに追加するので、コール スタックを分析してメソッド名を取得する際のパフォーマンス オーバーヘッドがありません。

于 2011-01-13T14:46:47.463 に答える