我在我的应用程序中选择了几个我想始终记录值的地方。我可以简单地使用 Log.Info() 并保留它,但我更喜欢一个无法通过意外更改级别配置而禁用的解决方案。在这种情况下,只要 log4net 未被禁用,我希望这些日志语句触发。
最好的方法是什么?
只看一些 信息,一个选项似乎是创建一个自定义级别,其值设置在 Emergency 之上,但我不知道这是否是一个非常可怕的黑客攻击,具有我没有意识到的副作用或一个合法的选项。我在文档中找不到任何明确的指导。
我不是 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");
我测试了它,它似乎确实有效。