log4j2 will nicht....

izoards

Bekanntes Mitglied
Nachdem ich nun einen ganzen Morgen versuche log4j2 in intelliJ zum laufen zu bringen, frage ich nun verzweifelt hier im Forum, ob mir jemand helfen kann.
Und zwar habe ich log4j version 1 zum laufen gebracht.

Versuche jetzt jedoch Version 2 zu implementieren, leider ohne Erfolg mit folgendem Fehler beim starten der Applikation:

Java:
ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
ERROR Main This is ERROR
FATAL Main This is FATAL


Mein "log4j2.properties" liegt im Ordner resource...

Kann es sein, dass dieses properties file nicht gefunden werden kann? Oder wie kriege ich das ding zum laufen?

Besten Dank für eine Hilfe...
 
Die Properties Datei ist nicht das Problem. Es fehlen Log4j2 Abhängigkeiten - konkret log4j-core

Welches Build-System nutzt du? Maven? Gradle? Falls bisher keins - Ich würde dir empfehlen eines dieser zu nehmen und da die Abhängigkeit einzutragen. Ansonsten wird das ggf. eine Sisyphus-Arbeit alle Abhängigkeiten rauszusuchen und einzutragen.
 
Danke für die rasche Antwort.
Ich verwende zur Zeit gar kein Build-System.

Kann ich das im nachhinein noch hinzufügen, z.B. Maven?
 
