【问题标题】:Log4Net, Cannot use multiple RollingFileAppenders at a timeLog4Net,一次不能使用多个 RollingFileAppender
【发布时间】:2013-08-28 08:57:28
【问题描述】:

我有一个奇怪的问题。我正在尝试创建多个滚动文件附加程序来引用每个人的同一个文件,但一次只使用一个这些附加程序。

问题是,如果我这样声明我的附加程序:

<appender name="APP1" type="log4net.Appender.RollingFileAppender">
  <file value="C:\Log.txt" />
  <layout type="log4net.Layout.PatternLayout,log4net">
    <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - message%newline" />
  </layout>
 </appender>
<logger name="APP1" additivity="false">
  <level value="DEBUG" />
  <appender-ref ref="APP1" />
</logger>
<appender name="APP2" type="log4net.Appender.RollingFileAppender">
  <file value="C:\Log.txt" />
  <layout type="log4net.Layout.PatternLayout,log4net">
    <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - message%newline" />
  </layout>
 </appender>
<logger name="APP2" additivity="false">
  <level value="DEBUG" />
  <appender-ref ref="APP2" />
</logger>

然后我的“APP1”记录器写入文件没有问题,但不是“APP2”记录器,就像它只获取第一个记录器一样。显然,如果我让两个记录器切换位置,一切都适用于“APP2”,但不适用于“APP1”

另外,当附加失败时,我可以在调试窗口中看到:

log4net: Opening file for writing [C:\Log.txt] append [True]
log4net: Opening file for writing [C:\Log.txt] append [True]

我猜这意味着它正在附加,但奇怪的是它并没有这样做。在工作场景中,我看不到这些日志。 任何提示都非常感谢! 感谢您的宝贵时间

【问题讨论】:

    标签: c# log4net .net-4.5 rollingfileappender


    【解决方案1】:

    也许你可以这样写:

    <root>
        <level value="DEBUG" />
        <appender-ref ref="APP1" />
        <appender-ref ref="APP2" />
    </root>
    

    这是一个使用多个 appender 的配置文件。 你可以在http://logging.apache.org/log4net/release/manual/configuration.html找到它

    <log4net>
    <appender name="Console" type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout">
            <!-- Pattern to output the caller's file name and line number -->
            <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />
        </layout>
    </appender>
    
    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
        <file value="example.log" />
        <appendToFile value="true" />
        <maximumFileSize value="100KB" />
        <maxSizeRollBackups value="2" />
    
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%level %thread %logger - %message%newline" />
        </layout>
    </appender>
    
    <root>
        <level value="DEBUG" />
        <appender-ref ref="Console" />
        <appender-ref ref="RollingFile" />
    </root>
    

    可以使用多个 appender,但不能使用多个 FileAppender(或 RollingFileAppender)登录同一个文件。 因此,如果您更改 APP2 附加程序以登录不同的文件,它可以工作。

    <appender name="APP2" type="log4net.Appender.RollingFileAppender">
      <file value="C:\Log2.txt" />
      <layout type="log4net.Layout.PatternLayout,log4net">
        <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - message%newline" />
      </layout>
    </appender>
    

    问题可能是 log4net 无法通过不同的 FileAppenders 同时访问同一个文件。

    【讨论】:

    • 我没有同时使用多个记录器,我需要记录器名称来知道使用哪一个。我尝试拆分附加程序和记录器,但它也没有工作......
    猜你喜欢
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    相关资源
    最近更新 更多