2016-09-07 2 views
1

У меня есть 2 параллельных потоков, которые пишут в том же LOGFILE с помощью файла log4net Appender, используя этот шаблон:записей журнала Log4Net Заказ для нескольких потоков

<layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date{HH:mm:ss} %-5level - %message%newline" /> 
</layout> 

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

_log.Info("Something to log"); 

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

Log File: 
    + Log 1 Thread A 
    + Log 2 Thread A 
    + Log 3 Thread A 
    + Log 1 Thread B 
    + Log 2 Thread B 

... И так далее

Как я могу это достичь? Есть ли что-то в Log4Net, которое может это сделать? Сначала я учил хранить журналы в памяти, а затем очищать их после завершения потока, но это не очень хорошая идея, если процесс будет убит, все записи будут потеряны.

Пожалуйста, любая помощь будет оценена по достоинству.

Благодаря

+0

Ведение журнала обычно заказывается штампами времени. Вы можете создать 2 отдельных файла журнала. Или, может быть, лучше: войдите в базу данных. Затем вы можете применить любой фильтр/группировку/порядок сортировки, который вам нравится. – Stefan

+0

Привет, Стефан, спасибо за ваш ответ. В настоящее время каждый поток является процессом, и существует ограничение на использование одного файла журнала. Если каждый поток регистрируется одним и тем же файлом в одно и то же время, он будет грязным и не читаемым вообще. – MadNeox

ответ

0

Это кажется, потому что вы работаете 2 процесса, вы можете добавить буфер вперед Appender. В следующем примере показано, как настроить BufferingForwardingAppender для буферизации 100 сообщений перед их доставкой в ​​ConsoleAppender.

<appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" > 
    <bufferSize value="100"/> 
    <appender-ref ref="ConsoleAppender" /> 
</appender> 

Сообщения частично упорядочены в блоках BufferSize.