记录多实例应用程序的最佳实践?

我终于尝试了我的WPF桌面应用程序的log4net。

我正在努力解决RollingFileAppender没有内置支持多实例应用程序的事实。

我不喜欢将应用程序限制为单个实例只是为了让logger满意。 单一的手术技巧都是丑陋的黑客。

在日志文件的文件名中使用进程ID也不够好。 这有可能占用无限空间,因为RollingFileAppender在这种情况下无用。

一种解决方案可能是将日志发送到不同的进程,这将负责将输出序列化为文件。 但这会带来新的麻烦。

你对此有何看法?

由于RollingFileAppender不是针对该场景设计的,因此 使用来自写入同一文件的不同进程的多个RollingFileAppender实例并不是一个好主意

你有两个选择:

具有最小锁定的多个FileAppender

使用指向同一文件并使用最小锁定配置的多个FileAppender实例。 这将允许来自多个进程的并发写入操作:

        

多个EventLogAppender

使用写入共享Windows事件源的多个EventLogAppender实例:

       

当然,您也可以将日志发送到数据库或运行在不同进程甚至是不同计算机上的远程组件 ,但这些选择需要设置更多基础架构,因此对于您的方案来说可能过度。

相关资源:

  • log4net配置示例

当您想要记录滚动文件并避免写入同一日志文件的风险时,另一个选项是以编程方式更改log4net日志文件路径的名称 。 例如,您可以将日志文件名称或其某些部分作为进程启动参数传递,然后从代码中进行设置。

只需确保在发生任何日志记录之前执行该路径更改。 否则,可以使用与先前答案中的“具有最小锁定的多个FileAppender”类似的配置。