Log4net多个记录器 - 文件记录器无法正常工作

时间:2016-03-24 03:53:22

标签: log4net log4net-configuration

将配置日志发送到Eventlog后,它适用于SmtpSender。但是filelogger不会记录,它会在路径中创建日志文件,但不会执行任何调试日志。

<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>    

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

2 个答案:

答案 0 :(得分:0)

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

  

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

     

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

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

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

     

•要以编程方式启用log4net的内部调试,您需要进行设置   log4net.Util.LogLog.InternalDebugging属性为true。明显   设置越快,将产生越多的调试。

     

内部调试消息被写入控制台和   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

答案 1 :(得分:0)

我设法得到了日志记录工作,实际上我做了这个实验并且有效。

将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>