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>

4 ответа

Решение

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>

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

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

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

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

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

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

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

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

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

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

/questions/4965804/log4net-programmno-ukazat-neskolko-registratorov-s-neskolkimi-fajlovyimi-dopolneniyami/4965817#4965817

Другие вопросы по тегам