代码之家  ›  专栏  ›  技术社区  ›  Nick Holt

日志(ger)变量声明

  •  2
  • Nick Holt  · 技术社区  · 17 年前

    在大多数情况下,我看到 Log 声明的实例如下:

    public static final Log LOG = LogFactory.getLog(MyClass.class);
    

    我想这意味着 日志配置 当 MyClass 被装载,因此被放置在石头中,直到 类名 是重新加载还是重新启动JVM?

    那么,如果这个假设是正确的,那么什么是确保对 日志配置 发生时(或发生后不久)是否收到?

    6 回复  |  直到 17 年前
        1
  •  3
  •   oxbow_lakes    17 年前

    我想你正在使用 commons-logging LogFactory 班据我所知,通常的日志实现(Log4J, java.util.logging )允许您在正在运行的应用程序中重新加载配置文件(无论 Logger 被宣布为 static 变量)。( 编辑 : 下面Peter的回答证明了我在Log4J的案例中对此的看法是错误的

    然而,它们确实允许 测井水平的动态变化 (例如,通过 MBean 任何 记录器 (包括声明为静态变量的变量)。如果你使用 java.util.logging 你得到了 基础部件 JConsole .

    这只是您关心的级别更改,还是您希望提供完全不同的日志记录配置(例如文件、记录器定义) ?

        2
  •  2
  •   omerkudat    17 年前

        3
  •  2
  •   Vinay Sajip    17 年前

    否,日志配置通常在初始化日志实现类时加载。当您的类被(重新)加载时,所发生的一切就是调用日志API以获取记录器(在任何配置中可能存在,也可能不存在),并将其存储为类变量。

    要重新加载日志记录配置,通常需要重新加载日志记录实现。

        4
  •  2
  •   Thorbjørn Ravn Andersen    17 年前

    取决于后端。

    Logback有一个非常漂亮的特性,其中可以由JMX触发重新加载,即在jvisualvm或jconsole中。

        5
  •  1
  •   Stephen C    17 年前

    实际上,如果您直接使用“java.util.logging”日志记录,那么您可以动态地重新加载记录器配置。LogManager类上有两种方法可用于执行此操作:

    public void readConfiguration() 
        throws IOException, SecurityException
    

    这将重新加载默认日志属性并重新初始化日志配置。

    public void readConfiguration(InputStream ins)
        throws IOException, SecurityException
    

    见 LogManager javadoc .

        6
  •  1
  •   Peter Recore    17 年前

    Log4j可以随时重新加载配置文件。

    请参阅常见问题解答 here

    自动重新加载配置 文件是否更改?

    对DOMConfigurator和 属性配置程序支持自动 通过 配置和监视方法。请参阅API 有关更多详细信息,请参阅文档。

    因为configureAndWatch启动了 一个单独的wathdog线程,因为 log4j 1.2,配置和监视 方法在J2EE中使用是不安全的