log4net 在 window 10 中运行良好,但在 windows 7 和 xp 中只能写入部分日志

log4net works well in window 10 but only wirte part of logs in windows 7 and xp

我在我的应用程序中使用 log4net 记录信息和错误,它在 windows 10 中运行良好,但在 windows 7 和 windows xp 中,它只写了一部分日志,如下所示

这是我的 log4net 配置,有人可以帮忙吗?

<log4net>
  <logger name="logerror">
    <level value="ALL" />
    <appender-ref ref="ErrorAppender" />
  </logger>
  <logger name="loginfo">
    <level value="ALL" />
    <appender-ref ref="InfoAppender" />
  </logger>
  <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="Log\LogError\" />
    <param name="AppendToFile" value="true" />
    <param name="MaxSizeRollBackups" value="100" />
    <param name="MaxFileSize" value="10240" />
    <param name="StaticLogFileName" value="false" />
    <param name="DatePattern" value="yyyyMMdd&quot;.htm&quot;" />
    <param name="RollingStyle" value="Date" />
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="&lt;HR COLOR=red&gt;%n异常时间:%d [%t] &lt;BR&gt;%n异常级别:%-5p &lt;BR&gt;%n异 常 类:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;"  />
    </layout>
  </appender>
  <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="Log\LogInfo\" />
    <param name="AppendToFile" value="true" />
    <param name="MaxFileSize" value="10240" />
    <param name="MaxSizeRollBackups" value="100" />
    <param name="StaticLogFileName" value="false" />
    <param name="DatePattern" value="yyyyMMdd&quot;.htm&quot;" />
    <param name="RollingStyle" value="Date" />
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="&lt;HR COLOR=blue&gt;%n日志时间:%d [%t] &lt;BR&gt;%n日志级别:%-5p &lt;BR&gt;%n日 志 类:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;"  />
    </layout>
  </appender>
</log4net>

我怀疑你指的是 ? 个字符。 ? 是尝试进行无效代码页转换时使用的替换字符,例如,从 Unicode 转换为无法处理所有字符的代码页。例如,尝试使用 Latin-1 代码页将日文或中文字符写入文件会将所有非拉丁字符替换为 ?

这似乎是这里的问题。默认情况下,log4net 使用 Default 编码(对应于系统的区域设置)来写入文件。

您可以使用 FileAppender.Encoding 属性:

显式指定编码
<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
    <encoding value = "utf-8" />

<appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
    <encoding value = "utf-8" />