Вопрос

Я использую log4net с AdonetAppender. Похоже, у AdonetAppender есть Метод промывки. Анкет Есть ли в любом случае, я могу позвонить это из моего кода?

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

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

Это было полезно?

Решение

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

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();
        }
    }
}

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

Today simpler option is available:

LogManager.Flush();

Flushes logging events buffered in all configured appenders in the default repository. https://logging.apache.org/log4net/release/sdk/html/M_log4net_LogManager_Flush.htm

It is highly recommended to add a timeout, like

LogManager.Flush(3000);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top