2009-01-16 6 views
6

Wo ich arbeite, verwenden wir Log4j für Web-Anwendungsprotokollierung. Die Datei log4j.jar befindet sich auf der Anwendungsebene, nicht auf der Containerebene. Wir verwenden einen täglich rollenden Dateiappender. Unsere log4j.properties-Dateien definieren Appender basierend auf dem Namen des App-Pakets. Daher werden nur Klassen in unserem Anwendungspaket und darunter in der Protokolldatei unserer App protokolliert.Strategien für die Protokollierung von Anwendungsprotokollen aus Bibliothekscode?

In meiner Anwendung erweitere ich unser Framework mit einigen unterstützenden Klassen. Diese Klassen sind nicht im Paket der Anwendung enthalten, da sie nicht exklusiv für meine Anwendung sind und eventuell in eine Jar-Bibliothek für die Verwendung mit anderen Anwendungen umgewandelt werden. Aus diesem Grund werden meine Protokollierungsanweisungen nicht vom Appender meiner Anwendung erfasst und daher nicht in den Protokolldateien meiner Anwendung protokolliert.

Ich möchte zulassen, dass die Klassen in meinem Jar in die Protokolldatei der Anwendung mithilfe der Klassen protokollieren. Wenn ich jedoch einen Appender in der log4j-Eigenschaftendatei meiner Anwendung basierend auf meinen Klassennamen erstelle, vermute ich, dass, wenn mehrere Anwendungen mein jar verwenden, aufgrund der identischen Klassennamen in den log4j.properties-Dateien nur eine Anwendungsprotokolldatei meine empfängt jars Logging-Anweisungen, und dass es alle Logging-Anweisungen von JEDER Anwendung erhalten wird, die dieses jar verwendet. Ich denke, das ist der Fall, da wir einen statischen Logger.getLogger() Aufruf verwenden, um den Logger abzurufen.

Ich möchte zuerst wissen, ob meine Ängste gültig sind, wenn das wirklich passieren würde, wenn mehrere Webanwendungen in demselben oder in verschiedenen Containern mein Glas gleichzeitig verwenden.

Ich würde auch gerne wissen, ob es "Grenzen" gibt, auf denen sich dieses Verhalten ändert. Gibt es dieses Problem beispielsweise unabhängig davon, ob "log4j.jar" ein JAR auf Containerebene oder ein JAR auf App-Ebene ist oder ob jeder Container in einer separaten JVM ausgeführt wird?

Schließlich, wenn dies der Fall ist, würde ich gerne wissen, welche Strategien ich verwenden sollte, um das Problem zu überwinden.

Vielen Dank im Voraus!

+0

was hast du am Ende tun? –

Antwort

2

Wenn log4j.jar nur in der Web-App vorhanden ist, bleiben die Protokolle getrennt, sodass jede Web-Anwendung ihre eigene log4j.jar und log4j.properties haben muss, damit alle Protokolle getrennt bleiben.

+0

Auch wenn beide log4j.properties-Dateien identische Appender für die Klassen definieren, die in meinem Bibliotheks-Jar verwendet werden? –

0

Das Problem ist, dass das bevorzugte Muster für log4j die Verwendung von statischen * Configurator-Methoden ist, die nicht sehr gut mit Anwendungscontainern funktionieren.

Dieses article löste dieses Problem für mich, wenn ich über sie kam ...

Verwandte Themen