2012-08-30 8 views
5

Soy muy nuevo en log4j. No quiero mostrar seguimiento de la pila de excepción en mi archivo de registro comoConvierta e.printStackTrace() para usar log4j en su lugar

java.lang.IllegalArgumentException: nodeRef is a mandatory parameter 
at org.alfresco.util.ParameterCheck.mandatory(ParameterCheck.java:42) 

Estas excepciones se escriben directamente a la consola mediante el uso de e.printStackTrace() así

try { 
    // something 
} catch(Exception e) { 
    StringWriter stack = new StringWriter(); 
    e.printStackTrace(new PrintWriter(stack)); 
    logger.debug("Caught exception; decorating with appropriate status template : " + stack.toString()); 
} 

Ahora estoy personalizar un Open Source proyecto, no escribiendo todos mis programas por mi cuenta. Por lo tanto, es imposible eliminar e.printStackTrace(); en todos los archivos java.

Por lo que sé, el registro que se imprimen por log4j con el registrador se puede configurar mediante el uso de nivel de error log4j como información, depuración, advertencia.Pero, ¿qué hay de escribir directamente a la consola o archivo?

¿Cómo puedo configurar log4j para que no se imprima solo la pila de pila de excepción pero mostrar otra información? ¿Hay alguna manera de resolverlo?

+1

Primero necesita ** utilizar ** log4j. La declaración catch que muestra a) no usa log4j; b) ni siquiera imprime nada en ninguna parte. Simplemente llena un StringWriter con stacktrace. –

+0

Cambié mi código. Mi ejemplo utiliza e.printStackTrace() y logger.debug(). No está escrito por mí. Mi proyecto usa ese archivo jar cuya fuente adjunta se muestra así. – swemon

+1

Lo que haría es crear un PrintStream para reemplazar System.err que escribe todo lo que log4 log. De esta forma, puede usar System.out o System.err de la forma que quiera y realmente usa log4j. ;) –

Respuesta

8

El código

StringWriter stack = new StringWriter(); 
e.printStackTrace(new PrintWriter(stack)); 
logger.debug("Caught exception; decorating with appropriate status template : " + stack.toString()); 

es sólo un ejemplo de mal uso normal de la API Log4j. Pero, si está atascado con eso, no habrá nada que hacer excepto elevar el nivel de registro por encima de debug y omitir todo el mensaje.

Puede posiblemente ser una manera de truncado todos los mensajes de registro, lo que tanto aliviar su problema.

+0

Sí. Porque ya usamos logger.debug(). Creo que no necesitamos usar e.printStackTrace (nuevo PrintWriter (stack)); Pero la fuente ya se usa así. – swemon

+1

No creo que excaves ese código. Nada es redundante aquí; 'printStackTrace' en su ejemplo en realidad ** no imprime ** nada. El programador solo quería un stacktrace anexado a un mensaje de registro 'debug', donde Log4J no es compatible con' log.debug (msg, exc) '--- y por una buena razón. –

4

Uso Logger # error

import org.apache.log4j.Logger; 

... 

Logger log = Logger.getLogger(Locomotive.class); 
log.error("your message", exc); 

... 
0
logger.info("Inside add() of Abc class"); 
logger.error("Error occurred while calculation::::"+errorMessage); 
Cuestiones relacionadas