[logback-user] Split long data on multiple rows

Anders Hammar anders at hammar.net
Tue Sep 22 12:22:33 CEST 2009


Thanks Ceki! I knew I could count on you replying quickly.

The framework here is the auditing framework I constructed some 1,5 years
ago for a customer. They've now realized this requirement.

I was kind of hoping that I could add some step before the layout gets the
event. In that step, I could check the event, and if necessary split it into
x events. And then the layout would get these n events instead and do the
normal logging on each of them.
I had a look at the filters, but they only handle allow/block kind of
things. This would be some other kind of "filter". Maybe there's no
advantage going down this path compared to your suggestion...

/Anders

On Tue, Sep 22, 2009 at 11:38, Ceki Gulcu <ceki at qos.ch> wrote:

>
> Hello Anders,
>
> Logback-core? Nice.
>
> If only the field 'foo' needs to be split, then just override the converter
> for the field foo to do the splitting, and you are done. However, you
> requirements differ as you also require the repetition of other fields.
>
> The approach which seems the most logical to me, would be to derive a
> sub-class from PatternLayoutBase overriding the writeLoopOnConverters method
> so that when the foo field needs splitting, you would loop over the
> converter chain as many times as necessary.
>
> Here is a possible implementation:
>
> class MyPatternLayout extends PatternLayoutBase<MyEvent> {
>
>  ...
>
>  protected String writeLoopOnConverters(MyEvent event) {
>    Foo foo = event.getFoo();
>    StringBuilder sb = new StringBuilder();
>    String[] fooParts = split(foo);
>    for(String s: fooParts) {
>      // construct a new event from 'event' so that foo has only one part
>      MyEvent splitEvent = new MyEvent(event, s);
>      String line = super.writeLoopOnConverters(splitEvent);
>      sb.append(line);
>      sb.append(CoreConstants.LINE_SEPARATOR);
>    }
>    return sb.toString();
>  }
> }
>
> HTH,
>
>
> Anders Hammar wrote:
>
>> Hi,
>>
>> I have a framework that utilizes logback-core for logging. Due to
>> limitations in the software reading the log files, a new requirement is that
>> long data should be split on multiple rows. I'm trying to figure out if
>> there a simple way of doing this?
>>
>> More info: What I have is an extension of the PatternLayoutBase which adds
>> the converters for my event class. I'm using the standard
>> RollingFileAppender. So, let's say I have a FooConverter, which gets the foo
>> info from the event. But, when logging to the file, the foo info part must
>> never be longer than x chars. If it is, it should be split on multiple rows.
>> Other data (generated by other converters) should then be repeated.
>>
>> Any suggestions on how to do this in a clean logback way is appreciated!
>> What I'm currently thinking is to loop on the converters (calling
>> PatternLayoutBase.writeLoopOnConverters multiple times), but I need to know
>> when that's required... Anyone done something similar?
>>
>> /Anders
>>
>>
> --
> Ceki Gülcü
> Logback: The reliable, generic, fast and flexible logging framework for
> Java.
> http://logback.qos.ch
> _______________________________________________
> Logback-user mailing list
> Logback-user at qos.ch
> http://qos.ch/mailman/listinfo/logback-user
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://qos.ch/pipermail/logback-user/attachments/20090922/51768a73/attachment.htm>


More information about the Logback-user mailing list