2008-09-24 136 views
7

我在一个C#项目中使用log4net,在生产环境中,我想禁用所有日志记录,但是当一些致命的 错误发生时,它应该将所有先前的512条消息记录到file.I已经成功配置了这个,并且工作正常。它会在发生一些致命错误时将消息记录到文件中。Log4Net/C# - 禁用默认日志记录

但是,当我从Visual Studio运行它时,我可以看到所有的日志消息都被写入输出窗口,无论它是否是致命的。 (我不能看到这些消息时,我从Windows资源管理器中运行 - 我的应用程序是一个WinForm的exe并没有控制台窗口看到输出)

有没有什么方法来禁用此日志记录?我只需要在文件中记录日志,当发生一些致命错误时也是如此。

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <log4net debug="false"> 

     <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
      <file value="log.txt" /> 
      <appendToFile value="true" /> 
      <rollingStyle value="Size" /> 
      <maxSizeRollBackups value="10" /> 
      <maximumFileSize value="1MB" /> 
      <staticLogFileName value="true" /> 
      <layout type="log4net.Layout.PatternLayout"> 
       <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
      </layout> 
     </appender> 

     <appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" > 
      <bufferSize value="512" /> 
      <lossy value="true" /> 
      <evaluator type="log4net.Core.LevelEvaluator"> 
       <threshold value="FATAL"/> 
      </evaluator> 
      <appender-ref ref="RollingFileAppender" /> 
     </appender> 

     <root> 
      <level value="DEBUG" /> 
      <appender-ref ref="BufferingForwardingAppender" />   
     </root> 
    </log4net> 
</configuration> 

这就是我在Windows Forms的静态初始化程序中配置它的方法。

static Window1() 
    { 
     Stream vStream = typeof(Window1).Assembly.GetManifestResourceStream("TestLogNet.log4net.config"); 
     XmlConfigurator.Configure(vStream); 
     BasicConfigurator.Configure(); 
    } 

而且我在winform的构造函数初始化的记录器对象

logger = LogManager.GetLogger(typeof(Window1)); 

[语言 - C#, .NET框架 - 3.5, Visual Studio 2008中, log4net的1.2.10, 项目类型 - WinForms]

+0

是否所有内容都输出到控制台?当然,因为你的winforms应用程序没有控制台,它只是按你想要的那样进行记录? – 2008-09-24 12:57:53

+2

由于所有控制台调用都是同步的,因此它对性能至关重要。如果你有一堆后台线程做记录,那么他们会受到严重的影响。 – 2008-09-24 13:05:02

回答

0

如果应用程序在发布模式下编译,您是否仍然在Visual Studio中看到消息? log4net有可能使用Debug.Write来显示错误。如果是这种情况,那么这些消息不应该以释放模式出现。