【问题标题】:Persisting log4j settings with Spring使用 Spring 持久化 log4j 设置
【发布时间】:2013-05-30 15:26:32
【问题描述】:

我已经设置使用 log4j.xml 文件将 log4j 与 Spring 一起使用,它工作正常。我可以在运行时使用最终会执行此操作的控制器更改日志级别:

LogManager.getLogger("logger1").setLevel(Level.toLevel(level));

但是,我不知道如何在关机时将设置保存到我的 log4j.xml 文件中。我可以吗?有哪些选择?

我是 Spring 新手。一个很好的简单示例将不胜感激!

【问题讨论】:

  • 反之亦然,您将设置写入日志文件,它们会被 log4j 拾取,您的日志设置不会持久化

标签: spring spring-mvc log4j


【解决方案1】:

我能记住的唯一方法是在关机前打开文件并写入。我将涉及解析文件并编写所需的属性。

尽管请记住,您正在颠覆常规用途,并且大多数时候意味着您试图以错误的方式做某事。问问自己,你真的需要这样做。

【讨论】:

    【解决方案2】:

    如果您确实需要,您可以拨打LoggerManager.getLoggerRepository(),然后拨打getCurrentLoggers() 以获取Enumeration。然后遍历枚举,读取每个 Logger 的相关属性,保存在某处。

    但这可能是个坏主意,原因有很多。

    • 除非你很聪明,否则你最终会保留大量关于未动态覆盖的记录器和级别的冗余信息。

    • 实际使用的记录器取决于代码,并且随着应用程序的发展而变化。您最终可能会维护不再使用的设置 Loggers 并创建它们!

    • 如果您使用 Hibernate 将设置保存到数据库(例如),您可能会遇到“鸡和蛋”问题。 Hibernate 需要在启动之前进行日志记录,但您需要先从数据库中获取设置。

    • 您的日志记录配置可能最终看起来与原始 log4j 配置文件完全不同,因此难以理解记录的内容和未记录的内容。

    • 如果您的应用程序中调整日志记录级别的代码出错,您可能会被卡住。

    • 这不是 IT 人员期望的日志记录工作方式。

    【讨论】:

      猜你喜欢
      • 2011-11-20
      • 1970-01-01
      • 2014-07-06
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      • 2020-04-14
      • 2012-11-29
      • 1970-01-01
      相关资源
      最近更新 更多