Есть ли способ программируемо сбросить буфер в log4net

Я использую log4net с AdoNetAppender. Это, кажется, что AdoNetAppender имеет метод Сброса. Есть ли так или иначе, я могу назвать это из своего кода?

Я пытаюсь создать администраторскую страницу для просмотра всех записей в журнале транзакций базы данных, и мне понравится устанавливать log4net с bufferSize=100 (или больше), затем я хочу, чтобы администратор смог нажать кнопку на администраторской странице, чтобы вынудить log4net записать буферизированные записи в журнале в базу данных (не закрываясь log4net).

Это возможно?

57
задан Alberto Solano 24 June 2019 в 10:31
поделиться

1 ответ

Предполагая, что вы используете Log4Net из коробки, вы можете вытащить путь вниз и промыть подобное appender:

public void FlushBuffers()
{
    ILog log = LogManager.GetLogger("whatever");
    var logger = log.Logger as Logger;
    if (logger != null)
    {
        foreach (IAppender appender in logger.Appenders)
        {
            var buffered = appender as BufferingAppenderSkeleton;
            if (buffered != null)
            {
                buffered.Flush();
            }
        }
    }
}

Редактировать : я написал вышеупомянутый в предположении, что вы хотели промыть приложки для Особенно ILOG (вероятно, плохое предположение сейчас, когда я перечитал вопрос), но, как Стефан указывает на комментарий ниже, вы можете немного упростить код, если вы хотите промыть все приложения по всему Целый репозиторий следующим образом:

public void FlushBuffers()
{
    ILoggerRepository rep = LogManager.GetRepository();
    foreach (IAppender appender in rep.GetAppenders())
    {
        var buffered = appender as BufferingAppenderSkeleton;
        if (buffered != null)
        {
            buffered.Flush();
        }
    }
}
83
ответ дан 24 November 2019 в 19:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: