【问题标题】:Log4net Order log entries for Multiple threads多线程的 Log4net 顺序日志条目
【发布时间】:2016-09-07 08:18:55
【问题描述】:

我确实有 2 个并行线程,它们使用 log4net 文件附加程序使用这种模式写入同一个 logFile:

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

问题是一旦我添加了一个条目日志,例如:

_log.Info("Something to log"); 

我会从线程 A 和 B 中找到包含非有序条目的日志。我想要的是:

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

...等等

我怎样才能做到这一点? Log4Net 中有什么东西可以实现这一点吗?我先教了如何将日志保存在内存中,然后在线程完成后刷新它,但是如果进程被杀死不是一个好主意,所有条目都会丢失。

如有任何帮助,我们将不胜感激。

谢谢

【问题讨论】:

  • 日志记录通常按时间戳排序。您可以创建 2 个单独的日志文件。或者更好:登录到数据库。然后,您可以应用您喜欢的任何过滤器/分组/排序顺序。
  • 您好 Stefan,感谢您的回复。目前每个线程都是一个进程,使用一个日志文件是有限制的。如果每个线程在同一时间记录到同一个文件,它会很混乱,根本不可读。

标签: c# multithreading log4net


【解决方案1】:

似乎因为您正在运行 2 个进程,您可以添加一个缓冲区转发附加程序。以下示例显示了如何配置 BufferingForwardingAppender 以在将消息传递到 ConsoleAppender 之前缓冲 100 条消息。

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

消息在 BufferSize 的块中部分排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-11
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多