Могу ли я заставить log4net добавить реальное имя класса, а не сгенерированное имя класса замыкания? - PullRequest
7 голосов
/ 18 апреля 2011

У меня есть класс, который регистрируется из анонимного метода.Я обмолвился, чтобы подчеркнуть: ...

public class SocketFlusher
{
    private static readonly ILog Log = LogManager.GetLogger(typeof(SocketFlusher));

    public void Flush()
    {
        Wait.For(timeout, () => 
        {
            ... // work
            Log.DebugFormat("{0} bytes available", socket.Available);
        }
    }
}

Моя конфигурация log4net хорошая (я проверил вывод log4net debug="true", а appender работает ),Мой макет appender имеет вид

  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%-4thread] %-5level %class{1} - %message%newline"/>
  </layout>

Но в моем выводе журнала есть этот сумасшедший автоматически сгенерированный статический класс.

2011-03-21 18:10:20,053 [5   ] DEBUG SocketFlusher+<>c__DisplayClass1 - 82 bytes available

Я хочу сказать, что SocketFlusher,Каков правильный макет приложения для получения этого формата?

1 Ответ

10 голосов
/ 18 апреля 2011

Вы хотите, чтобы имя класса появилось в выходных данных приложения.И вы придерживаетесь логики логики именования вашего регистратора именем класса ...

private static readonly ILog Log = LogManager.GetLogger(typeof($CLASSNAME$));

Что вы хотите сделать в макете шаблона appender, это включить шаблон имени %logger вместо%class шаблон.

<layout type="log4net.Layout.PatternLayout">
  <conversionPattern value="%date [%-4thread] %-5level %logger{1} - %message%newline"/>
</layout>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...