【发布时间】:2023-03-04 15:10:02
【问题描述】:
显然是two RollingFileAppenders cannot write to the same file(或者从那以后它发生了变化?)。
那么,我如何将一种布局的信息消息和另一种布局的异常写入同一个滚动磁贴?是否可以在同一个 appender 中指定两个不同的布局,或者有其他解决方案吗?
【问题讨论】:
显然是two RollingFileAppenders cannot write to the same file(或者从那以后它发生了变化?)。
那么,我如何将一种布局的信息消息和另一种布局的异常写入同一个滚动磁贴?是否可以在同一个 appender 中指定两个不同的布局,或者有其他解决方案吗?
【问题讨论】:
尝试将以下元素添加到 FileAppender/RollingFileAppender 元素中 每个 XML 配置文件:
<param name="LockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
我正在使用它从许多 log4net 驱动的可执行文件记录到单个文件。
【讨论】:
这实际上不是 (File)Appender 的问题,而是它背后的 LockingModel 的问题。
正如“随机”所说,您可以使用 MinimalLock,但请注意,它有两个主要缺点:
要避免这种情况,您可以编写自己的LockingModel,它在内部使用互斥锁。这(a)比 MinimalLock 的文件锁定更快,并且(b)仍然允许所有进程最终写入它们的消息(即使,当然,作为预期目的,相互排斥)。我有一个很遗憾无法分享的实现,因为它来自客户的项目。但是想出一个实现应该不会太难(他们可能在网络上,但我现在还找不到)。
编辑:在这个mailing list thread 中有一个实现。就个人而言,我没有使用它,所以我无法判断它是否有效,但它看起来不错。
更新:碰巧注意到原始问题的“不同布局”部分。我想不可能有一个使用两种不同布局的附加程序。除了布局之外,您可以有两个配置相同的附加程序。然后让他们使用自定义的lockingModel 或MinimalLock - YMMV 写入同一个文件。不过,我真的不会那样做。在同一个日志文件中有两种布局(格式!)使得解析或日志分析变得不必要。那为什么不先有两个文件呢?
【讨论】:
rollingStyle和maximumFileSize?写两次听起来真的很愚蠢,因为一个文件不能同时具有 100KB 和 200KB 的最大大小。如果将来有人试图更改其中一个参数而不知道它们在两个附加程序之间重复,会发生什么?这个问题可以解决吗?