我已经设置使用 log4j.xml 文件将 log4j 与 Spring 一起使用,它工作正常。我可以使用控制器在运行时更改日志级别,该控制器最终会这样做:
LogManager.getLogger("logger1").setLevel(Level.toLevel(level));
但是,我不知道如何在关机时将设置保存到我的 log4j.xml 文件中。我可以吗?有什么选择?
我是春天的新手。一个很好的简单例子将不胜感激!
我已经设置使用 log4j.xml 文件将 log4j 与 Spring 一起使用,它工作正常。我可以使用控制器在运行时更改日志级别,该控制器最终会这样做:
LogManager.getLogger("logger1").setLevel(Level.toLevel(level));
但是,我不知道如何在关机时将设置保存到我的 log4j.xml 文件中。我可以吗?有什么选择?
我是春天的新手。一个很好的简单例子将不胜感激!
我能记住的唯一方法是在关机前打开文件并写入。我将涉及解析文件并编写所需的属性。
尽管请记住,您正在颠覆常规用途,并且大多数情况下意味着您正在尝试以错误的方式做某事。问问自己,你真的需要这样做。
如果你真的需要,你可以打电话LoggerManager.getLoggerRepository()
,然后getCurrentLoggers()
得到一个Enumeration
。然后你遍历枚举,读取每个 Logger 的相关属性,并将它们保存在某个地方。
但是,这可能是一个坏主意有很多原因。
除非您对此很聪明,否则您最终将保留大量有关未动态覆盖的记录器和级别的冗余信息。
实际使用的记录器取决于代码,并且随着应用程序的发展而变化。您最终可能会维护Loggers
不再使用的设置......并创建它们!
如果您使用 Hibernate(例如)将设置保存到数据库中,您可能会遇到“鸡和蛋”问题。Hibernate 在启动之前需要日志记录功能,但您需要从数据库中获取设置......首先。
您的日志记录配置可能最终看起来与原始 log4j 配置文件完全不同,因此很难理解正在记录什么,什么没有记录。
如果您的应用程序中调整日志记录级别的代码出错,您可能会被卡住。
这不是 IT 人员期望日志记录工作的方式。