Регистрируя имя метода или класса, всегда пишите метод Common.Logging. - PullRequest
4 голосов
/ 13 января 2011

Я использую log4net с .NET Common.Logging .Я настроил шаблон сообщения для включения метода и имени класса следующим образом:

<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

Этосамый бесполезныйЕсть ли способ печати моего метода ?

Ответы [ 2 ]

3 голосов
/ 13 января 2011

Я думаю, вам нужно изменить Common.Logging.В файле Log4NetLogger.cs замените следующую строку

private readonly static Type declaringType = typeof(Log4NetLogger);

на

private readonly static Type declaringType = typeof(AbstractLogger);

Это должно помочь. Здесь - некоторое объяснение, почему это должно работать.

1 голос
/ 13 января 2011

Этот формат работает с моей конфигурацией

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

Мой регистратор определен как

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

Я использую эти неизмененные библиотеки

  • Common.Logging.dll ver 2.0.0.0
  • Common.Logging.Log4Net.dll ver 2.0.0.0
  • log4net.dll ver 1.2.10

Обновление: в сообщениях журналая добавляю имя метода в вызов журнала как текст, поэтому у меня нет лишних затрат при анализе стека вызовов для получения имени метода.

...