Also wenn ich in intellJ ein neues Maven Projekt erstelle und meine vorher funktionierende Klassen reinkopiere..
Funktioniert nichts mehr :-(

Gibt es hier einen kurzen Crash-Kurs, was man beachten sollte?
 
@LimDu ganz herzlichen dank, also ich habe die datei heruntergeladen, in ein libs Ordner gepackt und dann in intellij über rechtsklick add to library gemacht. Der Fehler kommt nicht mehr, jedoch läuft mein Programm auch nicht mehr...
Es will heute nicht...
Wenn ich den Logger deaktiviere, läuft das programm..
Es ist wie verhext...

Java:
public static Logger LOGGER = LogManager.getLogger( XML_TCP.class );
 
Habs soeben nochmals entfernt und hinzugefügt und dann wie du sagtest nur die beiden

log4j-api-2.14.0.jar
log4j-core-2.14.0.jar

hinzugefügt, jetzt scheints zu funktionieren 🙂

haaallleeluja!!!!
 
Puh, also in IntelliJ läufts soweit, wenn ich jedoch ein Jar mache, funktioniert es noch nicht.
Ich habe die log4j2.properties unter resource abgelegt.

Ist das richtig?
 
Was bedeutet denn das "funktioniert es noch nicht"? Wenn Du uns mehr Details nennst, dann ist es evtl. möglich, dir viel zielgerichteter zu helfen.
 
Also es sieht so aus, dass beim ausführen des Jar's, mein Programm beim erstellen von:

Java:
public static Logger LOGGER = LogManager.getLogger( XML_TCP.class );

hängen bleibt...

Könnte es sein, dass er dort auf die log4j2.properties zugriff haben muss?

EDIT: Er bleibt definitiv dort hängen... Soeben auf der CMD beobachtet.... :-( Was könnte das sein?
 
Zuletzt bearbeitet:
Woran erkennst Du, dass er dort hängen bleibt? Das würde mich sehr wundern, zumal das ja eine statische Initialisierung ist. Woran machst Du es also fest, dass er da hängen bleibt?
 
Ich habe die Initialisierung in den Programmablauf genommen und vorher und nachher ein system.out.println("text");
gemacht... Und so in der CMD gesehen, dass er dort nicht weiter geht....
 
Was ist für Dich "die Initialisierung"? Was genau machst Du?

Ich würde vermuten, dass Du eine Exception bekommst. Ein Hänger in dem Sinne habe ich bisher nie mitbekommen bei log4j 🙂
Daher wäre für mich interessant, was genau Du machst (Code!) und das bitte so ausführlich, dass man auch mögliche Exception handling sieht. Und wie führst Du aus? Bekommst Du da Exceptions mit?
 
Ich habe das Gefühl es hat etwas mit meiner Projektstruktur zu tun....


Ich habe hier meine Klasse wo ich den Logger "erstelle"



Java:
import javafx.application.Platform;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;



import java.io.IOException;
import java.lang.*;
import java.net.ConnectException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.io.File;
import java.nio.file.*;



public class _XML_TCP {

    //Statische Konstanten definition
    public static final String INPUTFILENAME = "\\Info_PP.xml";
    public static final String OUTPUTFILENAME = "/Resultat_mesure.xml";

    public static final Logger LOGGER = LogManager.getLogger( WinFTM_XML_TCP.class );


    private String pathIn;
    private String pathOut;




    //Konstruktor, Initialize Klassenvariabeln
    public WinFTM_XML_TCP(String pathIn, String pathOut, String pathWinFTMExport, String dossierWinFTM) {
        //    xmlInfoPPTags.add("Type_ordre");      wird in Resultat_mesure.xml icht verwendet!!!
        this.pathIn = pathIn;
        this.pathOut = pathOut;




    public static void stop() throws IOException {
        System.out.println("stopped by windows service");
        // Closen????

        System.exit(0);
    }





    public void start(MainWindowController controller, TCPClient client) throws Exception {


            System.out.println("Started");

            LOGGER.debug("This is DEBUG");
            LOGGER.info("This is INFO");
            LOGGER.warn("This is WARN");
            LOGGER.error("This is ERROR");
            LOGGER.fatal("This is FATAL");



Main PROGRAMM.....


    }


Unter Resource liegt das log4j2.properties file:

Java:
status = error
dest = err
name = PropertiesConfig

property.filename = logs/XML_HandlerLog.log

filter.threshold.type = ThresholdFilter
filter.threshold.level = debug

appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %m%n
appender.console.filter.threshold.type = ThresholdFilter
appender.console.filter.threshold.level = debug


appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
appender.rolling.fileName = ${filename}
appender.rolling.filePattern = logs/XML_HandlerLog2/test1-%d{MM-dd-yy-HH-mm-ss}-%i.log.gz
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size = 10 KB
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.max = 5


logger.rolling.name = WinFTM_XML_TCP
logger.rolling.level = debug
logger.rolling.additivity = false
logger.rolling.appenderRef.rolling.ref = RollingFile
 
Also so leid es mir tut, dich weiter nerven zu müssen: Da beim Code kann ich so erst einmal nichts groß erkennen zumal da Copy & paste Errors mit drin sein müssten (bei public class steht nur _XML_TCP statt WinFTM_XML_TCP - das fällt zumindest erst einmal auf ... Auch bei den Code-Blöcken ist einiges unstimmig.)

Mach doch erst einmal ein minimales Beispiel zum testen und führ dies auf eine Art und Weise aus, so dass Du Exceptions siehst. (Also auf der Kommandozeile ausführen). Generell sieht das, was Du hier gezeigt hast, gut aus. Aber ich sehe auch keinen Code, bei dem Du zwischen zwei Ausgaben versuchst einen Logger zu erstellen....

Aber eine Idee kann natürlich sein, dass Du einfach eine Testklasse mit einer main methode machst, die dann einfach nur einen Logger erstellt und etwas ins log schreibt. Kein try / catch oder sonst irgendwas. Dann hast Du ein minimales Testprogramm. Dann kannst Du das Minfest im jar einmal anpassen um diese main Methode starten zu lassen und dann auf der Kommandozeile aufrufen... und dann siehst Du hoffentlich die Exception, die auftritt (Davon gehe ich derzeit immer noch aus).
 
Hallo Kneitzel, ja das stimmt, da habe ich gar nicht schön kopiert....
Ich muss das ganze in Ruhe nochmals anschauen und wie Du sagst, mal ein Test Beispiel machen, bevor ich es bei meinem Programm einbaue...
ich glaube heute wollte ich einfach zu viel und bin dann ins hadern gekommen und so funktionierte gar nichts mehr...
 

Zurück
Oben