Probleme mit Log4j

olli2000

Grünschnabel
Hallo habe ein Problem mit Log4j.

Das Log4j liegt in einem Package und ich moechte es in einer Klasse in einem anderen Package in der main Methode aufrufen.

Hier die Log4jBasis Datei, die die Configurationsdatei aufruft
PHP:
package eins.log4j;

import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;


public class Log4jBasis {

    static Logger logger = Logger.getLogger(Log4jBasis.class);
    
//wenn hier zu Testzwecken eingebaut, aber z.Z. nicht benoetigt
//    public static void main (String[] args) {
        
    public void loadConfigurationLog4j() {

    // hier befindet sich die Configurationsdatei, die aufgerufen wird
    //klappt auch einwandfrei
        DOMConfigurator.configure("eins/log4j/Log4jProperties.xml");
        logger.info("Starte die Application");
        logger.info("Beenden der Application");
    }
}

Nun moechte ich in folgender Klasse "Log4jzweiteTestklasse.java" die obere Datei nutzen aber wie geht das, weil bisher bekomme ich immer folgende Fehlermeldung:
Code:
4j:WARN No appenders could be found for logger (eins.log4j.Log4jBasis).
log4j:WARN Please initialize the log4j system properly.




PHP:
package eins.log4j;

import org.apache.log4j.Logger;
import eins.log4j.Log4jBasis;

public class Log4jzweiteTestklasse {
    
    static Logger logger = Logger.getLogger(Log4jBasis.class);

        public static void main (String[] args) {


             logger.info("befinde mich nun in der 2. Testklasse");
        }
}

Was vergesse ich aufzurufen, bzw. was mache ich flasch. Das jarfile ist korrekt eingebunden. Er versucht den appender zu finden, der in der Klasse "Log4jBasis.java" aufgerufen wird, kann Sie aber leider nicht finden und ich weiss nicht warum. Wenn ich nur die Log4jBais.java starte also mit main dann klappt das, aber wo anders aufrufen nicht.

Bin dankbar um jede Hilfe, am besten so verstaendlich wie moeglich, weil arbeite noch nicht solange mit java
 
Code:
public class Log4jzweiteTestklasse {
        static Logger logger = Logger.getLogger(Log4jBasis.class);
das geht so nicht, selbst wenn du log4j zu diesem Zeitpunkt initialisiert hast. Versuche mal folgendes:
Code:
static Logger logger = Logger.getLogger(Log4jzweiteTestklasse.class);
wenn du dann gerne die log4j initialisierung in eine Klasse auslagerst, kann du danach folgendes machen:
Code:
new Log4jBasis().loadConfigurationLog4j();

edit-> zum Verständniss: bei "Logger.getLogger(Log4jBasis.class); " muss die Klasse die da als Parameter mitgegeben wird, die aktuelle Klasse sein, in der die logstatements drinstehen. Sonst gibt es merkwürde, nichtssagende Fehlermeldungen.
Ausserdem musst du darauf achten, dass sich keine logstatements in statischen Blöcken (oder init-Methoden von Servlets) befinden. Diese könnten vor der Initialisierung ausgeführt werden und dann mit deiner Fehlermeldung abstürzten.

Grüsse TrueSun
 
Zuletzt bearbeitet:
Zurück