Mittwoch, Januar 22, 2020

Wie nutzt man Log4j schreiben/erfassen von stdout und stderr in eine Datei und mit Windows und Tomcat 5.5 (Java)?

Ich bin mit Windows 2008 R2 und Apache Tomcat 5.5, für Ihre Informationen.

STDOUT und STDERR automatisch protokolliert über Apache-Tomcat-Eigenschaften über die Registerkarte „Protokollierung“ – > Redirect Umleiten von Stdout und Stderror Textfelder.

Aber ich will Steuern dies über log4j.

Ich versuche zu nutzen ConsoleAppender und die TimeAndSizeRollingAppender Klasse rollover, was normalerweise gesteuert werden, die von Apache Tomcat angeborene Protokollierung.

Grundsätzlich, jedoch Tomcat-Umleitungen von stdout und stderr in eine Datei, ich möchte das gleiche zu tun, mit log4j und die log4j.Eigenschaften Datei.

Ich habe einige Graben auf dieser Website und andere, wie dieses hier ( umleiten von stdout log4j zu DailyRollingFileAppender) und diese ( http://sysgears.com/articles/how-to-redirect-stdout-and-stderr-writing-to-a-log4j-appender#comment-749), aber habe ich ein paar grundlegende Fragen:

  1. Wie kann ich kompilieren einer dieser Klassen? Was sollte der classpath? Ich habe versucht, kompilieren Sie die Klasse von der sysgears link, aber es zurückgegeben, 7 Fehler, wie z.B. nicht in der Lage zu finden, symbol der Klasse Logger und symbol-Klasse Ausgabestrom.

  2. Nach dem kompilieren, speziell aus dem sysgears link, wie kann ich mit der Klasse? Es besagt, um die Klasse zu verwenden, schreiben Sie einfach:

    System.setErr(new PrintStream(new LoggingOutputStream(
    System.err, Logger.getLogger(„outLog“), Ebene.FEHLER)));

Toll, aber wo Schreibe ich das? In einer separaten Datei? Tomcat Eigenschaften?

Ich würde jede Hilfe zu schätzen wissen.

Danken Ihnen sehr für Ihre Zeit.

Update:

Hier ist mein voller log4j.Eigenschaften Datei:

log4j.rootLogger=INFO, CATALINA, LOCALHOST, MANAGER, HOST-MANAGER, ADMIN, CONSOLE

# Define all the appenders
log4j.appender.CATALINA=org.apache.log4j.appender.TimeAndSizeRollingAppender
log4j.appender.CATALINA.file=D:/Program Files (x86)/Apache Software Foundation/Tomcat-      5.5.28/logs/catalina.log
log4j.appender.CATALINA.Threshold=DEBUG
log4j.appender.CATALINA.DatePattern='.'yyyy-MM-dd-HH-mm
log4j.appender.CATALINA.layout=org.apache.log4j.PatternLayout
log4j.appender.CATALINA.MaxFileSize=20KB
log4j.appender.CATALINA.DateRollEnforced=true
log4j.appender.CATALINA.MaxRollFileCount=100
log4j.appender.CATALINA.ScavengeInterval=-1
log4j.appender.CATALINA.BufferedIO=false
log4j.appender.CATALINA.CompressionAlgorithm=ZIP
log4j.appender.CATALINA.layout.conversionPattern = %-5p %-23d{ISO8601} [%t] %x: %c{1} - %m%n

log4j.appender.LOCALHOST=org.apache.log4j.appender.TimeAndSizeRollingAppender
log4j.appender.LOCALHOST.file=D:/Program Files (x86)/Apache Software Foundation/Tomcat-5.5.28/logs/localhost.log
log4j.appender.LOCALHOST.Threshold=DEBUG
log4j.appender.LOCALHOST.DatePattern='.'yyyy-MM-dd-HH-mm
log4j.appender.LOCALHOST.layout=org.apache.log4j.PatternLayout
log4j.appender.LOCALHOST.MaxFileSize=20KB
log4j.appender.LOCALHOST.DateRollEnforced=true
log4j.appender.LOCALHOST.MaxRollFileCount=100
log4j.appender.LOCALHOST.ScavengeInterval=-1
log4j.appender.LOCALHOST.BufferedIO=false
log4j.appender.LOCALHOST.CompressionAlgorithm=ZIP
log4j.appender.LOCALHOST.layout.conversionPattern = %-5p %-23d{ISO8601} [%t] %x: %c{1} - %m%n

log4j.appender.MANAGER=org.apache.log4j.appender.TimeAndSizeRollingAppender
log4j.appender.MANAGER.file=D:/Program Files (x86)/Apache Software Foundation/Tomcat-5.5.28/logs/manager.log
log4j.appender.MANAGER.Threshold=DEBUG
log4j.appender.MANAGER.DatePattern='.'yyyy-MM-dd-HH-mm
log4j.appender.MANAGER.layout=org.apache.log4j.PatternLayout
log4j.appender.MANAGER.MaxFileSize=20KB
log4j.appender.MANAGER.DateRollEnforced=true
log4j.appender.MANAGER.MaxRollFileCount=100
log4j.appender.MANAGER.ScavengeInterval=-1
log4j.appender.MANAGER.BufferedIO=false
log4j.appender.MANAGER.CompressionAlgorithm=ZIP
log4j.appender.MANAGER.layout.conversionPattern = %-5p %-23d{ISO8601} [%t] %x: %c{1} - %m%n

log4j.appender.HOST-MANAGER=org.apache.log4j.appender.TimeAndSizeRollingAppender
log4j.appender.HOST-MANAGER.file=D:/Program Files (x86)/Apache Software Foundation/Tomcat-5.5.28/logs/host-manager.log
log4j.appender.HOST-MANAGER.Threshold=DEBUG
log4j.appender.HOST-MANAGER.DatePattern='.'yyyy-MM-dd-HH-mm
log4j.appender.HOST-MANAGER.layout=org.apache.log4j.PatternLayout
log4j.appender.HOST-MANAGER.MaxFileSize=20KB
log4j.appender.HOST-MANAGER.DateRollEnforced=true
log4j.appender.HOST-MANAGER.MaxRollFileCount=100
log4j.appender.HOST-MANAGER.ScavengeInterval=-1
log4j.appender.HOST-MANAGER.BufferedIO=false
log4j.appender.HOST-MANAGER.CompressionAlgorithm=ZIP
log4j.appender.HOST-MANAGER.layout.conversionPattern = %-5p %-23d{ISO8601} [%t] %x: %c{1} - %m%n

log4j.appender.ADMIN=org.apache.log4j.appender.TimeAndSizeRollingAppender
log4j.appender.ADMIN.file=D:/Program Files (x86)/Apache Software Foundation/Tomcat-5.5.28/logs/admin.log
log4j.appender.ADMIN.Threshold=DEBUG
log4j.appender.ADMIN.DatePattern='.'yyyy-MM-dd-HH-mm
log4j.appender.ADMIN.layout=org.apache.log4j.PatternLayout
log4j.appender.ADMIN.MaxFileSize=20KB
log4j.appender.ADMIN.DateRollEnforced=true
log4j.appender.ADMIN.MaxRollFileCount=100
log4j.appender.ADMIN.ScavengeInterval=-1
log4j.appender.ADMIN.BufferedIO=false
log4j.appender.ADMIN.CompressionAlgorithm=ZIP
log4j.appender.ADMIN.layout.conversionPattern = %-5p %-23d{ISO8601} [%t] %x: %c{1} - %m%n

# Configure which loggers log to which appenders
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=INFO, LOCALHOST
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager]=\
INFO, MANAGER
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager]=\
INFO, HOST-MANAGER
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/admin]=\
INFO, ADMIN
  • Nur um zu validieren, mein Verständnis von der Frage haben Sie bereits konfiguriert Log4J mit Tomcat, wie dies in der Dokumentation (tomcat.apache.org/tomcat-5.5-doc/logging.html). Es ist nur so, dass man nicht immer von STDOUT und STDERR in die logs, richtig?
  • Ja, das ist richtig. Ich habe meine volle log4j.Eigenschaften Datei in meinem ursprünglichen post. Ich möchte nur log von STDOUT und STDERR zu log-Dateien mittels log4j, jedoch getan werden kann. Danke.
