1

我在我的应用程序中选择了几个我想始终记录值的地方。我可以简单地使用 Log.Info() 并保留它,但我更喜欢一个无法通过意外更改级别配置而禁用的解决方案。在这种情况下,只要 log4net 未被禁用,我希望这些日志语句触发。

最好的方法是什么?

只看一些 信息,一个选项似乎是创建一个自定义级别,其值设置在 Emergency 之上,但我不知道这是否是一个非常可怕的黑客攻击,具有我没有意识到的副作用或一个合法的选项。我在文档中找不到任何明确的指导。

4

1 回答 1

1

我不是 log4net 专家,但这样的事情可能会做你想做的事:

此代码将从 LogManager 获取一个命名记录器,并以编程方式将其级别设置为“ALL”。如果您稍后在代码中检索此记录器,它将始终记录,即使在配置文件中将日志级别设置为 OFF。

要进行测试,请在配置文件中将根日志级别设置为“OFF”,然后使用以下代码:

  log4net.ILog log = log4net.LogManager.GetLogger("abc");
  log.Info("this won't log because root logger is OFF");

  //Reset the level
  log4net.Repository.Hierarchy.Logger l = (log4net.Repository.Hierarchy.Logger)log.Logger;

  l.Level = l.Hierarchy.LevelMap["ALL"];

  //Try to log again
  log.Info("this will log because we just reset abc's level to ALL");

我测试了它,它似乎确实有效。

我在这里这里找到了这些信息。

于 2010-11-19T21:50:24.057 回答