Pierced
I'm new here

Server-Logging in bestimmte Dateien

Jump to solution

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

0 Kudos
1 Solution

Accepted Solutions

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

View solution in original post

0 Kudos
11 Replies
Peter_Jodeleit
Crownpeak employee

Über log4j, MDC-Kontext-Informationen (Modul-Name, Projekt-ID) und entsprechende Logger sollte das möglich sein.

Peter
0 Kudos

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 Smiley Happy

0 Kudos
gockel
Crownpeak employee

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.

0 Kudos

Danke für die Antworten, aber leider sind jetzt mehr Fragen als vorher:

  • Das Verzeichnis spielt eine untergeordnete Rolle (und wenn ich es setzen wollte: Dafür stellt ServerEnvironment keinen setter zur Verfügung)
  • Ich möchte den Namen der Log-Datei selbst bestimmen - da kam Peters Ansatz am nächsten - konkrete Frage siehe oben... danke
0 Kudos

... bitte ein paar mehr Details Smiley Happy

Das trifft auf deine Anfrage aber auch zu Smiley Wink.

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

  1. das Logging soll auf dem FirstSpirit-Server erfolgen.
  2. das du eine allgemeine Lösung unabhängig von dem von Sebastian Gockel beschriebenen Ansatz haben möchtest.
Peter
gockel
Crownpeak employee
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).

0 Kudos

Danke erstmal für die prompte Beantwortung (hat auch 2 Pluspunkte auf dem Konto gegeben Smiley Wink!)

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?

0 Kudos

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

0 Kudos

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

  • MDC - darüber muss euer Code die Informationen setzen, die für Filterung und Ausgabe benötigt werden, also Projekt- und Modulinformationen
  • Filter - Um die Ausgaben verschiedener Module (also z.B. abhängig von gesetzter MDC-Information) an verschiedene Appender zu delegieren

[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.

Peter