我将尽我所能解释这一点!我有使用Maven创建的战争和Jar。 JAR包包含一些通用类,其他war文件也将使用这些类。因此,我试图初始化log4j 2对象并从log4j配置XML中获取一些值。我添加了:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.12.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.12.1</version>
</dependency>
在WAR和JAR的pom文件中。因此,我在war文件的一个类中创建了LoggerContext对象。然后,对象将传递到JAR文件中的类之一。
LoggerContext loggerContext = (LoggerContext) LogManager.getcontext(false);
String configFilePath = servletContext.getRealPath(WebInit.getProperty("log4jPropertiesFileName"));
File loggingConfigFile = new File(configFilePath);
loggerContext.setConfigLocation(loggingConfigFile.toURI());
log = new RunningLog(loggerContext,logHostName,"MyAPP","ALL","MyAPP");
RunningLog类位于JAR文件中。因此,当我尝试对loggerContext对象执行任何操作时,出现错误:
04-Nov-2019 13:45:07.852 SEVERE [main] org.apache.catalina.core.StandardContext.loadOnStartup Servlet [InitialiseMyAPP] in web application [/MyAPP] threw load() exception
java.lang.ClassnotFoundException: org.apache.logging.log4j.core.LoggerContext
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
引发异常的行是:
setOracleSchema(loggerContext.getconfiguration().getStrSubstitutor().getVariableResolver().lookup("Schema"));
我将JAR文件放在Tomcat的lib文件夹中,并将WAR文件放在webapps文件夹中。首先,我认为我需要在lib文件夹中分别添加log4j jar。所以我也尝试过。但是,当我尝试运行它时,会引发LinkageError。如果您有任何疑问/疑问,请告诉我。任何帮助,将不胜感激。挣扎了两天!