[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