当我在发布模式下编译我的应用程序时,我发现Log4Net仍然记录调试信息;任何想法如何解决这个问题?
这是我的App.Config文件:
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
</configSections>
<log4net>
<root>
<level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
</root>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
<param name="File" value="C:\Documents and Settings\test\Application Data\Log.txt" />
<param name="AppendToFile" value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} - %m%n" />
</layout>
</appender>
</log4net>
我错过了什么吗?
答案 0 :(得分:14)
App.Config文件中没有任何内容告诉log4net在发布或调试模式下执行不同的操作。如果您希望两个版本之间的日志记录不同,则必须在两个版本之间更改配置文件。
你最好的选择可能是创建一个App.Config for Release,一个用于Debug,然后按照StackOverflow问题中的建议:
注意:发布和调试App.Config之间的差异将是调试版本中的以下行
<level value="DEBUG" />
与发布版本中的以下行相比(当然,如果需要,您可以选择ERROR或FATAL):
<level value="INFO" />
答案 1 :(得分:4)
也许尝试这样的事情呢?设置为您希望接收的最低级别。
<level value="WARN" />
答案 2 :(得分:1)
如果您的App.Config看起来像这样:
<root>
<level value="Info" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="RollingFileAppender" />
</root>
您可以通过代码修改日志级别(将代码放入Program.cs中):
#if DEBUG
log4net.Repository.ILoggerRepository RootRep;
RootRep = LogManager.GetRepository(Assembly.GetCallingAssembly());
XmlElement section = ConfigurationManager.GetSection("log4net") as XmlElement;
XPathNavigator navigator = section.CreateNavigator();
XPathNodeIterator nodes = navigator.Select("root/level");
foreach (XPathNavigator appender in nodes)
{
appender.MoveToAttribute("value", string.Empty);
appender.SetValue("Debug");
}
IXmlRepositoryConfigurator xmlCon = RootRep as IXmlRepositoryConfigurator;
xmlCon.Configure(section);
#endif