[logback-user] Split long data on multiple rows
Ceki Gulcu
ceki at qos.ch
Tue Sep 22 13:59:56 CEST 2009
Since you system is based on logback-core and not logback-classic, you could
create a turbo filter which instead of returning ACCEPT, DENY, NEUTRAL could
return an array of MyEvent instances which would correspond closely to what you
have in mind.
Anders Hammar wrote:
> 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
> <mailto: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 <mailto:Logback-user at qos.ch>
> http://qos.ch/mailman/listinfo/logback-user
>
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Logback-user mailing list
> Logback-user at qos.ch
> http://qos.ch/mailman/listinfo/logback-user
--
Ceki Gülcü
Logback: The reliable, generic, fast and flexible logging framework for Java.
http://logback.qos.ch
More information about the Logback-user
mailing list