我正在尝试在我的日志文件名中包含进程ID信息,以便每次重新启动应用程序时都会创建一个新的日志文件。我正在从两个项目登录到同一个文件。这是我的配置。
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="NewLogForEveryRun" type="log4net.Appender.RollingFileAppender">
<file value="c:\\testLogs\\TwoProjects-[%processid].txt" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d [%t] %-5p %c - %m%n" />
</layout>
</appender>
<logger name="ClassLibrary1">
<level value="ERROR" />
<maximumFileSize value="256KB" />
<param name="Threshold" value="ERROR"/>
<appender-ref ref="NewLogForEveryRun" />
</logger>
<logger name="ClassLibrary2">
<level value="ERROR" />
<maximumFileSize value="256KB" />
<param name="Threshold" value="ERROR"/>
<appender-ref ref="NewLogForEveryRun" />
</logger>
</log4net>
</configuration>
我提到%processid
以获取日志文件名中的进程ID信息,但是当应用程序运行时,它会将日志文件名称创建为TwoProjects-[%processid].txt
。实际进程ID未显示在文件名中。这可能是什么原因?
答案 0 :(得分:14)
默认情况下,除非您指定说明包含模式,否则不会解析或处理您的文件值。
解决方案是更改行
<file value="c:\\testLogs\\TwoProjects-[%processid].txt" />
到
<file type="log4net.Util.PatternString" value="c:\\testLogs\\TwoProjects-[%processid].txt" />