2011-10-12 31 views
16

¿Hay alguna manera de registrar todos los resultados de stdout en el archivo catalina.log en Tomcat? (Es decir, todo lo que se imprime a System.out.println())¿Cómo registrar la salida stdout en Tomcat?

La ventana de la consola que se abre cuando se ejecuta TOMCAT/bin/startup.bat pantallas de salida de la salida estándar, pero no se guarda en TOMCAT/logs/catalina.<date>.log.

Mi problema específico es que tengo un appender de consola definido en log4j para enviar a la consola. Estos mensajes de registro aparecen correctamente en la ventana de la consola de Tomcat, pero no están escritos en catalina.log. Estoy ejecutando Tomcat 5.5 en Windows. Gracias.

EDIT:

Aquí está mi archivo log4j.properties. Se encuentra en 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

¿El gato conectarse a catalina.log, cuando se inicia como un servicio de Windows en lugar de usar el bate de inicio? – Gandalf

+0

@Gandalf No lo sé. No quiero ejecutarlo como un servicio. – Michael

+0

¿Dónde tiene log4j configurado con el appender de la consola? Por aplicación web o en tomcat sí mismo? – Gandalf

Respuesta

1

Did usted marcó, si el archivo log4j.properties se puede encontrar desde la aplicación? Tal vez usted puede comprobar, mediante el establecimiento de una ruta de archivo codificado como

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

Si los registros se escriben después de que éstos cambio, la ruta relativ al archivo log4j es incorrecta.

+0

Está en la raíz de mi classpath. Por lo tanto, está ubicado en: 'TOMCAT/webapps/app/WEB-INF/classes/log4j.properties'. – Michael

0

Si miro a la configuración de registro predeterminado de Tomcat 5.5 en logging.properties:

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

Eso me parece como si la salida estándar de aplicaciones web puede ser conectado a los archivos sólo para el nivel INFO y por encima, regading que http://tomcat.apache.org/tomcat-5.5-doc/logging.html indica que en tomcat los registradores de configuración de registro JULI no usan los controladores padre cuando se les asignan sus propios manejadores. Además, el archivo debe tener el prefijo localhost y no catalina. Pero entonces no entiendo cómo llega la salida a su ventana de salida:/

+0

Gracias. Traté de cambiar todos esos niveles de "INFO" a "DEPURAR", pero ninguno de los resultados de stdout aparece en ninguno de los archivos de registro (catalina, localhost, manager o host-manager). Tendré que leer ese enlace con más detalle. – Michael

10

He encontrado preguntas similares antes, y no he encontrado la manera de hacerlo registrando System.out en Windows unless you are running Tomcat as a Windows service. Esto parece funcionar de manera predeterminada en Unix desde startup.sh puntos a catalina.sh que registra la salida estándar al archivo catalina.out, como a continuación

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

En log4j, ConsoleAppender por sí misma no añade a un archivo, sólo para System.out

Sin embargo , Modifiqué tus propiedades de log4j para agregar un FileAppender y esta configuración funciona, pero por supuesto esto se registra en un archivo de registro separado.

Nueva 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 

salida

= [15: 24: 03 819 A1 INFO]: En my.jsp = [15: 24: 03 975 A1 INFO]: Fuera de mi .jsp = [15: 24: 04,880 INFO A1]: en my.jsp = [15: 24: 04,880 INFO A1]: fuera de mi.JSP

también ver

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

Entonces, ¿está diciendo que en Linux, ConsoleAppender escribiría en catalina.out, pero en Windows no funciona a menos que se ejecute Tomcat como un servicio? – Michael

+0

@Michael: Puedo confirmar que ConsoleAppender ** no ** escribe en 'catalina.out' en Linux. He probado esto – JoseK

+0

Ok, gracias, solo quería asegurarme de haber entendido lo que decías. Parece que la respuesta a mi pregunta es: "No, ConsoleAppender solo escribirá en catalina.log en Windows si Tomcat se ejecuta como un servicio" – Michael

Cuestiones relacionadas