2012-11-12 135 views
0

我试图使用log4j的当前版本2.0测试版。 我已经包含了所有必需的log4j jar文件。 启动应用程序带来的只有:如何初始化log4j 2.0? LogManager.getContext带来空指针异常

Exception in thread "main" java.lang.NullPointerException 
    at org.apache.logging.log4j.LogManager.getContext(LogManager.java:203) 
    at org.apache.log4j.LogManager$PrivateManager.getContext(LogManager.java:62) 
    at org.apache.log4j.LogManager.reconfigure(LogManager.java:50) 
    at org.apache.log4j.BasicConfigurator.configure(BasicConfigurator.java:28) 

无论

org.apache.log4j.BasicConfigurator.configure(); 

也不

private static final Logger log = LogManager.getLogger("..."); 

工作了。

有谁知道这个问题可能是什么?

问候

迈克

+0

你真的在'log4j-api - *。jar'旁边加了'log4j-core - *。jar' jar吗? –

+0

如果他没有添加它们,他会得到'ClassNotFoundException' –

回答

1

你的问题是,BasicConfigurator不log4j的V2实现。您可以通过从log4j 1.2到log4j 2的桥接访问BasicConfigurator类。如果您使用Log4j v2,则无法再使用BasicConfigurator。

此时桥库被命名为log4j-1.2-api-2.2.jar。这个问题被问了几年了。

所以,如果你有桥,你可以访问大多数Log4j 1.2类,但它们可能没有实现它们。 BasicConfigurator就是这种情况的一个例子。这就是为什么你得到一个空指针异常。

如果可以使用类似的设置,但级别设置为错误而不是调试,则不需要进行任何配置。如果您希望日志消息的级别低于Error,那么似乎您需要创建自己的BasicConfigurator版本,否则您需要在类路径中添加一个log4j2。[xml | yaml | json]文件。