2012-08-01 9 views
19

Ich habe eine answer über die Verwendung von SocketAppender (ich brauche es, Protokolle von verteilten System zu sammeln), aber ich bin neu in Log4j und ich habe keine Ahnung, wie dieser Beispielcode zu verwenden.log4j: Wie SocketAppender verwenden?

Wahrscheinlich soll ich log4j-server.properties wie folgt aus:

log4j.appender.SERVER=org.apache.log4j.net.SocketAppender 
log4j.appender.SA.Port=4712 
log4j.appender.SA.RemoteHost=loghost 
log4j.appender.SA.ReconnectionDelay=10000 

Aber ich weiß noch nicht, wie der Server zu starten (wie diese Linie verwenden)

org.apache.log4j.net.SimpleSocketServer 4712 log4j-server.properties

Und was ist das wichtigste: Wo \ Wie kann ich meine Protokolle sehen?

+0

Diese werden Befehlszeilenargumente genannt. – Woot4Moo

Antwort

41

Sie können den Server laufen mit

java -classpath log4j.jar org.apache.log4j.net.SimpleSocketServer 4712 log4j-server.properties 

Die SimpleSocketServer empfängt Ereignisse gesendet an die angegebene Portnummer durch die Fern SocketAppender, Protokollierung und protokolliert sie , als ob sie lokal generiert wurden, entsprechend der Konfiguration Sie Lieferung in log4j-server.properties. Es liegt an Ihnen, die entsprechenden Konsolen-/Datei-/Rolling-Datei-Appender zu konfigurieren und sie an die entsprechenden Protokollierer anzuhängen, genau wie Sie dies tun würden, wenn Sie die Protokollierung direkt im ursprünglichen Prozess durchführen und die Protokollereignisse nicht über einen Netzwerk-Socket leiten. I.e. wenn Sie zur Zeit lokale Log-Dateien mit so etwas wie zu erstellen:

log4j.rootLogger=DEBUG, file 
log4j.appender.file=org.apache.log4j.RollingFileAppender 
log4j.appender.file.File=logfile.log 
log4j.appender.file.MaxFileSize=1MB 
log4j.appender.file.MaxBackupIndex=1 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=[%d] [%t] [%m]%n 

dann würden Sie es ändern, so dass die Sendeseite log4j.properties einfach sagt

log4j.rootLogger=DEBUG, server 
log4j.appender.server=org.apache.log4j.net.SocketAppender 
log4j.appender.server.Port=4712 
log4j.appender.server.RemoteHost=loghost 
log4j.appender.server.ReconnectionDelay=10000 

und die serverseitige log4j-server.properties enthält die Definitionen, die zuvor auf der Sendeseite waren:

log4j.rootLogger=DEBUG, file 
log4j.appender.file=org.apache.log4j.RollingFileAppender 
log4j.appender.file.File=logfile.log 
log4j.appender.file.MaxFileSize=1MB 
log4j.appender.file.MaxBackupIndex=1 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=[%d] [%t] [%m]%n 

insbesondere beachten Sie, dass es keinen Sinn, ein Layout auf derAngabeauf der Sendeseite - was über das Netzwerk geht, ist das gesamte Protokollierungs-Ereignisobjekt, es ist die Empfangsseite, die für das Layout verantwortlich ist.

+0

Vielen Dank, es funktioniert :) aber ich habe noch eine Frage. Jetzt bekomme ich zusätzliche Protokolle wie '[2012-08-01 15: 20: 39,950] [main] [Verbunden mit dem Client unter /127.0.0.1] [2012-08-01 15: 20: 39,950] [main] [Start neuer Socket-Knoten.] [2012-08-01 15: 20: 39,950] [main] [Wartet darauf, einen neuen Client zu akzeptieren.] 'Was soll ich tun, um dies zu vermeiden? – alicjasalamon

+1

Diese sehen aus wie Nachrichten, die vom Socket-Server selbst generiert werden. Sie müssen Ihre Protokollierungskonfiguration ein wenig verfeinern. Abhängig von der Höhe dieser zusätzlichen Nachrichten kann es ausreichend sein, Ihren serverseitigen Root-Logger auf ERROR anstatt auf DEBUG zu setzen und dann 'log4j.logger.com.example = DEBUG' hinzuzufügen oder was auch immer für die Logger Ihrer sendenden Seite geeignet ist Einloggen auf. –

+0

Was ist mit einer Unterstützung für Log4J 2? – Donatello

0

Um den Server einfachen Typen unter Befehl in Eingabeaufforderung zu starten und Server und läuft sein:

java -classpath C: Users.m2repositorylog4jlog4j1.2.17log4j-1.2.17.jar org.apache. log4j.net.SimpleSocketServer 4712 log4j-server.properties

Bitte vergessen Sie nicht den richtigen Pfad von log4j.jar in Ihrem System zu spezifizieren.