Cuando hace algo como LOG.debug("Exported {}.", product)
en slf4j eventualmente llamará aString() en los argumentos, p. Ej. product
.slf4j sin toString()
Por ciertas razones, no puedo anular toString() en todas las clases que quiero usar como argumentos. Algunas clases provienen de jar de terceros, otras tendrán su llamada a toString() en otros contextos, también, donde la información que deseo imprimir en mi declaración de registro no está disponible.
Sin embargo, tengo una clase para depuración que tiene un método DebugFormatter.format(Object)
que tiene una larga cascada de ejemplos que selecciona la rutina para encontrar información de depuración útil sobre ese objeto.
Mi pregunta es: ¿es posible configurar slf4j para que llame a un método estático en lugar de toString()?
Por supuesto, podría llamar a mi método de formato en el objeto antes de pasarlo como un parámetro al Logger.debug()
, pero luego se ejecutará incluso cuando el registrador respectivo no esté habilitado. Así que tuve que rodearlo con if (LOG.isDebugEnabled())
, lo que significa que se perdió todo el punto de tener argumentos en debug().
No ha mencionado el marco de registro subyacente. ¿Es log4j? ¿volver a iniciar sesión? – Ceki
Es log4j. Estoy planeando cambiar a logback, sin embargo. – Wolfgang
He aceptado la respuesta de Andrew como respuesta oficial porque es más fácil de implementar que la de Ceki. También es independiente del marco subyacente. Además, permite hacer que el formateo sea opcional, o incluso elegir entre diferentes formateadores. Sin embargo, para otros usuarios, la respuesta de Ceki podría ser mejor porque es más transparente y ahorra recursos. – Wolfgang