Log4net: добавлять новые журналы событий в один и тот же файл журнала независимо от даты и времени

В моем приложении новый файл журнала будет создаваться каждый раз, когда мое приложение запускается. Однако это не то, что я хочу, потому что иногда я получал 10 файлов журнала из-за того, что 10 раз открывал и закрывал свое приложение в разное время.

Я хочу, чтобы мой файл журнала назывался Log_LOGFILECREATEDDATE_LOGFILECREATEDTIME.txt. Все последующие события, выполняемые в этом приложении, должны регистрироваться только в этом файле журнала, независимо от того, сколько раз я запускаю приложение. Новый файл журнала следует создавать только в случае переименования или удаления старого файла журнала.

Код в App.config

    <appender name = "FileAppender" type = "log4net.Appender.FileAppender">
        <file type = "log4net.Util.PatternString" value = "D:\Log_%date{yyyyMMdd_HHmmss}.txt" />
        <appendToFile value = "true" />
        <lockingModel type = "log4net.Appender.FileAppender+MinimalLock" />
        <layout type = "log4net.Layout.PatternLayout">
            <conversionPattern value = "%date{dd-MMM-yyyy HH:mm:ss,fff} %level - %message%newline" />
        </layout>
    </appender>

Как я регистрирую данные в своем приложении

public class ABC{
    private static readonly log4net.ILog logMe = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    ....
    function A(int a)
    {
          ...
          logMe.Info("function A done!")
     }
}

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

Iain Ward 16.03.2018 10:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
504
2

Ответы 2

Измените вашу конфигурацию <file type = "log4net.Util.PatternString" value = "D:\Log_%date{yyyyMMdd_HHmmss}.txt" /> на log4net.Util.PatternString" value = "D:\Log_myapplicationname.txt" />

Но на производстве вы получите большой файл, поэтому рассмотрите RollingFileAppender - https://logging.apache.org/log4net/release/config-examples.html

Я не верю, что есть способ попросить log4net просканировать каталог на предмет всех файлов, которые соответствуют вашему «шаблону», и выбрать самый последний, что, по сути, вы и просите. Как насчет компромисса использования статического имени файла и регистрации сообщения времени запуска каждый раз, когда ваше приложение запускается?

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