Подтвердить что ты не робот

Log4net случайно останавливает ведение журнала.

В настоящее время я создаю приложение 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>

4b9b3361

Ответ 1

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>

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

Ответ 2

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

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