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