[slf4j-user] amending messages

Joachim Durchholz jo at durchholz.org
Tue Feb 24 11:45:53 CET 2015


Am 23.02.2015 um 20:20 schrieb Vitaliy Semochkin:
> Now i'm trying to solve a  problem of amending the messages
> that were sent to slf4j directly (e.g. by Hibernate). I want to place
> a proper indent into the beginning of a message.
> How can I do it?

Building a ch.qos.logback.core.Appender should do the trick.
You may want to make an Appender that inserts the indent into the 
messages an delegates to another Appender, so that applications can 
still configure for arbitrary receivers.

How to tell the Appender how far to indent is the intereting part. SLF4J 
is a very narrow interface (by design), but you could use a Marker or 
the MDC (I never understood the specific criteria when to prefer a 
Marker over the MDC, somebody might want to clarify that).

I see two approaches: signal just indent and dedent, or send the 
absolute indent level and let the Appender sort things out.

Signalling just indent and dedent will automatically skip indentations 
for message levels that never get sent. I.e. the output won't suddenly 
indent by five levels just because the code happens to emit messages 
five levels deep, of which four higher levels of messages don't get 
printed anyway.
The downside is that some weird filter misconfiguration might swallow an 
indent-carrying log message and let the dedent-carrying one through, or 
vice versa.

Sending absolute indent levels means that you need to keep track of the 
indent level in the code above SLF4J.
I didn't want to do that so I wouldn't have to incur the overhead of my 
own Logger delegating to an SLF4J Logger, but I found I'd have to do 
that delegation for other reasons - maybe that's something you tend to 
end up doing anyway. YMMV.

HTH
Jo


More information about the slf4j-user mailing list