logging-log4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Goeschl, Werner" <werner.goes...@siemens.com>
Subject [Bug in Log4J 2.0-beta4] SocketAppender reconnection don't work
Date Thu, 07 Mar 2013 10:40:09 GMT
we found a bug  in log4J 2.0 Beta4:

We configured a SocketAppender with a reconnectionDelay and defaultLayout (SerializedLayout)
in a XML-Config File.
After starting the application, the SocketAppender tries to open the socket periodical.
As the next step, we start the application with the SocketServer, and so the Appender connects
to it.
But after we get the following Exception, when we will open the ObjectInputStream (final ObjectInputStream
ois = new ObjectInputStream(socket.getInputStream());

Exception in thread "Thread-2" java.lang.RuntimeException: java.io.StreamCorruptedException:
invalid stream header: 7372003E
        at test.logger.LoggerTest_1$TCPSocketServer.run(LoggerTest_1.java:83)
Caused by: java.io.StreamCorruptedException: invalid stream header: 7372003E
        at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
        at java.io.ObjectInputStream.<init>(Unknown Source)
        at test.logger.LoggerTest_1$TCPSocketServer.run(LoggerTest_1.java:72)

The reason is:
At the Startup is no socket server available, therefore a dummy ByteArrayOutputStream is created.
See TCPSocketManager:230
After that, the Header of the layout (Object stream header) is written to the Dummy ByteArrayOutputStream.
See AbstractOutputStreamAppender:62

If the Reconnector-Thread succeeds, the Dummy ByteArrayOutputStream is changed to the OutputStream
from the socket.
See TCPSocketManager:175
But after this action the object stream header is not written again!

Kind regards

View raw message