Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将Logger.info放入静态块_Java_Log4j - Fatal编程技术网

Java 将Logger.info放入静态块

Java 将Logger.info放入静态块,java,log4j,Java,Log4j,我有以下课程 public class MyClass { private static final Logger logger = Logger.getLogger(MyClass.class); static { logger.info("some text"); } } 可以安全地假设,当我们到达logger.info时,log4j系统已初始化并准备好发出日志了吗 似乎如果我能够执行一个Logger.getLogger()并返回一个有效的

我有以下课程

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

    static
    {
        logger.info("some text");
    }
}
可以安全地假设,当我们到达
logger.info
时,log4j系统已初始化并准备好发出日志了吗


似乎如果我能够执行一个
Logger.getLogger()
并返回一个有效的Logger实例,这意味着Log4j已经初始化,对吗?

是的,是的。静态初始值设定项(即
静态{}
块和对静态变量的初始赋值)按声明顺序执行


log4j的默认初始化依赖于log4j类
LogManager
中的静态块,该静态块在加载
Logger
类后执行,并在首次使用之前加载。这就是您的建筑工程的原因。

请参阅本部分。它讨论初始化类时会发生什么。第二部分讨论静态初始化器。在回答您的问题时,请注意,静态块是按照它们出现的顺序执行的。它们将在类加载时执行,这可能发生在您创建它的实例或访问它的静态var/方法时。

似乎在使用SLF4j时,不保证log4j也准备好了。@Timo不,不是,至少不是单独使用SLF4j api包。您需要一个带有StaticLoggerBinder类的包;例如slf4j-log4j12。如果在类路径上有slf4j-log4j12,那么可以保证吗?在我的例子中,我还想在静态初始值设定项中记录一些东西,但是它不记录。我假设这是因为我的整个应用程序代码都在一个以“a”开头的JAR中,而log4j是稍后加载的。。。