java输入记录器。静态块中的信息
我有以下课程
public class MyClass
{
private static final Logger logger = Logger.getLogger(MyClass.class);
static
{
logger.info("some text");
}
}
可以安全地假设,当我们到达logger.info
时,log4j系统已经初始化并准备好发出日志了吗
似乎如果我能够执行Logger.getLogger()
并返回一个有效的记录器实例,这意味着Log4j已初始化,对吗
# 1 楼答案
见JLS的这一部分。它讨论初始化类时会发生什么This部分讨论静态初始化器。在回答您的问题时,请注意,静态块是按照它们出现的顺序执行的。它们将在类加载时执行,这可能发生在您创建它的实例或访问它的静态var/方法时
# 2 楼答案
是的。静态初始值设定项(即
static {}
块和静态变量的初始赋值)按声明顺序执行log4j的默认初始化依赖于log4j类
LogManager
中的静态块,该静态块在Logger
类加载后执行,并且在首次使用之前加载。这就是为什么你的建设工程