我目前已将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并在文件名中使用模式字符串。结果:
...
<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?
<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
但是,当日期更改时,它不会滚动文件名。