log4net регистрирует только при работе в отладчике Visual Studio

Я использую Visual Studio 2008, и у меня проблема с ведением журнала log4net (v1.2.10). У меня есть небольшая консольная тестовая программа с одним оператором журнала. Я настроил log4net для RollingLogFileAppender и ConsoleAppender.

Когда я запускаю скомпилированный exe-файл из командной строки, я вижу правильное создание файла журнала в моем каталоге времени выполнения. Файл журнала создается (или добавляется к нему, если он существует), но единственным выходом являются [Заголовок] и [Нижний колонтитул] в соответствии с настройками. Нет вывода на консоль.

Однако когда я работаю под отладчиком, сообщение журнала появляется как в файле журнала, так и на консоли. Ниже приведена моя конфигурация log4net:

<log4net>
  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger - %message%newline" />
  </appender>
  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="quicktest-log-" />
    <appendToFile value="true" />
    <immediateFlush value="true" />
    <datepattern value="yyyy-MM-dd" />
    <maxSizeRollBackups value="100" />
    <maximumFileSize value="1048576" />
    <rollingStyle value="Composite" />
    <staticLogFileName value="false" />
    <layout type="log4net.Layout.PatternLayout">
      <header value="[Begin Quicktest program log]&#13;&#10;" />
      <footer value="[End Quicktest program log]&#13;&#10;" />
      <conversionPattern value="%date{HH:mm:ss} [%thread] %-5level %logger: %message%newline" />
    </layout>
  </appender>
  <root>
    <level value="ALL" />
    <appender-ref ref="ConsoleAppender" />
    <appender-ref ref="RollingLogFileAppender" />
  </root>
</log4net>

person moomi    schedule 06.04.2009    source источник
comment
+1 за то, что заставил меня смеяться в ответ на его собственный вопрос   -  person Darren Griffith    schedule 15.03.2013


Ответы (3)


Эта теория может показаться натянутой, но убедились ли вы, что файл app.config скопирован в папку, где находится ваш исполняемый файл? App.config необходимо скопировать туда, где находится выходной исполняемый файл, и вы также должны переименовать его в ‹executablename›.config, поэтому, если ваш исполняемый файл — MyProgram.exe, config должен находиться в MyProgram.exe.config.

person galets    schedule 06.04.2009
comment
Спасибо за быстрый ответ и проверку работоспособности... app.config обрабатывается правильно. - person moomi; 06.04.2009

Это работает сейчас, но тайна остается. По-видимому, полное брюхо китайского буфета - единственное решение такой проблемы, потому что, когда я его попробовал, проблема исчезла.

Моя тестовая программа представляла собой один файл с

class Test 
{
    static void Main (string[] args)
    {
       .
       . // some logging attempted here.
       .
    }
}

Когда у меня изначально возникла проблема, я вел журнал в Main(). После этого я создал метод в классе Test, создал экземпляр класса Test в Main и переместил журналирование в метод. Это сняло проблему:

class Test
{
    static void Main (string[] args)
    {
      var p = new Test();
      p.Go ();
    }
    public void Go ()
    {
       . // some logging here.
    }
}

Это все еще неубедительно. Я вернул его в исходное положение, и он начал работать. Таким образом, я должен заключить, что ответ на эту загадку таков: Не пытайтесь запускать тестовые программы log4net в первый раз, не наевшись китайской еды.

person moomi    schedule 06.04.2009
comment
У меня такая же проблема - в моем городе нет китайской еды :( - person UpTheCreek; 13.11.2009

У меня была такая же проблема, и я выполнял развертывание clickonce.

Я обнаружил, что мне нужно добавить log4net.xml в свойства проекта > Publish > ApplicationFiles и сделать этот log4net.xml файлом данных.

person Rohit Sachan    schedule 28.03.2014