2012-07-03 56 views
12

Estoy utilizando Tomcat 7.0.28, ejecutando bajo OpenJDK 1.7 en Ubuntu, y estoy tratando de modificar la cadena de formato utilizada por java.util.logging.SimpleFormatter. De acuerdo con Javadocs para esa clase, puedo especificar la propiedad java.util.logging.SimpleFormatter.format para cambiar el formato. Y de hecho, cuando ejecuto mi aplicación web en Eclipse y cambio esta propiedad en mi archivo logging.properties, funciona.Modificación de la propiedad de formato java.util.logging.SimpleFormatter bajo Tomcat

Sin embargo, cuando despliego la aplicación a Tomcat, esta propiedad no parece tener ningún efecto. Estoy seguro de que mi archivo de propiedades está siendo leído correctamente, como otros cambios que hago a ella de hecho en vigor (estoy leyendo las propiedades de un archivo en el uso de

LogManager.getLogManager().readConfiguration(new FileInputStream(file)) 

donde archivo se configura a través de un parámetro en mi archivo web.xml. He intentado poner el archivo en WEB-INF/classes/logging.properties, sin ningún cambio en el comportamiento.

Los Javadocs para SimpleFormatter especifican que si tanto un archivo de propiedades como una propiedad del sistema especifique la cadena de formato, la propiedad del sistema tiene prioridad. He verificado que la propiedad del sistema no está establecida

context.log ("Formatting system property is " + System.getProperty("java.util.logging.SimpleFormatter.format")); 

en un método ServletContextListener.contextInitialized.

Aquí está mi archivo de propiedades de registro en su totalidad

handlers=java.util.logging.ConsoleHandler 

# Default logging level for root logger 
.level=FINE 

# Set the level for the ConsoleHandler 
java.util.logging.ConsoleHandler.level=FINE 
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter 
java.util.logging.SimpleFormatter.format=[%1$tF %1$tr] %3$s %4$s: %5$s %n 

He intentado todo lo que ocurre, incluyendo la modificación de logging.properties tanto en el tomcat/conf y JRE_HOME directorio/lib. Nada parece hacer ninguna diferencia.

+2

Frente a un mismo problema. Aquí hay una suposición: la característica de la propiedad 'java.util.logging.SimpleFormatter.format' se introdujo en Java 7. Sé que Tomcat básicamente usa una versión ligeramente modificada de' java.util.logging'. Me pregunto si esa es la razón. – peterh

+0

Sí nolan6000, tuve el mismo problema y estaba relacionado con la versión de JDK que estaba usando. Gracias. –

Respuesta

2

No sé si esto resolverá su problema, pero puede valer la pena intentarlo. Estaba viendo el mismo comportamiento, aunque en mi caso estaba haciendo la configuración de inicio de sesión programáticamente en lugar de usar propiedades. Resulta que el valor de la propiedad para java.util.logging.SimpleFormatter.format debe establecerse ANTES de construir el (en mi caso) FileHandler. Lo configuré después de construir FileHandler, pero antes de construir SimpleFormatter. Me pregunto si, en su archivo de propiedades, la definición de java.util.logging.SimpleFormatter.format ANTES de definir cualquiera de las propiedades del controlador resolverá el problema.

7

java.util.logging.SimpleFormatter.format está documentado que se puede configurar en logging.properties -que tampoco me funciona- o como un argumento de línea de comandos (opción java).

El argumento de la línea de comando parece funcionar para mí. Debido a que la variable $ JAVA_OPTS está pasando por tanta manipulación y termina en eval, esto es cómo lo resolví (en Debian, Java 1.7.0_07, apache-tomcat-7.0.30)

$ CATALINA_HOME/bin/catalina.sh (línea 230):

JAVA_OPTS="$JAVA_OPTS \"-Djava.util.logging.SimpleFormatter.format=%1\\\$tY-%1\\\$tm-%1\\\$td %1\\\$tH:%1\\\$tM:%1\\\$tS.%1\\\$tL %4\\\$s %3\\\$s %5\\\$s%6\\\$s%n\"" 
7

Usted puede ser testigo de this bug.

El error se corrigió desde Tomcat versión 7.0.41 en adelante y 6.0.38 en adelante.

8

Gracias a la información en the bug report señalada por nolan6000 Finalmente conseguí esto trabajando con tomcat-juli.

En lugar de:

java.util.logging.SimpleFormatter.format=%4$s: %5$s [%1$tc]%n 

tiene que ser:

1catalina.java.util.logging.SimpleFormatter.format=%4$s: %5$s [%1$tc]%n 
2

El uso de un patrón del formateador en defecto de Tomcat 8 JULI registrador necesita esto, puedes poner argumentos a una aplicación web mundial $tomcat/conf/logging.properties o específica $tomcat/webapps/myapp/WEB-INF/classes/logging.properties archivo.

Este es mi archivo global donde también he inhabilitado los archivos de registro manager-webapp. líneas de los informes es:
2015-09-23 17:32:11 INFO org.apache.catalina.startup.Catalina Server startup in 1028 ms

#handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler 
handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler 

.handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler 

# formatter attributes = date, source, logger, level, message, thrown 
java.util.logging.SimpleFormatter.format = %1$tF %1$tT %4$s %3$s %5$s%6$s%n 

1catalina.org.apache.juli.AsyncFileHandler.level = FINE 
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina. 
1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8 
1catalina.org.apache.juli.AsyncFileHandler.formatter = java.util.logging.SimpleFormatter 
#1catalina.org.apache.juli.AsyncFileHandler.bufferSize = 2048 

2localhost.org.apache.juli.AsyncFileHandler.level = FINE 
2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost. 
2localhost.org.apache.juli.AsyncFileHandler.encoding = UTF-8 
2localhost.org.apache.juli.AsyncFileHandler.formatter = java.util.logging.SimpleFormatter 
#2localhost.org.apache.juli.AsyncFileHandler.bufferSize = 2048 

#3manager.org.apache.juli.AsyncFileHandler.level = FINE 
#3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 
#3manager.org.apache.juli.AsyncFileHandler.prefix = manager. 

#4host-manager.org.apache.juli.AsyncFileHandler.level = FINE 
#4host-manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 
#4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager. 

java.util.logging.ConsoleHandler.level = FINE 
#java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter 
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter 


############################################################ 
# Facility specific properties. 
# Provides extra control for each logger. 
############################################################ 

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

#org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO 
#org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.AsyncFileHandler 

#org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO 
#org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.AsyncFileHandler 

# For example, set the org.apache.catalina.util.LifecycleBase logger to log 
# each component that extends LifecycleBase changing state: 
#org.apache.catalina.util.LifecycleBase.level = FINE 

# To see debug messages in TldLocationsCache, uncomment the following lines 
#org.apache.jasper.compiler.TldLocationsCache.level = FINE 
#org.apache.jasper.servlet.TldScanner.level=FINE 
+0

parece funcionar para mí en el archivo global, pero cuando especifico el formato en el archivo específico de la aplicación web, parece que no funciona – gaurav5430

+0

Gracias @Whome! Funciona para mí, pero solo con java.util.logging.SimpleFormatter. Con org.apache.juli.OneLineFormatter no :( – Gaucho

Cuestiones relacionadas