[logback-dev] [JIRA] Commented: (LBCLASSIC-201) Preferably don't call toString() on objects in arguments array

Ceki Gulcu (JIRA) noreply-jira at qos.ch
Wed Apr 7 00:34:16 CEST 2010


    [ 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

        


More information about the logback-dev mailing list