进程ID不在log4net日志文件名中

San*_*eep 5 c# log4net

我正在尝试在我的日志文件名中包含进程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>
Run Code Online (Sandbox Code Playgroud)

我提到%processid要在日志文件名中获取Process Id信息,但是当应用程序运行时,它会创建日志文件名TwoProjects-[%processid].txt.实际进程ID未显示在文件名中.这可能是什么原因?

sgm*_*ore 14

默认情况下,除非您指定包含模式,否则不会解析或处理您的文件值.

解决方案是改变线

<file value="c:\\testLogs\\TwoProjects-[%processid].txt" />
Run Code Online (Sandbox Code Playgroud)

<file type="log4net.Util.PatternString" value="c:\\testLogs\\TwoProjects-[%processid].txt" />
Run Code Online (Sandbox Code Playgroud)