2010-03-09 16 views
10

que tienen la siguiente configuración para mi DSL log4j en Grails 1.2:¿Por qué Grails (en Tomcat) está registrando tanto catalina.out como mi apéndice de archivo personalizado?

log4j = { 
    appenders { 
     console name: 'stdout', layout: pattern(conversionPattern: conversionPattern) 

     environments { 
      production { 
       // ... some code to determine file path ... 

       rollingFile name: 'file', file: "${logDirectory}/${appName}.log", layout: pattern(conversionPattern: conversionPattern) 
       rollingFile name: 'StackTrace', file: "${logDirectory}/${appName}-stacktrace.log" 
     } 
    } 

    environments { 
     development { root { warn 'stdout' } } 
     test { root { warn 'stdout' } } 
     production { root { error 'file' } } 
    } 

    // ... package-specific logging configurations ... 
} 

Cuando despliego como una guerra de Tomcat, en los registros se escriben en tanto catalina.out y mi registrador de 'archivo' definido para la producción.

He intentado:

  • additivity = false añadir a la definición de root {}production {}, que no funciona (y no me realmente esperar que, ya que al parecer es el establecimiento de aditividad para el propio registrador de la raíz ?).
  • que define el appender de consola 'stdout' dentro de un development {} y test {} bloque dentro del cierre appenders {}, pero eso tampoco funciona.

Quizás esto es un problema con mi configuración de Tomcat y no mi log4j DSL? Lo más cerca que he estado de encontrar a alguien con un problema similar es this mailing-list thread, para el cual no había una solución (simple).

¿Cómo puedo evitar que los registros se escriban en catalina.out en producción?

Respuesta

3

que fue capaz de evitar el problema de la siguiente manera en Config.groovy:

import org.apache.log4j.Logger 

log4j = { 
    // ... configuration from question ... 
} 

environments { 
    production { 
     def logger = Logger.getRootLogger() 
     logger.removeAppender('stdout') 
    } 
} 

Sin embargo, esto se siente como un truco sucio, y espero que hay una mejor, griales log4j-DSL específica forma de hacer esto.

Además, cualquier cosa que la aplicación pueda escribir en stdout probablemente no se escriba, lo que podría ser algo malo si hay registros/excepciones/stacktraces escritos de alguna manera directamente en stdout.

Cuestiones relacionadas