如何使用使用参数化名称的log4net RollingFileAppender滚动最大文件?

本文关键字:滚动 RollingFileAppender log4net 文件 何使用 参数 | 更新日期: 2023-09-27 18:12:04

我有一个使用log4net的RollingFileAppender的客户端应用程序,它可以被实例化多次。最初,我将所有的日志写入一个文件,但是,我很快就意识到log4net在写入时锁定了文件,尽管,即使我使用限制较少的写入模式,我的日志文件中仍然会有很多混乱。

我决定将进程id合并到文件名中,如下所示:
<appender name="HumanRollingLog" type="log4net.Appender.RollingFileAppender">
  <file type="log4net.Util.PatternString" value="Log'TestLog[%processid].txt"/>
  <param name="DatePattern" value="dd.MM.yyyy'.log'"/>
  <appendToFile value="true"/>
  <rollingStyle value="Size"/>
  <staticLogFileName value="true" />
  <maxSizeRollBackups value="10"/>
  <maximumFileSize value="1KB"/>
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%type] [%thread] %-5level %logger - %message%newline%exception%"/>
  </layout>
</appender> 

工作。然而,它完全打乱了滚动特性,因为现在每个进程都生成自己的日志文件,只有在进程id开始重复之后才会发生实际的滚动。例如,启动我的应用程序3次,导致创建以下日志:

TestLog[5396].txt
TestLog[5396].txt.1
TestLog[5396].txt.10
TestLog[5396].txt.2
TestLog[5396].txt.3
TestLog[5396].txt.4
TestLog[5396].txt.5
TestLog[5396].txt.6
TestLog[5396].txt.7
TestLog[5396].txt.8
TestLog[5396].txt.9
TestLog[5976].txt
TestLog[5976].txt.1
TestLog[5976].txt.10
TestLog[5976].txt.2
TestLog[5976].txt.3
TestLog[5976].txt.4
TestLog[5976].txt.5
TestLog[5976].txt.6
TestLog[5976].txt.7
TestLog[5976].txt.8
TestLog[5976].txt.9
TestLog[6860].txt
TestLog[6860].txt.1
TestLog[6860].txt.10
TestLog[6860].txt.2
TestLog[6860].txt.3
TestLog[6860].txt.4
TestLog[6860].txt.5
TestLog[6860].txt.6
TestLog[6860].txt.7
TestLog[6860].txt.8
TestLog[6860].txt.9

有人知道我能做什么来解决这个问题吗?我希望每个进程都有自己的文件,但我不能允许在所有进程之间重用滚动。

谢谢!

如何使用使用参数化名称的log4net RollingFileAppender滚动最大文件?

如果您坚持在日志文件的名称中使用进程标识符,那么内置的滚动模式将永远无法工作。我想了解一下你们的要求。"我的日志文件中仍然会有很多乱七八糟的东西"到底是什么意思?您想从日志文件中得到什么答案?

另一个问题的解决方案是将进程id附加到日志消息并使用可用的许多工具之一(log4net仪表板,log4net查看器,Apache Chainsaw, Microsoft LogParser或Kiwi LogViewer)进行过滤/搜索。