[logback-dev] What is the most efficient way - preferrably platform agnostic - to submit events from "the outside"?

Joern Huxhorn jhuxhorn at googlemail.com
Sat Feb 28 15:35:18 CET 2009

Hi Thorbjoern.

On 28.02.2009, at 10:50, Thorbjoern Ravn Andersen wrote:

> Joern Huxhorn skrev:
>> I tried to provide some explanations and background informations  
>> about the way my multiplex appender is working.
> Could you say why you've named it multiplex appender?  I've missed  
> it if you said it already?  Perhaps because it can send to multiple  
> receivers?

Oh yes, that's the reason. Funny that I failed to mention it ... :)

>> http://apps.sourceforge.net/trac/lilith/wiki/MultiplexAppenderBackground
>> Additionally, I collected some pitfalls of other appenders.
>> http://apps.sourceforge.net/trac/lilith/wiki/AppenderPitfalls
>> I'm not sure if I succeeded in explaining the complexity of my  
>> appender but I tried my best, for sure ;)
> If I understand your writeup correctly there are three basic issues  
> you are dealing with:
> * detecting if a receiver goes away

It's only a problem if a receiver leaves in a dirty way, e.g.  
unplugging the network cable or putting the computer to sleep, instead  
of closing the stream/app first. If the stream is properly closed, the  
appender receives an IOException when it's trying to use the stream  
the next time. Otherwise, the appender will hang while writing.

> * flattening events at the proper time to ensure that the contents  
> is right when deserialized
> * buffering events to ensure the application can run at full speed  
> independently from the speed of the receivers

Yes, exactly.
We are routinely logging certain classes to > 10 receivers - while in  

> The first one, should it be enough to detect a broken TCP/IP  
> connection?

I've found no other way beside the TimeoutOutputStream that I'm using  
now. Any other idea?

> I am still pondering on a language agnostic receiver.   The reason  
> for the XML being uninteresting was because it was much more verbose  
> than the plain serialised byte object?

I wouldn't call it uninteresting ;)
It's just more expensive to create such events so I'd only use it if I  
have to.
The main objectives of my XML schema are:
- lossless conversion
   It must be possible to create the exact same event from the XML  
that was used to create it in the first place. This isn't the case wit  
the log4j XML because it flattens the NDC. Beside that, if used in  
conjunction with Logback, it destroys the messagePattern and arguments  
of the original event. I plan to use those for translation of log  
- readable by a human being
   otherwise there's no real point to use XML. I could just define a  
binary format, right?

>  Would a sufficiently terse xml-dialect be interesting?  I was  
> thinking of having one-character node names and attribute names?  
> (and moving the namespace outside the fragments).

I'm not sure about that. Thinking about a binary format would probably  
be more worthwhile...


More information about the logback-dev mailing list