IntelliJ / SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".

Tacoma

Mitglied
Hallo Community,

ich hoffe, ich bin mit meinem Anliegen im richtigen Foren-Bereich.

Ich bin noch am Lernen von Java, Maven und IntelliJ. Bei meinem aktuellen Projekt möchte ich u.a. eine SQLite DB erzeugen. Hierzu habe ich, nach Hinweisen in Forum, die notwendigen jar Files über Maven in das Projekt integriert.

Hier das POM File.

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.example</groupId>
<artifactId>SpiritLog</artifactId>
<version>1.0-SNAPSHOT</version>
<name>SpiritLog</name>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>5.8.2</junit.version>
</properties>

<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>17.0.2</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>17.0.2</version>
</dependency>

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc -->
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.45.2.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>2.0.12</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.23.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.23.1</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.10.1</version>
<configuration>
<source>17</source>
<target>17</target>
</configuration>
</plugin>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.8</version>
<executions>
<execution>
<!-- Default configuration for running with: mvn clean javafx:run -->
<id>default-cli</id>
<configuration>
<mainClass>com.example.spiritlog/com.example.spiritlog.HelloApplication</mainClass>
<launcher>app</launcher>
<jlinkZipName>app</jlinkZipName>
<jlinkImageName>app</jlinkImageName>
<noManPages>true</noManPages>
<stripDebug>true</stripDebug>
<noHeaderFiles>true</noHeaderFiles>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

Beim "Run" wird mir das DB File soweit erzeugt. Leider kommt immer wieder der Hinweis bez. SLF4J

/Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/bin/java -javaagent:/Applications/IntelliJ IDEA CE.app/Contents/lib/idea_rt.jar=60045:/Applications/IntelliJ IDEA CE.app/Contents/bin -Dfile.encoding=UTF-8 -classpath /Users/wchris/IdeaProjects/SpiritLog/target/classes:/Users/wchris/.m2/repository/org/openjfx/javafx-controls/17.0.2/javafx-controls-17.0.2.jar:/Users/wchris/.m2/repository/org/openjfx/javafx-controls/17.0.2/javafx-controls-17.0.2-mac-aarch64.jar:/Users/wchris/.m2/repository/org/openjfx/javafx-graphics/17.0.2/javafx-graphics-17.0.2.jar:/Users/wchris/.m2/repository/org/openjfx/javafx-graphics/17.0.2/javafx-graphics-17.0.2-mac-aarch64.jar:/Users/wchris/.m2/repository/org/openjfx/javafx-base/17.0.2/javafx-base-17.0.2.jar:/Users/wchris/.m2/repository/org/openjfx/javafx-base/17.0.2/javafx-base-17.0.2-mac-aarch64.jar:/Users/wchris/.m2/repository/org/openjfx/javafx-fxml/17.0.2/javafx-fxml-17.0.2.jar:/Users/wchris/.m2/repository/org/openjfx/javafx-fxml/17.0.2/javafx-fxml-17.0.2-mac-aarch64.jar:/Users/wchris/.m2/repository/org/xerial/sqlite-jdbc/3.45.2.0/sqlite-jdbc-3.45.2.0.jar:/Users/wchris/.m2/repository/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar:/Users/wchris/.m2/repository/org/apache/logging/log4j/log4j-core/2.23.1/log4j-core-2.23.1.jar:/Users/wchris/.m2/repository/org/apache/logging/log4j/log4j-api/2.23.1/log4j-api-2.23.1.jar org.osplus.spiritlog.SpiritLog
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Mein log4j2.properties
log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{36} - %m%n

Ich habe in einigen Threads hier zu dem Thema geschaut und einige Korrekturen vorgenommen bez. Maven, log4j.properties, etc.. Leider ohne Erfolg.
Was mache ich hier noch falsch, dass diese Meldung kommt?
 
Was jetzt erst einmal auffällt: Du hast bei slf4j-simple ein scope von test. Damit ist das nur bei den Unit Tests im Classpath und das fehlt.

Das Problem mist dem StaticLoggerBinder ist dann, dass eben kein SLF4J binding vorhanden ist. Siehe dazu z.B. https://www.slf4j.org/codes.html:

Failed to load class org.slf4j.impl.StaticLoggerBinder​

This warning message is reported by slf4j-api version 1.7.x and earlier when the org.slf4j.impl.StaticLoggerBinder class could not be loaded into memory. This happens when no appropriate SLF4J binding could be found on the class path. Placing one (and only one) of slf4j-nop.jar slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar or logback-classic.jar on the class path should solve the problem.

Und auch noch der Hinweis: Das Problem kommt durch slf4j - Anpassungen an log4j (was eine andere Logging Library ist), werden das Problem daher nicht beheben. Und statt slf4j-simple wirst Du evtl. slf4j-log4j12 (https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12/2.0.12) nutzen wollen, damit die slf4j Loggign über log4j ausgegeben werden.
 
Was jetzt erst einmal auffällt: Du hast bei slf4j-simple ein scope von test. Damit ist das nur bei den Unit Tests im Classpath und das fehlt.

Das Problem mist dem StaticLoggerBinder ist dann, dass eben kein SLF4J binding vorhanden ist. Siehe dazu z.B. https://www.slf4j.org/codes.html:


Und auch noch der Hinweis: Das Problem kommt durch slf4j - Anpassungen an log4j (was eine andere Logging Library ist), werden das Problem daher nicht beheben. Und statt slf4j-simple wirst Du evtl. slf4j-log4j12 (https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12/2.0.12) nutzen wollen, damit die slf4j Loggign über log4j ausgegeben werden.
Hallo Konrad,

herzlichen Dank für die Info.

Den Scope für slf4j habe ich zuerst geändert auf runtime. Das brachte keine Veränderung. Ich habe den Scope dann da entfernt.

Dank Deines Hinweises habe ich mir nochmal das POM File in der IDE angeschaut und Maven. Ich habe über Maven dann 2 Fehler gefunden.
1) In dem POM File war 2x ein Eintrag zu log4j-core drin. Den doppelten Eintrag habe ich entfernt
2) Über Maven kam ein Hinweis dass ich anscheinend SLF4J 1.7.36 brauche und nicht die 2.0.12, die ich zuerst hatte. Ich habe dann in dem POM File slf4j-simple auf 1.7.36 umgestellt

Nach diesen Änderungen kam o.a. Meldung nicht mehr.
 

Zurück
Oben