You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by "Bryan Hsueh (JIRA)" <ji...@apache.org> on 2014/04/30 04:28:15 UTC

[jira] [Created] (LOG4J2-625) Serialization error with SocketAppender and Asynch Logger

Bryan Hsueh created LOG4J2-625:
----------------------------------

             Summary: Serialization error with SocketAppender and Asynch Logger
                 Key: LOG4J2-625
                 URL: https://issues.apache.org/jira/browse/LOG4J2-625
             Project: Log4j 2
          Issue Type: Question
          Components: Appenders
    Affects Versions: 2.0-rc1
         Environment: Ubuntu 12.04, Java 7
            Reporter: Bryan Hsueh


I'm testing a simple SocketAppender, which works fine until I switch to asynchronous loggers.  Once I turn on async logging, I get:

2014-04-29 21:17:26,029 ERROR Serialization of LogEvent failed. java.io.NotSerializableException: org.apache.logging.log4j.core.Logger$PrivateConfig
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1183)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1508)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1508)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
	at org.apache.logging.log4j.core.layout.SerializedLayout.toByteArray(SerializedLayout.java:64)
	at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.append(AbstractOutputStreamAppender.java:118)
	at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:97)
	at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:425)
	at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:406)
	at org.apache.logging.log4j.core.Logger$PrivateConfig.logEvent(Logger.java:275)
	at org.apache.logging.log4j.core.async.AsyncLogger.actualAsyncLog(AsyncLogger.java:289)
	at org.apache.logging.log4j.core.async.RingBufferLogEvent.execute(RingBufferLogEvent.java:99)
	at org.apache.logging.log4j.core.async.RingBufferLogEventHandler.onEvent(RingBufferLogEventHandler.java:43)
	at org.apache.logging.log4j.core.async.RingBufferLogEventHandler.onEvent(RingBufferLogEventHandler.java:28)
	at com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:128)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:744)

 My client is configured with:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
  <Appenders>
    <Console name="MyConsole" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS}{EST} %-5level- %msg%n"/>
    </Console>
    <Socket name="MySocket" host="localhost" port="8888">
      <SerializedLayout />
    </Socket>
  </Appenders>
  <Loggers>
    <Root level="INFO">
      <AppenderRef ref="MyConsole"/>
      <AppenderRef ref="MySocket"/>
    </Root>
  </Loggers>
</Configuration>

My server is configured with:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
  <Appenders>
    <Console name="MyConsole" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS}{EST} %-5level- %msg%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="INFO">
      <AppenderRef ref="MyConsole"/>
    </Root>
  </Loggers>
</Configuration>

The client just does a LogManager.getLogger().info("{}", "hello").

The server just creates a SocketServer:
SocketServer server = new SocketServer(8888);
server.run();

All works fine until I add this into the client:
System.setProperty("Log4jContextSelector",                "org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");

Am I missing something?  Please advise.

Thanks

   



--
This message was sent by Atlassian JIRA
(v6.2#6252)

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org