4

我有一个正在使用 log4net 的项目,它运行良好,但我想知道在调试和发布时是否可以覆盖日志记录的根“级别”属性的 XML 配置。

目前我的根配置如下:

<root>
  <level value="WARN"/>
  <appender-ref ref="LogFileAppender"/>
  <appender-ref ref="DebugAppender"/>
</root>

在我的网络应用程序 Global.asax 类中,我想我可以将一些东西包装在一个

protected override void Application_Start(object sender, EventArgs e) {
  base.Application_Start(sender, e);
  XmlConfigurator.Configure();

  #if DEBUG
  //Change logging level to DEBUG
  #endif
}

在调试内置解决方案时将根日志记录级别更改为调试。

这是否可能,我的想法是我想要的最佳实践类型的解决方案,我将如何做到(或者你会如何做得更好)?

4

1 回答 1

6

我做相反的事情,在调试模式下,我使用开发人员配置,这更适合为我过滤相关消息;在发布模式下,我将级别锁定为 WARN 以防止用户想要破解我的代码(他可以使用很多其他方式,但这是一个 5 秒的技巧):

public static void Initialize()
{

#if DEBUG
    ConfigureAndWatch();
#else
    ConfigureAndLockChanges();
#endif

}

#if DEBUG

private static void ConfigureAndWatch()
{
    XmlConfigurator.ConfigureAndWatch(new FileInfo("log4net.config"));
}

#else

private static void ConfigureAndLockChanges()
{
    // Disable using DEBUG mode in Release mode (to make harder to hack)
    XmlConfigurator.Configure(new FileInfo("log4net.config"));
    foreach (ILoggerRepository repository in LogManager.GetAllRepositories())
    {
        repository.Threshold = Level.Warn;
    }
}

#endif
于 2009-03-13T03:08:21.010 回答