Thanks Ceki!

I was happily hacking along when it suddenly struck me - 'foo' is not a string, but a complex object which is converted to a printable string by a Converter. So, sticking to that logback design it's impossible to tell the final length of foo's string value in the TurboFilter or in writeLoopOnConverters(). Bummer!

/Anders

On Tue, Sep 22, 2009 at 13:59, Ceki Gulcu <ceki@qos.ch> wrote:

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@qos.ch <mailto:ceki@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@qos.ch <mailto:Logback-user@qos.ch> ------------------------------------------------------------------------


_______________________________________________
Logback-user mailing list
Logback-user@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
_______________________________________________
Logback-user mailing list
Logback-user@qos.ch
http://qos.ch/mailman/listinfo/logback-user