Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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 使用认可的目录中的log4j2_Java_Log4j2_Jacorb - Fatal编程技术网

Java 使用认可的目录中的log4j2

Java 使用认可的目录中的log4j2,java,log4j2,jacorb,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编译并运行良好

我的示例代码非常简单:

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的项目,我需要将log4jjar文件
log4j-core-2.11.0.jar
log4j-api-2.11.0.jar
放入一个目录,该目录通过
-Djava.annowed.dirs=someDir
添加到应用程序中。因此,当我将log4jjars复制到子目录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
线程“main”java.lang.ExceptionInInitializeError中的异常 位于org.apache.log4j.Logger.getLogger(Logger.java:41) 测试时。(Test.java:7) 原因:java.lang.NullPointerException 位于org.apache.logging.log4j.util.LoaderUtil.getClassLoaders(LoaderUtil.java:115) 位于org.apache.logging.log4j.util.ProviderUtil.(ProviderUtil.java:66) 位于org.apache.logging.log4j.util.ProviderUtil.lazyInit(ProviderUtil.java:146) 位于org.apache.logging.log4j.util.ProviderUtil.hasProviders(ProviderUtil.java:130) 登录org.apache.logging.log4j.LogManager.(LogManager.java:89) ... 还有两个 它曾经与log4j2.6一起工作。升级到log4j 2.11.0后出现上述错误

我做错什么了吗? 我怎样才能使它再次工作


顺便说一句,JRE是1.7。

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

此参数似乎设计用于在所有类装入器上查找该类

大概是 java-Djava.annowed.dirs=edDir-Dlog4j.configurationFile=log4j.xml
-Dlog4j.ignoreTCL=true Test

刚刚使用上述示例(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);
}

当引导类加载器加载log4j类时出现问题,当log4j jar文件位于认可目录(
-Djava.annowed.dirs=…
)中时就是这种情况。Log4j没有正确地处理这个问题(请参阅开篇文章中的stacktrace)


该问题已在log4j 2.11.1中解决。

您真的在使用log4j2吗?看起来您的代码正在使用log4j1。也许您正在使用?实际上,是的,我正在使用log4j1桥:
log4j-1.2-api-2.11.0.jar
。还尝试使用@Bob的帖子中建议的普通log4j2。没有效果。