I am trying to use log4j2 through log4j-1.2-api in the context of an uber-jar created with the maven shade plugin and am experiencing issues.
I wrote a simple HelloWorld class that illustrates the issue. When I run this class through intelliJ, everything works fine. But when I run it through a terminal, I get ERROR StatusLogger Reconfiguration failed: No configuration found for '55f96302' at 'null' in 'null' In both cases, I invoke the command with -Dlog4j.configuration=/path/to/my/log4j.properties And the log4j.properties is in the old log4j style (i.e. NOT log4j2 style). Not sure what I am doing wrong. One thing I notice is that the class path is different in both situations. When running through intelliJ, it contains a great number of jars, including: - .m2/repository/org/apache/logging/log4j/log4j-core/2.17.2/log4j-core-2.17.2.jar - .m2/repository/org/apache/logging/log4j/log4j-api/2.17.2/log4j-api-2.17.2.jar - .m2/repository/org/apache/logging/log4j/log4j-1.2-api/2.17.2/log4j-1.2-api-2.17.2.jar whereas when I run it from terminal, it just contains my one uber-jar. But based on the content of my pom, I expect that the uber jar will contain classes from those same log4j jars. Here are the details of this HelloWorld example. This is the HelloWorld class package org.examples; import org.apache.log4j.Logger; import java.net.URL; import java.net.URLClassLoader; public class HelloWorld { public static void main(String[] args) { printClassPath(); Logger logger = Logger.getLogger("org.examples.HelloWorld"); logger.trace("Hello from Logger"); } private static void printClassPath() { ClassLoader cl = ClassLoader.getSystemClassLoader(); URL[] urls = ((URLClassLoader)cl).getURLs(); System.out.println("Class path is:"); for(URL url: urls){ System.out.println(url.getFile()); } } } And here is the pom: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.examples</groupId> <artifactId>log4j2-compatibility</artifactId> <version>1.0.0</version> <properties> <log4j.version>2.17.2</log4j.version> </properties> <build> <plugins> <!-- Use shade plugin to create an uber-jar with all dependencies --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.1.0</version> <configuration> <shadedArtifactAttached>true</shadedArtifactAttached> <shadedClassifierName>jar-with-dependencies</shadedClassifierName> <filters> <filter> <artifact>*:*</artifact> <excludes> <!-- This file may contain some log4j configuration that is not in sync with the actual version of log4j we use. So we exclude all versions of that file that might be inherited from a dependency--> <exclude>**/Log4j2Plugins.dat</exclude> </excludes> </filter> </filters> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-1.2-api</artifactId> <version>${log4j.version}</version> </dependency> </dependencies> </project> And here is the log4.properties file # Log to stdout only log4j.rootLogger=warn, stdout # Configure the stdout logger log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern =-- %c{2}: %m%n # Activate some traces log4j.logger.org.examples.HelloWorld=trace