使用背书目录中的log4j2

时间:2018-06-29 15:58:57

标签: java log4j2 jacorb

我的示例代码就是这么简单:

import org.apache.log4j.Logger;
public class Test {
    public static void main(String args[]){
        LOG.info("information log line");
    }
    private final static Logger LOG = Logger.getLogger(Test.class);
}

它可以编译并在log4j 2.11.0上正常运行。

对于使用jacORB的项目,我需要将log4j jar文件log4j-core-2.11.0.jarlog4j-api-2.11.0.jar放入通过-Djava.endorsed.dirs=someDir添加到应用程序的目录中。因此,当我将log4j-jars复制到edDir子目录中并使用

java -Djava.endorsed.dirs=edDir -Dlog4j.configurationFile=log4j.xml Test

它以以下输出终止:

Exception in thread "main" java.lang.ExceptionInInitializerError
    at org.apache.log4j.Logger.getLogger(Logger.java:41)
    at Test.<clinit>(Test.java:7)
Caused by: java.lang.NullPointerException
    at org.apache.logging.log4j.util.LoaderUtil.getClassLoaders(LoaderUtil.java:115)
    at org.apache.logging.log4j.util.ProviderUtil.<init>(ProviderUtil.java:66)
    at org.apache.logging.log4j.util.ProviderUtil.lazyInit(ProviderUtil.java:146)
    at org.apache.logging.log4j.util.ProviderUtil.hasProviders(ProviderUtil.java:130)
    at org.apache.logging.log4j.LogManager.<clinit>(LogManager.java:89)
    ... 2 more

它曾经与log4j 2.6一起使用。升级到log4j 2.11.0后,发生了上述错误。

我做错什么了吗? 我该如何再次进行这项工作?

顺便说一句,JRE是1.7。

3 个答案:

答案 0 :(得分:0)

您尝试使用命令行参数 log4j.ignoreTCL = true

此参数似乎旨在在所有类加载器上查找类。

类似 java -Djava.endorsed.dirs = edDir -Dlog4j.configurationFile = log4j.xml -Dlog4j.ignoreTCL = true测试

答案 1 :(得分:0)

仅使用上述示例(log4j-core-2.11.0.jar和log4j-api-2.11.0.jar)在eclipse中构建项目-您需要更改导入语句并将Logger更改为LogManager:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;



public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        LOG.info("information log line");
    }
    // private static final ExtLogger logger = ExtLogger.create(MyService.class);
    private final static Logger LOG = LogManager.getLogger(Test.class);
}

答案 2 :(得分:0)

由Bootstrap类加载器加载log4j类时出现了问题,在认可目录(this.jokes = data.result)中找到log4j jar文件时就是这种情况。 Log4j不能正确处理该问题(请参阅开头中的stacktrace)。

该问题已在log4j 2.11.1中解决。