2011-10-12 11 views
16

Esiste un modo per registrare tutti gli output di stdout nel file catalina.log in Tomcat? (Vale a dire tutto ciò che viene stampato a System.out.println())Come registrare l'output stdout in Tomcat?

La finestra della console che si apre quando si esegue TOMCAT/bin/startup.bat display output da stdout, ma non è salvato TOMCAT/logs/catalina.<date>.log.

Il mio problema specifico è che ho un app di console definito in log4j per l'output sulla console. Questi messaggi di log vengono visualizzati correttamente nella finestra della console Tomcat, ma non vengono scritti in catalina.log. Sto utilizzando Tomcat 5.5 su Windows. Grazie.

EDIT:

Ecco il mio file log4j.properties. Si trova a TOMCAT/webapps/app/WEB-INF/classes/log4j.properties:

log4j.rootCategory=DEBUG, console 
log4j.appender.console=org.apache.log4j.ConsoleAppender 
log4j.appender.console.layout=org.apache.log4j.PatternLayout 
log4j.appender.console.layout.ConversionPattern=[%d{ABSOLUTE} %-5p %c{1}]: %m%n 
+0

Does Tomcat accedere a catalina.log, quando lo si avvia come servizio di Windows invece di utilizzare l'avvio pipistrello? – Gandalf

+0

@ Gandalf Non lo so. Non voglio eseguirlo come servizio. – Michael

+0

Dove hai configurato log4j con appender della console? Per applicazione web o su tomcat stesso? – Gandalf

risposta

1

Forse hai controllato, se il file log4j.properties può essere trovato dalla vostra applicazione? Forse si può controllare, impostando un percorso di file hardcoded come

-Dlog4j.configuration = file: /// C: \ dev \ log4j.properties

Se i registri sono scritti dopo che queste cambiare, il percorso relativ al file log4j è sbagliato.

+0

È nella radice del mio classpath. Quindi si trova in: 'TOMCAT/webapps/app/WEB-INF/classes/log4j.properties'. – Michael

0

Se guardo la configurazione di registrazione predefinito di Tomcat 5.5 in logging.properties:

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO 
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.FileHandler 

Che guarda a me come se stdout di applicazioni web potrebbe aver effettuato il login al file solo per il livello INFO e, soprattutto, regading che http://tomcat.apache.org/tomcat-5.5-doc/logging.html afferma che in tomcat i logger di registrazione JULI non usano i gestori genitore quando vengono assegnati i propri gestori. Anche il file deve avere il prefisso localhost e non catalina. Ma non capisco come l'output arrivi alla finestra di output:/

+0

Grazie. Ho provato a cambiare tutti questi livelli da "INFO" a "DEBUG", ma nessuno degli output di stdout appare in nessuno dei file di registro (catalina, localhost, manager o gestore host). Dovrò leggere quel link in modo più dettagliato. – Michael

10

Mi sono imbattuto in domande simili prima e non ho trovato un modo per farlo registrando System.out in Windows unless you are running Tomcat as a Windows service. Questo sembra funzionare per impostazione predefinita in Unix dal startup.sh punti per catalina.sh che registra stdout al file catalina.out come qui di seguito

org.apache.catalina.startup.Bootstrap "[email protected]" start >> "$CATALINA_BASE"/logs/catalina.out 2>&1 & 

In log4j, ConsoleAppender di per sé non aggiunge ad un file, solo per System.out

Tuttavia , Ho modificato le proprietà di log4j per aggiungere un FileAppender e questa configurazione funziona, ma naturalmente questo accede a un file di registro separato.

Nuova config

# Set root logger level to DEBUG. 
log4j.rootLogger=DEBUG, console, myFile 

log4j.appender.console=org.apache.log4j.ConsoleAppender 
log4j.appender.console.layout=org.apache.log4j.PatternLayout 
log4j.appender.console.layout.ConversionPattern=[%d{ABSOLUTE} %-5p %c{1}]: %m%n 




# myFile writes to file 
log4j.appender.myFile=org.apache.log4j.RollingFileAppender 
log4j.appender.myFile.File=logs/tomcatlog4j.log 
log4j.appender.myFile.MaxFileSize=100KB 
log4j.appender.myFile.layout=org.apache.log4j.PatternLayout 
log4j.appender.myFile.layout.ConversionPattern==[%d{ABSOLUTE} %-5p %c{1}]: %m%n 

uscita

= [15: 24: 03.819 INFO A1]: In my.jsp = [15: 24: 03.975 INFO A1]: Fuori dalla mia .jsp = [15: 24: 04,880 INFO A1]: In my.jsp = [15: 24: 04,880 INFO A1]: Fuori dal mio.jsp

anche vedere

How to log exceptions from a specific package deployed in tomcat

log select events into a separate file

https://serverfault.com/questions/201178/tomcat-5-5-how-to-redirect-the-logging-output-to-one-file-per-web-application

+0

Quindi stai dicendo su Linux, una ConsoleAppender scriverebbe su catalina.out, ma su Windows non funziona a meno che Tomcat non venga eseguito come servizio? – Michael

+0

@ Michael: Posso confermare che ConsoleAppender ** fa ** scrivere su catalina.out su Linux. Ho provato questo. – JoseK

+0

Ok, grazie, volevo solo assicurarmi di aver capito cosa dicevi. Quindi sembra che la risposta alla mia domanda sia: "No, ConsoleAppender scriverà solo su catalina.log su Windows se Tomcat viene eseguito come servizio" – Michael