【问题标题】:Changing the Log4Net Root Level When App is built as Release将 App 构建为 Release 时更改 Log4Net 根级别
【发布时间】:2009-03-13 02:19:48
【问题描述】:

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

目前我的根配置如下:

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

在我的 Web 应用程序 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
}

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

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

【问题讨论】:

    标签: c# asp.net log4net


    【解决方案1】:

    我做相反的事情,在调试模式下,我使用开发人员配置,这更适合为我过滤相关消息;在发布模式下,我将级别锁定为 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
    

    【讨论】:

    • 您好 Diego,能否提供用户破解您的代码的示例?
    • 嗨 Ricky,不要指望它会被用作安全措施。我只是避免记录可以让用户轻松了解系统行为的重要信息。当然,任何人都可以使用 RedGate 的 Reflector 或此类工具看到这一点。它只是阻止普通用户尝试做某事。但是任何高级 .net 开发人员都可以绕过这个“安全”措施。
    猜你喜欢
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 2022-10-14
    相关资源
    最近更新 更多