[ 
http://jira.qos.ch/browse/LBCLASSIC-201?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=11712#action_11712
 ] 

Ceki Gulcu commented on LBCLASSIC-201:
--------------------------------------

Joern's concern about missing types on the receiver end corrupting the stream 
raises a valid point. Expecting the receiver to handle all possible types will 
not work and will certainly not scale. However, the receiver can simply step 
over unknown types. Whenever ObjectInputStream.getObject throws 
ClassNotFoundException the receiver simply continues reading the next item 
avoiding the corruption of the input stream. I believe that the readResolve 
method in LoggingEventVO could be enhanced to deal with 
ClassNotFoundExceptions. 

As for Rudigers proposal for the sender and receiver negotiating the types to 
serialize, the current  protocol for event serialization does not require a 
back channel from the receiver back to the client, so negotiation is not 
possible without changing the protocol. Even if the protocol were changed, the 
absence of the back channel allows deferred processing. (The sender writes to a 
file and the receiver processes the file at a later time.)

IMO, the user should be able to specify a serialization contract and the 
receiver must be able to deal with broken contracts.

> Preferably don't call toString() on objects in arguments array
> --------------------------------------------------------------
>
>                 Key: LBCLASSIC-201
>                 URL: http://jira.qos.ch/browse/LBCLASSIC-201
>             Project: logback-classic
>          Issue Type: Improvement
>          Components: appender
>    Affects Versions: 0.9.19
>         Environment: Software platform
>            Reporter: Donald Graham
>            Assignee: Ceki Gulcu
>
> I'm attempting to use a SocketAppender to send log events over the network to 
> a custom appender hosted by SimpleSocketServer.  My custom appender needs to 
> work with my arguments as objects, rather than strings.  I noticed that the 
> string representations of my arguments were being passed across the network, 
> and traced through to the code shown below (from 
> ch.qos.logback.classic.spi.LoggingEventVO).  Would you consider sending the 
> object's serialized form instead (assuming the object is serializable)? 
>   private void writeObject(ObjectOutputStream out) throws IOException {
>     out.defaultWriteObject();
>     out.writeInt(level.levelInt);
>     if (argumentArray != null) {
>       int len = argumentArray.length;
>       out.writeInt(len);
>       for (int i = 0; i < argumentArray.length; i++) {
>         if (argumentArray[i] != null) {
>           out.writeObject(argumentArray[i].toString());
>         } else {
>           out.writeObject(NULL_ARGUMENT_ARRAY_ELEMENT);
>         }
>       }
>     } else {
>       out.writeInt(NULL_ARGUMENT_ARRAY);
>     }
>   }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.qos.ch/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

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

Reply via email to