Log4j2 implementierung

MiMa

Top Contributor
Hallo,
ich fange gerade an mein Projekt neu zu reprogrammieren und stelle auch von log41 auf log4j2 um.
Habe die XML Datei erstellt um ein logging in eine Datei zu schreiben und die importe sowie eine Test log Info.

Soweit hat das geklappt ohne Probleme.
Die Datei wurde geschieben inklusive den Logeintrag.

Nun habe ich ein Objekt aus einer von mir erstellten Klasse erzeugt und prompt gibt es einen Fehler.
Die Netbeans IDE hat keinerlei Problem bei der Programmierung angezeigt.
Allerdiongs kann es nicht an der Objekterzeugung liegen, da die Klassse schon mal lief und korrekt arbeitete.

Die Fehlermeldung ist:
Code:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger
    at indexer.dateiformate.Datei.<clinit>(Datei.java:30)
    at indexer.IndexStart.main(IndexStart.java:40)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
    ... 2 more

Die Zeile die markiert ist ist die Erstellung des Objektes ???
Java:
Datei dateiObjekt = new Datei(pfadQuelle, pfadZiel, pfadLoeschen);

Der Konstruktor
Java:
/**
     * Konstruktor für Dateien mit Parameter für<br>
     * Quell -und Zielordner.
     * Quellordner, für Dateien zur Verarbeitung.<br>
     * Zielordner,  für Dateien die verarbeitet wurden.
     *
     * @param pfadQuelle <b>String</b>
     * @param pfadZiel <b>String</b>
     * @param pfadLoeschen <b>String</b>
     */
    public Datei(String pfadQuelle, String pfadZiel, String pfadLoeschen) {
        // Konvertiert den String-Quellpfad in ein File-Objekt
        File pfadQuelleFile = new File(pfadQuelle);
        this.verzeichnisPfadQuelle = pfadQuelleFile;

        // Konvertiert den String-Zielpfad in ein Fil-Objekt
        File pfadZielFile = new File(pfadZiel);
        this.verzeichnisPfadZiel = pfadZielFile;

        // Konvertiert den String-Löschpfad in ein Fil-Objekt
        File pfadLoeschenFile = new File(pfadLoeschen);
        this.verzeichnisPfadLoeschen = pfadLoeschenFile;
    } // Konstruktor Datei
Die Startklasse ist eigentlich ganz simpel??
Java:
public class IndexStart {

    // Erstellt ein LoggerObjekt und holt dessen Instanz
    private static final Logger LOG = LogManager.getLogger(IndexStart.class); // Log4j2
    
    // Instanzvariablen für globale Programmeinstellungen
    static String pfadQuelle = "B:/01 Quelle";     // pVar pfadQuelle : String
    static String pfadZiel = "B:/02 Ziel";         // pVar pfadZiel : String
    static String pfadLoeschen = "B:/06 Loeschen"; // pVar pfadLoeschen : String

    /**
     * Indexer Programmstart
     * @param args
     */
    public static void main(String[] args) {

        LOG.info("Das ist die erste Logging-Meldung zur überprüfung der implementation");
        
        // Schreibt den String der pfadQuelle in die Instanzvariable als File
        Datei dateiObjekt = new Datei(pfadQuelle, pfadZiel, pfadLoeschen);
        System.out.println("pfadQuelle   : " + dateiObjekt.getVerzeichnisPfadQuelle().toString());
        System.out.println("pfadZiel     : " + dateiObjekt.getVerzeichnisPfadZiel().toString());
        System.out.println("pfadLoeschen : " + dateiObjekt.getVerzeichnisPfadLoeschen().toString());
    } // main

Log4J Konfiguration
XML:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="[%t] %-5level %logger{36} - %msg%n" />
        </Console>
        <File name="log" fileName="log/Logger.log" immediateFlush="false" append="false">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
        </File>
    </Appenders>
    <Loggers>
        <Root level="debug">
            <AppenderRef ref="Console" />
            <AppenderRef ref="log"/>
        </Root>
    </Loggers>
</Configuration>

Danke
Mi
 
In der Klasse Datei hast wohl noch eine statische Instanz des log4j-(ohne 2)-Loggers, log4j liegt aber nicht im Classpath 🙂
 
Ich habe den Fehler nicht gefunden und daher nochmal die Klasse Start und Datei neu angelegt.
Zuerst log4j2 integriert, probiert und ohne Fehler dann die Klasse Datei grob neu gemacht und dann das Objekt in der Startklasse erzeugt. Jetzt funktioniert es.
 
Die neuen Klassen habe ich grob funktional Programmierung und mit den beiden aktuellen Klassen verglichen.
Ich habe den dummen Fehler gefunden.
Der Import Befehl der Klasse Datei war falsch. Da der Code kopiert wurde, lag die Klasse Datei in einem Package mit dem namen "dateiformate" das neue package aber aktuell "dateiarten" ist.
Nunja, das passiert warscheinlich nur einmal 🙂
 

Zurück
Oben