Here is another interesting thing. If I remove the log4j-1.2-api dependency from the pom, then the when I try to build the project from Terminal, I get the following failure:
[*ERROR*] */Users/desilets/Documents/GitRepositories/SpikeLog4j2Compatibility/src/main/java/org/examples/HelloWorld.java:[3,24] package org.apache.log4j does not exist* Which is what I would expect. But the project builds and runs without problem in intelliJ. This is true even if I do "Invalidate caches and Restart". Very strange. On Wed, Jul 6, 2022 at 7:27 AM Alain Désilets <alaindesile...@gmail.com> wrote: > 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 > >