使用log4net始终记录一个值

使用log4net始终记录一个值,log4net,log4net-configuration,Log4net,Log4net Configuration,在我的应用程序中,我选择了几个我希望总是记录值的地方。我可以简单地使用Log.Info()并将其保留,但我更喜欢一个不会因意外更改级别配置而禁用的解决方案。在这种情况下,只要log4net没有被禁用,我就希望激发这些日志语句 最好的方法是什么 仅仅看一下,其中一个选项似乎是创建一个自定义级别,其值设置在紧急状态之上,但我不知道这是一个具有我没有意识到的副作用的残忍可怕的黑客行为,还是一个合法的选项。我在文档中找不到任何明确的指导。我不是log4net专家,但类似的内容可能会满足您的需求: 这段代

在我的应用程序中,我选择了几个我希望总是记录值的地方。我可以简单地使用Log.Info()并将其保留,但我更喜欢一个不会因意外更改级别配置而禁用的解决方案。在这种情况下,只要log4net没有被禁用,我就希望激发这些日志语句

最好的方法是什么


仅仅看一下,其中一个选项似乎是创建一个自定义级别,其值设置在紧急状态之上,但我不知道这是一个具有我没有意识到的副作用的残忍可怕的黑客行为,还是一个合法的选项。我在文档中找不到任何明确的指导。

我不是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");
我测试了它,它看起来确实有效


我找到了这些信息。

我不是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");
我测试了它,它看起来确实有效


我找到了这些信息。

你试过我的答案了吗?有用吗?你试过我的答案了吗?有帮助吗?