Search the FirstSpirit Knowledge Base
Hallo,
wir haben mehrere Server-Module geschrieben, die teils sehr komplex sind, weswegen ein ausgefeiltes Logging notwendig erscheint.
Es reicht nicht aus, dass die Ausgaben allesamt im fs-server.log landen. Was für uns schon hilfreich wäre, wäre ein konfigurierbares Logfile, in etwa mit Namen <moduleName>_<projekt>.
Gibt es eine Möglichkeit, das zu erreichen, und wenn ja, wie?
vielen Dank
Wir haben inzwischen einen weiteren Appender definiert und wie folgt in der fs-logging.conf konfiguriert:
# modules: ocm-modules
log4j.appender.ModuleAppender=org.apache.log4j.RollingFileAppender
#log4j.appender.ModuleAppender=de.espirit.firstspirit.server.logging.FSAppender
log4j.appender.ModuleAppender.File=log/modules/ocm-modules.log
log4j.appender.ModuleAppender.consoleLogging=false
log4j.appender.ModuleAppender.plainLogging=true
log4j.appender.ModuleAppender.datedLogging=true
log4j.appender.ModuleAppender.maxFileSize=2MB
log4j.appender.ModuleAppender.buffer=8192
log4j.appender.ModuleAppender.flushCycle=10
# configure thresholds specific to package names
log4j.logger.de.guj.ocm=DEBUG,ModuleAppender
log4j.logger.de.espirit.firstspirit.server.scheduler=INFO,ModuleAppender
Die zugehörige Log-Datei wird zwar erzeugt erzeugt (daher gehe ich davon aus, dass die Appender-Klasse gefunden wurde), aber sie bleibt komplett leer.
In der fs-server.log tauchen Einträge wie dieser auf
INFO 16.03.2011 10:01:20.597 {pID=4563,uID=0,seID=465986} (de.guj.ocm.publish.scheduler.FinishPublishing): finished 0 queue entries with status 'deploying' and priority '2'
der unserer Meinung nach in die Log-Datei geschrieben werden sollte. Wo liegt der Konfigurations-Fehler?
[EDIT: gelöst]
Wir hätten einfach mal ein layout für den Appender setzen sollen. Mit diesen beiden zusätzlichen Zeilen klappt es wie geplant:
log4j.appender.ModuleAppender.layout = org.apache.log4j.PatternLayout
log4j.appender.ModuleAppender.layout.ConversionPattern=%p %t %c - %m%n
Über log4j, MDC-Kontext-Informationen (Modul-Name, Projekt-ID) und entsprechende Logger sollte das möglich sein.
Hallo Peter,
an welcher Stelle müsste eine log4j.xml übergeben werden? In den Classpath des Moduls?
Oder muss eine xml/properties-Datei im Server entsprechend angepasst werden? ... bitte ein paar mehr Details
Je nachdem um welche Arten von Modulen es sich handelt, gibt es z.B. für Services auch ein entsprechends Logverzeichnis, welches über das Environment zur Verfügung gestellt wird.
Danke für die Antworten, aber leider sind jetzt mehr Fragen als vorher:
... bitte ein paar mehr Details
Das trifft auf deine Anfrage aber auch zu .
Die Logging-Konfiguration erfolgt in "{fsroot}/conf/fs-logging.conf". Kann z.B. über die fs4webmon Anwendung konfiguriert werden oder auch direkt im Dateisystem des Servers. Werden Appender oder Filter benutzt, die nicht im Lieferumfang enthalten sind, müssen diese in das Klassenpfad des Servers aufgenommen werden (dazu muss der Server dann neugestartet werden).
Diese Lösung geht davon aus, das
Ich möchte den Namen der Log-Datei selbst bestimmen
Das ist über das angesprochene FileSystem des #logDir im Environment problemlos möglich. Die Hoheit über die Dateien/Namen und deren Verwaltung in dem Verzeichnis obliegt dem Benutzer (z.B. der Serviceimplementierung).
Danke erstmal für die prompte Beantwortung (hat auch 2 Pluspunkte auf dem Konto gegeben !)
Der FSAppender ist ja leider nicht dokumentiert... welche properties kann ich auf ihm setzen? Ist es beispielsweise möglich, hier auf eine projectId oder gar einen Projektnamen zuzugreifen?
Wir haben inzwischen einen weiteren Appender definiert und wie folgt in der fs-logging.conf konfiguriert:
# modules: ocm-modules
log4j.appender.ModuleAppender=org.apache.log4j.RollingFileAppender
#log4j.appender.ModuleAppender=de.espirit.firstspirit.server.logging.FSAppender
log4j.appender.ModuleAppender.File=log/modules/ocm-modules.log
log4j.appender.ModuleAppender.consoleLogging=false
log4j.appender.ModuleAppender.plainLogging=true
log4j.appender.ModuleAppender.datedLogging=true
log4j.appender.ModuleAppender.maxFileSize=2MB
log4j.appender.ModuleAppender.buffer=8192
log4j.appender.ModuleAppender.flushCycle=10
# configure thresholds specific to package names
log4j.logger.de.guj.ocm=DEBUG,ModuleAppender
log4j.logger.de.espirit.firstspirit.server.scheduler=INFO,ModuleAppender
Die zugehörige Log-Datei wird zwar erzeugt erzeugt (daher gehe ich davon aus, dass die Appender-Klasse gefunden wurde), aber sie bleibt komplett leer.
In der fs-server.log tauchen Einträge wie dieser auf
INFO 16.03.2011 10:01:20.597 {pID=4563,uID=0,seID=465986} (de.guj.ocm.publish.scheduler.FinishPublishing): finished 0 queue entries with status 'deploying' and priority '2'
der unserer Meinung nach in die Log-Datei geschrieben werden sollte. Wo liegt der Konfigurations-Fehler?
[EDIT: gelöst]
Wir hätten einfach mal ein layout für den Appender setzen sollen. Mit diesen beiden zusätzlichen Zeilen klappt es wie geplant:
log4j.appender.ModuleAppender.layout = org.apache.log4j.PatternLayout
log4j.appender.ModuleAppender.layout.ConversionPattern=%p %t %c - %m%n
Der FSAppender kann dafür nicht verwendet werden, der ist speziell für die Bedürfnisse von FirstSpirit zugeschnitten und für deinen Anwendungsfall nicht geeignet.
Ich kann hier nur auf Dr. Google verweisen. Suchworte sind
[EDIT]
Die Antwort von Stefan Kloe wurde mir eben noch nicht angezeigt - eine Paketabhängiges Logging (statt ein Filter, der auf MDC-Informationen arbeitet) ist natürlich möglich, macht aber eventuell nicht das, was ihr wollt. Wenn z.B. ihr z.B. Methoden aus anderen Paketen aufruft, unde diese selber wieder loggen, kommen mit deiner Lösung diese Meldungen nicht in das "Modul-Logfile". Wenn ihr das aber garnicht wollt, dann reicht deine Lösung natürlich.