把Logger.info静态块(Putting Logger.info in static bloc

2019-09-22 13:48发布

我有以下类

public class MyClass
{
    private static final Logger logger = Logger.getLogger(MyClass.class);

    static
    {
        logger.info("some text");
    }
}

它是安全的假设,通过我们到达的时候logger.info ,log4j的系统初始化并准备发出日志?

看来,如果我能够做一个Logger.getLogger()并取回一个有效的Logger实例,这意味着Log4j的初始化,对不对?

Answer 1:

是的。 静态初始化(即,两个static {}块和初始分配到静态变量)在它们被声明的顺序被执行。

的log4j的缺省初始化依赖于log4j的类中的静态块上LogManager一旦被执行Logger类被装载,并且它之前其首次使用加载。 这就是为什么你的建筑工程。



Answer 2:

看到这部分JLS 。 它谈论当你初始化一个类会发生什么。 这部分是静态initialisers会谈。 在回答你的问题,然后AFAIK静态块在它们出现的顺序执行。 当类被加载时,创建它的一个实例或访问它的静止无功/方法,它可以发生,他们将被执行。



文章来源: Putting Logger.info in static block
标签: java log4j