Log4net случайно останавливает запись в журнал. - PullRequest
31 голосов
/ 15 февраля 2010

В настоящее время я создаю приложение ASP.Net-MVC, используя log4net для ведения журнала, но регистратор, кажется, просто останавливается наугад. Он будет долго регистрироваться, а затем остановится, а затем снова начнет работать через некоторое время. Я даже не уверен, что заставляет его возобновить регистрацию. Я не говорю о нескольких потерянных сообщениях - иногда они исчезают на длительный период времени, например, час или около того.

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

Вот моя конфигурация:

<log4net debug="true">
<appender name="RollingLogFileAppender"
        type="log4net.Appender.RollingFileAppender">

  <file value="..\Logs\\CurrentLog.txt" />
  <appendToFile value="true" />
  <datePattern value="yyyyMMdd" />

  <rollingStyle value="Date" />
  <filter type="log4net.Filter.LevelRangeFilter">
    <acceptOnMatch value="true" />

    <levelMin value="INFO" />
    <levelMax value="FATAL" />
  </filter>

  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern
    value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
  </layout>

</appender>

<root>
  <level value="INFO" />
  <appender-ref ref="RollingLogFileAppender" />
</root>

Ответы [ 4 ]

57 голосов
/ 15 февраля 2010

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

Лучше всего включить собственную регистрацию в log4net для внутреннего ведения журнала , чтобы провести некоторую диагностику и (надеюсь) выяснить, почему она не работает.

Итак, в конфигурационном файле вашего приложения добавьте:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
    </appSettings>
</configuration>

, который включает внутреннюю регистрацию, которая отправляется на System.Diagnostics.Trace, поэтому вы можете добавить:

<configuration>
    ...
    <system.diagnostics>
        <trace autoflush="true">
            <listeners>
                <add 
                    name="textWriterTraceListener" 
                    type="System.Diagnostics.TextWriterTraceListener" 
                    initializeData="C:\tmp\log4net.txt" />
            </listeners>
        </trace>
    </system.diagnostics>
    ...
</configuration>

чтобы записать это в файл.

1 голос
/ 09 апреля 2016

Отправьте тестовое сообщение в журнал как можно раньше в жизненном цикле приложения, подойдет простой LogManager.GetLogger("Init").Info("Starting logging"). Если какой-либо другой ссылочный код первым начинает запись в журнал, может произойти сбой части процесса инициализации (так как он загружает настройки из другой сборки, что он делает только один раз).

Читайте здесь: https://logging.apache.org/log4net/release/faq.html#first-log

0 голосов
/ 04 сентября 2018

Поработав некоторое время с Log4Net, я обнаружил, что он вообще перестанет регистрироваться. Неважно, что я пытался, я не мог вернуть его на работу. Кажется, что есть проблемы, когда вы не инициализируете журнал в первых нескольких строках кода, но этого нечеткого указания мне было недостаточно, чтобы надежно заставить журнал работать в dll, загруженном другой программой и т. Д.

Мне так и не удалось активировать внутренний журнал.

Я наконец-то решил создать выделенную библиотеку DLL, которую мои программы могут вызывать для надежного создания журнала с использованием Log4Net. DLL делает только это, и код, создающий журнал, изолирован и никогда не изменяется. Я предполагаю, что таким образом я смогу надежно создавать файлы журналов и записывать в них. До сих пор этот подход исправлял проблемы со входом в систему, на которые я тратил бесчисленные разочаровывающие часы.

Я разместил код в этой теме:

/ stackoverflow.com вопросы / 308436 / log4net-программно-указать-несколько-регистраторов-с-несколько файлы appenders

0 голосов
/ 05 июня 2018

Также проверьте, настроен ли log4net в файле AssemblyInfo.cs. В моем случае при регистрации в этом файле была удалена следующая строка:

[сборка: log4net.Config.XmlConfigurator (Watch = true)]

Что, в свою очередь, заставило log4net прекратить запись в журнал ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...