InformationsquelleAutor user717236 | 2011-04-20

2 Kommentare

  1. 3

    1) Wie kann ich kompilieren einer dieser Klassen? Was sollte der classpath? Ich habe versucht, kompilieren Sie die Klasse von der sysgears link, aber es zurückgegeben, 7 Fehler, wie z.B. nicht in der Lage zu finden, symbol der Klasse Logger und symbol-Klasse Ausgabestrom.

    Müssen Sie die log4j-jar auf Ihrem classpath, und importieren Sie die richtigen Klassen am Anfang der Datei. So etwas wie,

    import java.io.PrintStream;
    import java.io.OutputStream;
    import org.apache.log4j.Logger;
    • Okay, danke. Ich Tat, wie Sie sagte, importiert diese Klassen am Anfang der Datei und spezifiziert den classpath direkt. Hier ist, was ich eingegeben (beachten Sie, dass die Kommandozeile ist relativ zu dem Ordner, für den Klassenpfad) –> „javac -cp log4j-1.2.16.jar LoggingOutputStream.java“ (ohne Anführungszeichen). Ich hatte 4 Fehler, von denen alle Punkt-zu-symbol nicht finden können, Klasse, Level und Klasse IOException. Meine volle import sieht wie folgt aus: import java.io.PrintStream; import java.io.Ausgabestrom; import java.io.IOException;import java.util.die Protokollierung.Level; import java.util.die Protokollierung.Logger;
    • Finden Sie alle die fehlenden Importe, und importieren Sie Sie. IOException java.io.IOException, Ebene org.apache.log4j.Ebene
    • Danke, ich fand die fehlenden Importe und es erfolgreich kompiliert wurde. Sie sind sehr gut, danke. Die einzige andere Leckerbissen, die ich bin verloren, wie um die Klasse zu verwenden (siehe meinen bearbeiteten original-Beitrag oben), in Verbindung mit der log4j.Eigenschaften-Datei. In der sysgears link, es nennt zu schreiben, ein paar Zeilen code zu verwenden, Ihre Klasse, aber es hat nicht den Zustand, wo es zu schreiben ist? Ich weiß nicht, ob Sie damit sagen willst Tomcat oder schreiben Sie einen eigenen .java-Datei und kompilieren Sie es, oder etwas anderes. Ich habe keine Ahnung. Jede Hilfe würde geschätzt werden, wie immer, danke.
    • Wenn Sie finden, sein Beitrag hilfreich, wenigstens die Höflichkeit zu bis Stimme, wie ich es getan habe.
    • Bis abstimmen? Ich verstehe es nicht. Ich bin derjenige, der die Frage gepostet, und ich fand alle Antworten hilfreich, danke dafür.
    • Wenn Sie eine Frage stellen, können Sie akzeptieren eine Antwort. Sie können auch upvote eine Antwort, wenn Sie einen ansehen > 15.

  2. 3

    können Sie erreichen dies mit einem appender:

    log4j.appender.stdout = org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Threshold = DEBUG
    log4j.appender.stdout.Target   = System.out
    log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern = %d{ISO8601} %-5p [%F:%L] : %m%n

    Dann verwenden Sie diese appender mit Ihrem logger, zum Beispiel:

    log4j.rootLogger = DEBUG, stdout

    Natürlich können Sie das Ziel über verschiedene, vielleicht mit System.err

    Hoffe, es hilft.

    Cheers,
    Christian

    • Hallo, danke für Eure Hilfe. Leider ist dies nicht die Lösung die ich Suche. Mit ConsoleAppender, wo es die Datei speichern? Ich möchte die rollover auf stdout und stderr zur Kontrolle Ihrer Größe und sicherungen. Ich bin immer fest auf dem sysgear Klasse, so wie Sie es in Verbindung mit log4j.Eigenschaften. Danke.

Kostenlose Online-Tests