Hi  Maarteen,

Thus far, mutability/immutablity, localness/remoteness, and storability on disk are aspects that we need to take into consideration. Are there other aspects?

Maarten Bosteels wrote:
Hello Ceki,

Seems like a good idea to me. But what about making a read-only interface and a read-write interface.

interface ImmutableLoggingEvent {
  // only getters
}

interface MutableLoggingEvent {
  // getters and setters
}

LoggingEventMemento implements ImmutableLoggingEvent

LoggingEvent implements MutableLoggingEvent

And wherever possible use a ImmutableLoggingEvent .

Maarten


On Mon, Feb 23, 2009 at 1:44 PM, Ceki Gulcu <[email protected]> wrote:

    Hello all,

    I would like to split/redesign the LoggingEvent object as follows:

    interface ILoggingEvent  {

     String[] getArgumentArray();
     CallerData[] getCallerData();
     Level getLevel();
     String getLoggerName();
     Marker getMarker();
     Map<String, String> getMDCPropertyMap();
     String getMessage();
     String getThreadName();
     ThrowableDataPoint[] getThrowableDataPointArray();
     long getTimeStamp();

     void setArgumentArray(Object[])
     // other setters omitted
    }


    // localized usage, temporary lifespan
    class LoggingEvent implements ILoggingEvent {
     // getter and setter methods from ILoggingEvent omitted

     void prepareForDeferredProcessing();

     // create a LoggingEventMemento image of this LoggingEvent
     LoggingEventMemento asLoggingEventMemento();
    }


    // distributed (or remote) usage, long term lifespan
    class LoggingEventMemento implements ILoggingEvent {
     // getter and setter methods from ILoggingEvent omitted

     int getVersion();
     makeImmutable();
    }


    LoggingEvent is intended to be used within the application generating
    the logging event. LoggingEventMemento is intended for remote
    applications (applications other than the application at the origin of
    the event) and for longer term lifespan. LoggingEventMemento objects
    are intended to be compatible across logback versions. If possible,
    LoggingEventMemento should also be suitable for long term storage (on
    disk).

    Both LoggingEvent and LoggingEventMemento implement the ILoggingEvent
    interface so that most logback-classic components, assuming they
    expect to operate on ILoggingEvent instances, will be able to handle
    LoggingEvent or LoggingEventMemento objects interchangeably.


    Instead of LoggingEvent, those appenders which perform serialization,
    will be serializing instances of LoggingEventMemento. The
    asLoggingEventMemento() method in LoggingEvent will return a
    LoggingEventMemento image of a given LoggingEvent.

    Obviously there several technical obstacles to overcome. However, I am
    soliciting your comments about the general goals of the above
    redesign. Do they make sense? Have I omitted important goals?

    TIA,

-- Ceki Gülcü
    Logback: The reliable, generic, fast and flexible logging framework
    for Java.
    http://logback.qos.ch
    _______________________________________________
    logback-dev mailing list
    [email protected]
    http://qos.ch/mailman/listinfo/logback-dev



------------------------------------------------------------------------

_______________________________________________
logback-dev mailing list
[email protected]
http://qos.ch/mailman/listinfo/logback-dev

--
Ceki Gülcü
Logback: The reliable, generic, fast and flexible logging framework for Java.
http://logback.qos.ch
_______________________________________________
logback-dev mailing list
[email protected]
http://qos.ch/mailman/listinfo/logback-dev

Reply via email to