是否可以配置RollingFileAppender的文件名以包含日期和进程ID?

时间:2018-11-02 00:10:46

标签: .net log4net log4net-configuration log4net-appender

我目前已将log4net配置为使用Web应用程序的web.config文件中的以下配置来生成THWS_Process1234_debug_20181102.log之类的日志文件名称:

<appender name="DebugLogAppender" type="log4net.Appender.RollingFileAppender">      
  <file value="C:\Logs\THHWS_Process%processid_debug_.log"/>
  <staticLogFileName value="false"/>
  <datePattern value="yyyyMMdd"/>
  <preserveLogFileNameExtension value="true"/>
  <appendToFile value="true"/>
  <maxSizeRollBackups value="10"/>
  <maximumFileSize value="100MB"/>
  <rollingStyle value="Composite"/>
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss.fff} | %thread | %-5level | %logger | %message%newline"/>
  </layout>
</appender>

我有两种日志,审计和调试。当我有一个要调查的问题时,我希望两个相关的日志文件(用于审核和调试)具有相同的根文件名,因此按文件名排序这两个文件会并排出现。所以我想生成如下日志文件名:

THHWS_20181102_Process1234_audit.log
THHWS_20181102_Process1234_debug.log
THHWS_20181102_Process9876_audit.log
THHWS_20181102_Process9876_debug.log

我想在不使用代码的情况下在web.config中配置文件名。是否可以通过web.config文件生成带有进程ID之前的日期的文件名?

我尝试过的

我尝试了两种方法:将进程ID添加到datePattern并在文件名中使用模式字符串。结果:

1)将进程ID添加到datePattern:

  ...     
  <file value="C:\Logs\THHWS_.log"/>
  ...
  <datePattern value="yyyyMMdd_Process%processid_debug"/>
  ...

这导致文件名类似THHWS_20181102_Proce33proce33i2_2ebuA.D..log,我认为是因为它将“ s”表示为“ second”,而将“ d”和“ g”表示为.NET日期时间模式。

所以我然后尝试转义那些字符:

<datePattern value="yyyyMMdd_Proce\s\s%proce\s\si\d_\debu\g"/>

这使我更接近:THHWS_20181102_Processprocessid_debug.log

但是,有什么办法可以在日期之后添加进程ID?

2)在文件名中使用模式字符串:

<appender name="DebugLogAppender" type="log4net.Appender.RollingFileAppender">      
  <file type="log4net.Util.PatternString" value="C:\Logs\THHWS_%date{yyyyMMdd}_Process%processid_debug.log"/>
  <staticLogFileName value="false"/>
  <appendToFile value="true"/>
  <maxSizeRollBackups value="10"/>
  <maximumFileSize value="100MB"/>
  <rollingStyle value="Composite"/>
  ...
</appender>

这导致以下文件名:THHWS_20181102_Process20220_debug.log.2018-11-02

所以我将rollingStyle更改为Size:

  <rollingStyle value="Size"/>

这将产生正确的文件名:THHWS_20181102_Process22180_debug.log但是,当日期更改时,它不会滚动文件名。

0 个答案:

没有答案