Frage

Also, hier ist mein Problem:
Ich habe eine nachrichtengesteuerte Bean X und möchte Logger in der onMessage()-Methode von X verwenden.Nehmen wir an, dass auf meinem App-Server eine einzelne Instanz der Bean läuft, daher würde ich log4j in ejbCreate() initialisieren.Das würde bedeuten, dass ich so etwas tun müsste:

public void ejbCreate() {
    PropertyConfigurator.configure(Classloader.getResourceAsStream("xyz_log4j.properties"));
}

Dies hilft jedoch nicht.Egal was ich mache, ich erhalte meinen Stream immer als Null, ich habe andere Versionen ausprobiert:this.getClass().getStream() und ResourceBundle.

Ich habe meine Eigenschaftendatei in test.jar eingefügt und sie unter den EAR-Bibliotheken hinzugefügt (ich verwende RAD7), und sie wurde in meiner manifest.mf angezeigt.

War jemand schon einmal mit diesem Problem konfrontiert?Wenn ja, wie haben Sie es gelöst?Schätze deine Hilfe...

War es hilfreich?

Lösung

würde ich nicht empfehlen log4j in der EJB-Konfigurationsverfahren erstellen. Mehrere EJBeans können an den Behältern pro der J2EE-Spezifikation Laune aktiviert / passiviert werden. So gibt es eine Möglichkeit, Sie log4j mehrmals die Konfiguration am Ende. Empfehlen die Verwendung von Startup-Bohnen, die nur 1 Mal aufgerufen werden, garantiert werden.

Andere Tipps

Wenn Sie dies aus einer JAR-Datei erhalten, fehlt Ihnen eine Initiale /:

Classloader.getResourceAsStream("/xyz_log4j.properties")

Und je nachdem, welches Verzeichnis die Eigenschaftendatei enthält, müssen Sie einen Pfad zu diesem Verzeichnis relativ zum oberen Rand der Klassenhierarchie angeben.Wenn sich diese Eigenschaftendatei beispielsweise im selben Verzeichnis befindet wie net.mine.Program, dann würden Sie Folgendes tun:

Classloader.getResourceAsStream("/net/mine/xyz_log4j.properties")

Ich glaube nicht, dass Sie mit aus dem META-INF-Verzeichnis lesen können getResourceAsStream(), aber ich habe es noch nie versucht, also gibt es vielleicht eine Möglichkeit, es zu tun.

Sie könnten versuchen, harte Kodierung die Klassennamen in die Last.

<name of your class>.class.getResourceAsStream(fileName);

Alternativ möchten Sie vielleicht schauen SLF4J . Das ist eine Fassade, die auf der Oberseite der LOG4J sitzen kann. Die API ist meist der gleiche (gleiche Schöpfer glaube ich), und SLF4J keine explizite Initialisierungsaufruf erfordern, die Dinge ein wenig vereinfacht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top