svn commit: r1641 - in logback/trunk/logback-classic/src: main/java/ch/qos/logback/classic/spi test/java/ch/qos/logback/classic/net test/java/ch/qos/logback/classic/spi

Author: ceki Date: Tue Mar 11 10:43:47 2008 New Revision: 1641 Added: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/spi/LoggingEventSerializationTest.java - copied, changed from r1638, /logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/LoggingEventSerializationTest.java logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/spi/LuckyCharms.java Removed: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/LoggingEventSerializationTest.java Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/spi/LoggingEvent.java Log: - ongoing work for fixing bug 100 http://bugzilla.qos.ch/show_bug.cgi?id=100 Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/spi/LoggingEvent.java ============================================================================== --- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/spi/LoggingEvent.java (original) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/spi/LoggingEvent.java Tue Mar 11 10:43:47 2008 @@ -47,6 +47,9 @@ */ private static final long serialVersionUID = 3022264832697160750L; + private static final int NULL_ARGUMENT_ARRAY = -1; + private static final String NULL_ARGUMENT_ARRAY_ELEMENT = "NULL_ARGUMENT_ARRAY_ELEMENT"; + /** * */ @@ -80,7 +83,7 @@ private String message; private String formattedMessage; - private Object[] argumentArray; + private transient Object[] argumentArray; private ThrowableInformation throwableInfo; @@ -113,7 +116,7 @@ // bug 85 (we previously failed to set this.argumentArray) this.argumentArray = argArray; - + if (argArray != null) { formattedMessage = MessageFormatter.arrayFormat(message, argArray); } else { @@ -122,7 +125,8 @@ timeStamp = System.currentTimeMillis(); // the case is ugly but under the circumstances acceptable - LogbackMDCAdapter logbackMDCAdapter = (LogbackMDCAdapter) MDC.getMDCAdapter(); + LogbackMDCAdapter logbackMDCAdapter = (LogbackMDCAdapter) MDC + .getMDCAdapter(); mdcPropertyMap = logbackMDCAdapter.getPropertyMap(); } @@ -185,13 +189,13 @@ * This method should be called prior to serializing an event. It should also * be called when using asynchronous logging. * - * <p>Note that due to performance concerns, this method does NOT extract - * caller data. It is the responsability of the calller to extract caller + * <p> + * Note that due to performance concerns, this method does NOT extract caller + * data. It is the responsability of the calller to extract caller * information. */ public void prepareForDeferredProcessing() { this.getThreadName(); - } public LoggerRemoteView getLoggerRemoteView() { @@ -286,6 +290,20 @@ 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.writeUTF(argumentArray[i].toString()); + } else { + out.writeUTF(NULL_ARGUMENT_ARRAY_ELEMENT); + } + } + } else { + out.writeInt(NULL_ARGUMENT_ARRAY); + } + } private void readObject(ObjectInputStream in) throws IOException, @@ -293,8 +311,19 @@ in.defaultReadObject(); int levelInt = in.readInt(); level = Level.toLevel(levelInt); + + int argArrayLen = in.readInt(); + if (argArrayLen != NULL_ARGUMENT_ARRAY) { + argumentArray = new String[argArrayLen]; + for (int i = 0; i < argArrayLen; i++) { + String val = in.readUTF(); + if (!NULL_ARGUMENT_ARRAY_ELEMENT.equals(val)) { + argumentArray[i] = val; + } + } + } } - + @Override public String toString() { StringBuffer sb = new StringBuffer('['); @@ -303,5 +332,4 @@ sb.append("\n"); return sb.toString(); } - } Copied: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/spi/LoggingEventSerializationTest.java (from r1638, /logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/LoggingEventSerializationTest.java) ============================================================================== --- /logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/LoggingEventSerializationTest.java (original) +++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/spi/LoggingEventSerializationTest.java Tue Mar 11 10:43:47 2008 @@ -1,4 +1,8 @@ -package ch.qos.logback.classic.net; +package ch.qos.logback.classic.spi; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -6,18 +10,16 @@ import java.io.ObjectOutputStream; import java.util.Map; -import junit.framework.TestCase; - +import org.junit.After; +import org.junit.Before; +import org.junit.Test; import org.slf4j.MDC; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.spi.LoggerContextRemoteView; -import ch.qos.logback.classic.spi.LoggerRemoteView; -import ch.qos.logback.classic.spi.LoggingEvent; -public class LoggingEventSerializationTest extends TestCase { +public class LoggingEventSerializationTest { LoggerContext lc; Logger logger; @@ -26,24 +28,26 @@ ObjectOutputStream oos; ObjectInputStream inputStream; + @Before public void setUp() throws Exception { - super.setUp(); lc = new LoggerContext(); lc.setName("testContext"); logger = lc.getLogger(LoggerContext.ROOT_NAME); + // create the byte output stream + bos = new ByteArrayOutputStream(); + oos = new ObjectOutputStream(bos); } + + @After public void tearDown() throws Exception { - super.tearDown(); + lc = null; logger = null; } + @Test public void testBasic() throws Exception { - // create the byte output stream - bos = new ByteArrayOutputStream(); - oos = new ObjectOutputStream(bos); - LoggingEvent event = createLoggingEvent(); oos.writeObject(event); @@ -57,11 +61,8 @@ assertEquals(Level.DEBUG, remoteEvent.getLevel()); } + @Test public void testContext() throws Exception { - // create the byte output stream - bos = new ByteArrayOutputStream(); - oos = new ObjectOutputStream(bos); - lc.putProperty("testKey", "testValue"); LoggingEvent event = createLoggingEvent(); oos.writeObject(event); @@ -85,11 +86,8 @@ assertEquals("testValue", props.get("testKey")); } + @Test public void testMDC() throws Exception { - // create the byte output stream - bos = new ByteArrayOutputStream(); - oos = new ObjectOutputStream(bos); - MDC.put("key", "testValue"); LoggingEvent event = createLoggingEvent(); oos.writeObject(event); @@ -104,11 +102,8 @@ assertEquals("testValue", MDCPropertyMap.get("key")); } + @Test public void testUpdatedMDC() throws Exception { - // create the byte output stream - bos = new ByteArrayOutputStream(); - oos = new ObjectOutputStream(bos); - MDC.put("key", "testValue"); LoggingEvent event1 = createLoggingEvent(); oos.writeObject(event1); @@ -131,6 +126,28 @@ assertEquals("updatedTestValue", MDCPropertyMap.get("key")); } + @Test + public void nonSerializableParameters() throws Exception { + LoggingEvent event = createLoggingEvent(); + LuckyCharms lucky0 = new LuckyCharms(0); + event.setArgumentArray(new Object[] {lucky0, null}); + oos.writeObject(event); + + // create the input stream based on the ouput stream + ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); + inputStream = new ObjectInputStream(bis); + + LoggingEvent remoteEvent = (LoggingEvent) inputStream.readObject(); + + Object[] aa = remoteEvent.getArgumentArray(); + assertNotNull(aa); + assertEquals(2, aa.length); + assertEquals("LC(0)", aa[0]); + assertNull(aa[1]); + } + + + private LoggingEvent createLoggingEvent() { LoggingEvent le = new LoggingEvent(this.getClass().getName(), logger, Level.DEBUG, "test message", null, null); Added: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/spi/LuckyCharms.java ============================================================================== --- (empty file) +++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/spi/LuckyCharms.java Tue Mar 11 10:43:47 2008 @@ -0,0 +1,15 @@ +package ch.qos.logback.classic.spi; + +// non serializable object +public class LuckyCharms { + int id; + + LuckyCharms(int id) { + this.id= id; + } + + @Override + public String toString() { + return "LC("+id+")"; + } +}
participants (1)
-
noreply.ceki@qos.ch