在应用程序中部分工作的日志记录

Logging partially working in the application

在我的 WPF 应用程序中,我使用 log4net 进行日志记录。这个应用程序实现了几个页面。我的问题是日志记录从第一页开始。用户导航到的任何其他页面都不会进入日志文件。我也没有遇到任何异常。

这是我的 app.config 中的设置方式:

<log4net>
    <!-- Define some output appenders -->
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file type="log4net.Util.PatternString" value="..\Logs\%property{LogName}.txt" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="5" />
      <maximumFileSize value="5MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%d{yyyy/MM/dd HH:mm:ss} [%thread] %-5level %logger - %message%newline" />
      </layout>

      <filter type="log4net.Filter.LoggerMatchFilter">
        <loggerToMatch value="MyWPFApplicationLog" />
        <acceptOnMatch value="false" />
      </filter>
    </appender>
    <root>
      <level value="INFO" />
      <appender-ref ref="RollingFileAppender" />
    </root>

    <appender name="MyWPFApplicationAppender" type="log4net.Appender.RollingFileAppender">
      <file type="log4net.Util.PatternString" value="../Logs/MyWPFApplication.txt" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="1" />
      <maximumFileSize value="100MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%d{yyyy/MM/dd HH:mm:ss} [%thread] %-5level %logger - %message%newline" />
      </layout>
    </appender>
    <logger name="MyWPFApplicationLog">
      <level value="INFO"/>
      <appender-ref ref="MyWPFApplicationAppender" />
    </logger>
  </log4net>

然后我在 AssemblyInfo.cs 中有以下内容:

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

在我要进行日志记录的所有 class 中,我声明了以下内容。

private static readonly log4net.ILog logger = log4net.LogManager.GetLogger("MyWPFApplicationLog");

之后我就在 class 的各个地方使用了 logger.Info , logger.Error 方法。从第一页开始,所有内容都进入 MyWPFApplication.txt 文件,但任何后续页面都没有。奇怪的是,在 Logs 文件夹中,我确实看到创建了另一个文件 (null).txt,但它是空的。你在这里看到我可能做错了什么吗?

合乎逻辑的解释是您在另一个 类 中使用了不同的记录器名称。检查名称是否为 idd MyWPFApplicationLog。如果是这样,您最好的选择是启用 log4net 调试以查看您的记录器是否 working/crashed。在你的 web.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
    </appSettings>

...

    <system.diagnostics>
        <trace autoflush="true">
            <listeners>
                <add 
                    name="textWriterTraceListener" 
                    type="System.Diagnostics.TextWriterTraceListener" 
                    initializeData="C:\tmp\log4net.txt" />
            </listeners>
        </trace>
    </system.diagnostics>
</configuration>

Log4net FAQ