【问题标题】:Log4net multiple loggers - File logger not workingLog4net 多个记录器 - 文件记录器不起作用
【发布时间】:2016-03-24 03:53:22
【问题描述】:

以下配置日志到 Eventlog,它适用于 SmtpSender。但是文件记录器不记录,它在路径中创建日志文件,但不做任何调试日志。

<root>
  <level value="DEBUG" />      
  <appender-ref ref="EventLogAppender" />
</root>
<logger additivity="false" name="SmtpLogger">
  <level value="FATAL"/>
  <appender-ref ref="SmtpAppender" />
</logger>
<logger name="RollingFileAppender">
  <level value="DEBUG"/>
  <appender-ref ref="RollingFileAppender"/>
</logger>    

但是当我将根记录器更改为 RollingFileAppender 时,它会记录到文件中,

<root>
  <level value="DEBUG" />      
  <appender-ref ref="RollingFileAppender" />
</root>
<logger additivity="false" name="SmtpLogger">
  <level value="FATAL"/>
  <appender-ref ref="SmtpAppender" />
</logger>
<logger name="RollingFileAppender">
  <level value="DEBUG"/>
  <appender-ref ref="RollingFileAppender"/>
</logger>    

知道为什么会这样吗?如何让文件记录器在这种情况下工作。

【问题讨论】:

    标签: log4net log4net-configuration


    【解决方案1】:

    您没有发布附加程序配置,但是找出问题所在的最简单方法是启用内部调试。这将告诉您滚动文件附加程序中出了什么问题:

    在 log4net 中启用内部调试有 2 种不同的方法。 下面列出了这些。首选方法是指定 应用程序配置文件中的 log4net.Internal.Debug 选项。

    • 也可以通过在 应用程序的配置文件(不是 log4net 配置文件, 除非 log4net 配置数据嵌入到应用程序的配置中 文件)。 log4net.Internal.Debug 应用程序设置必须设置为 值为真。例如:

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

    此设置在启动时立即读取,这将导致所有内部 调试要发出的消息。

    • 要以编程方式启用 log4net 的内部调试,您需要设置 log4net.Util.LogLog.InternalDebugging 属性为真。明显地 设置得越早,产生的调试就越多。

    内部调试消息被写入控制台和 System.Diagnostics.Trace 系统。如果应用程序没有 控制台记录的消息将丢失。请注意,一个 应用程序可以通过设置重定向控制台流 System.Console.Out。 Trace 系统会默认发送消息 到附加的调试器(消息将出现在输出中 窗户)。如果进程没有附加调试器,则 消息被发送到系统调试器。像 DebugView 这样的实用程序 来自http://www.sysinternals.com 可用于捕获这些 消息。

    由于 log4net 内部调试消息被写入 System.Diagnostics.Trace 系统可以重定向那些 消息到本地文件。您可以通过添加定义跟踪侦听器 将以下内容添加到您的应用程序的 .config 文件中:

    <configuration>
        ...
    
        <system.diagnostics>
            <trace autoflush="true">
                <listeners>
                    <add 
                        name="textWriterTraceListener" 
                        type="System.Diagnostics.TextWriterTraceListener" 
                        initializeData="C:\tmp\log4net.txt" />
                </listeners>
            </trace>
        </system.diagnostics>
    
        ...
    </configuration>
    
    Make sure that the process running your application has permission to write to this file. 
    

    log4net faq

    【讨论】:

    • 谢谢彼得,我已经这样做了。没有例外,它正确配置了 RollingfileAppender。权限就足够了,当 RollingFileAppender 作为根 appender 时,它可以正常工作。
    【解决方案2】:

    我设法完成了日志记录工作,事实上,我是作为一个实验进行的,并且成功了。

    在根元素中添加了 RollingFileAppender,

    <root>
      <level value="DEBUG" />      
      <appender-ref ref="EventLogAppender" />    
      <appender-ref ref="RollingFileAppender"/>
    </root>
    <logger additivity="false" name="SmtpLogger">
    <level value="FATAL"/>
    <appender-ref ref="SmtpAppender" />
    </logger>
    <logger name="RollingFileAppender">
    <level value="DEBUG"/>
    <appender-ref ref="RollingFileAppender"/>
    </logger> 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 2017-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多