[logback-user] Buffered Appender?

Eric Faden eric at techeminence.com
Mon Aug 18 04:35:08 CEST 2008


Ceki,

I think you are correct, doing it at the filter level seems awkward and 
more complex than it needs to be.  I think that the appender method is 
going to work out the best.  Thanks for the advice and the info.

-Eric

Ceki Gulcu wrote:
> Hello Eric,
>
> You could place the logic in a TurboFilter. TurboFilters are set at the 
> LoggerContext (i.e. global) level and they intervene before all other components 
> in the processing pipeline.
>
> If my memory serves me correctly, creating a LoggingEvent takes about 200 
> nanoseconds which is pretty fast. However, for a disabled logging event logback 
> can reach a decision (not to log) in about 10 nanoseconds.
>
> But since you wish to buffer the logging events, they must be created. You can't 
> buffer what does not exist. Moreover, TurboFilters are not supposed to buffer 
> events. They could, but it's not a use case we've considered nor currently support.
>
> The current architecture is linear at the beginning and branches out at the 
> level of appenders. In ASCII art, this looks like
>
>                                    /-->ap0-->F00-->F01->F0n
>                                   /-->ap1-->F10-->...
> TB0->TB1->...->TBm->LLFilter->--|-->ap2-->F20->...
>                                   \-->ap...
>                                    \-->apX->FX0->...
>
> What you are suggesting resembbles
>
>         /-->apJ-->...     /....
>        /-->apJ+1-->..    /
>       /-->apJ+...-->    /
>      /-->apJ+j-->      /
> TB0--------------->TB1-->....-->LLFilter-->....unchanged
>
> Where
> TB stands for TurboFilter
> LLFilter stands for Logger Level filter which is the main filter in logback
> ap stands for appender
>
> As I understand it, the advantage of "sectional logging," as we have been 
> discussing, is to be silent if things go well, unless an error occurs, in which 
> case we dump detailed logging information. Is this how you see things or am 
> entirely I missing the point?
>
> Doing sectional logging at the appender level would be the simplest way to 
> proceed. You could do it at other points in the processing pipeline but you'd 
> need to code a lot more on your own and frankly I don't see what you would gain. 
> However, I might be wrong.
>
> Eric Faden wrote:
>   
>> Cool thanks.  I got the idea then.  Is there any way to do something 
>> like that in the filter level or before it got to the appender?  Also 
>> how inefficient would it be to create the LoggingEvent?  My idea would 
>> be to only put this appender on certain classes if for instance there is 
>> an exception we are trying to track down.  It seems that based on the 
>> code creating the LoggingEvent isn't very expensive since the string 
>> isn't built until it is actually appended.  So setting the Debug level 
>> higher and having the Appender handle it wouldn't incur that much of a 
>> performance penalty.  Right?
>>
>> -Eric
>>     
>
>   



More information about the Logback-user mailing list