[logback-user] Logging encoded google protocol buffers with logback rolling file appender

DaveJohnston dave.johnston at me.com
Fri Aug 24 17:29:56 CEST 2012


I ended up creating a very simple encoder based on the LayoutWrappingEncoder
(although without the Layout)

I then replaced the PatternEncoder that I had used with my logger with this
ProtocolBuffer.

When I call myLogger.info("", MyProtocolBufferObj);

It logs the MyProtocolBufferObj in its serialized form.  Just what I wanted,
cheers.

  public class ProtocolBufferEncoder extends EncoderBase<ILoggingEvent> {
    public void doEncode(ILoggingEvent event) throws IOException {
		// Get the data
		//
		Object[] data = event.getArgumentArray();
		
		// We should only have one argument, which is the
		// protocol buffer - I'm sure there maybe better
		// ways to do this - I think the ILoggingEvent is unique
		// to logback - so not sure how this plays with slf4j
		//
		//
		if (data.length == 1) {
			// If the data is a Message
			//
			if (data[0] instanceof Message) {
				Message message = (Message) data[0];
				
				// Create and write a 4 byte header indicating the size of
				// the message
				//
				byte[] header = getMessageHeader(message.getSerializedSize());
				outputStream.write(header);
				
				// Write the message and flush if immediate flush is on
				//
				outputStream.write(message.toByteArray());
				if (isImmediateFlush()) {
					outputStream.flush();
				}
			}
		}
	}
     }
  }



DaveJohnston wrote:
> 
> Hi Chris,
> 
> Not yet - I was hoping there was an off-the-shelf solution that would just
> allow me to pass through a byte[]?   Maybe log.info("{}", byte[]) would
> work fine with this ?  I thought the second argument was getting cast to a
> string, but maybe not.
> 
> If not it looks like writing my own encoder is the way to go.  I'll take a
> peak at the interface and see what I can put together.
> 
> 
> Ceki Gulcu wrote:
>> 
>> 
>> Hi Dave,
>> 
>> A logback encoder is fundamentally binary beast. It writes to an 
>> OutputStream. Have you considered rolling your own Encoder to deal with 
>> protobuf data?
>> 
>> 
>> On 24.08.2012 12:30, DaveJohnston wrote:
>>>
>>> Thanks Chris,
>>>
>>> That looks like it might work what additional overhead does Anodyzed
>>> Onyx
>>> add to the log call?  My system is processing quite a high volume of
>>> traffic, so I wan't to avoid any performance costs.
>>>
>>> In my case I don't need to mix readable text with the binary data - my
>>> output file should just be purely binary, so maybe there is a simpler
>>> solution ?
>>>
>>>
>>> Chris Pratt wrote:
>>>>
>>>> With the Anodyzed Onyx (http://code.google.com/p/anodyzed) wrapper
>>>> around
>>>> Logback you can use log.debug("Google Protocol
>>>> Buffer\n{0,binary,dump}",myBuffer); to write a Hex Dump style entry in
>>>> the
>>>> logs.
>>>>    (*Chris*)
>>>>
>>>> On Thu, Aug 23, 2012 at 4:25 AM, Dave Johnston <dave.johnston at me.com>
>>>> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> I'd like to log google protocol buffers received by my server to a
>>>>> file,
>>>>> for later offline processing (the data is in a byte[]).  This is
>>>>> something
>>>>> I only do in when a debug mode is enabled, but it is useful for
>>>>> diagnostics.
>>>>>
>>>>> Ideally I'd like to use logback, but it doesn't seem to cater for
>>>>> binary
>>>>> data.
>>>>>
>>>>> I saw this issue: http://jira.qos.ch/browse/LOGBACK-232 which is
>>>>> marked
>>>>> as fix, and is a request for the same thing.  But I can't figure out
>>>>> how
>>>>> to
>>>>> use this with a normal rolling file appender.
>>>>>
>>>>> Does anyone have any examples of doing this?
>>>>>
>>>>> Cheers
>>>>>
>>>
>> 
>> 
>> -- 
>> Ceki
>> http://tinyurl.com/proLogback
>> _______________________________________________
>> Logback-user mailing list
>> Logback-user at qos.ch
>> http://mailman.qos.ch/mailman/listinfo/logback-user
>> 
>> 
> 
> 
-- 
View this message in context: http://old.nabble.com/Logging-encoded-google-protocol-buffers-with-logback-rolling-file-appender-tp34338947p34344772.html
Sent from the Logback User mailing list archive at Nabble.com.



More information about the Logback-user mailing list