| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.apache.log4j.spi; |
| |
| import junit.framework.TestCase; |
| |
| import org.apache.log4j.Level; |
| import org.apache.log4j.Logger; |
| import org.apache.log4j.MDC; |
| import org.apache.log4j.NDC; |
| import org.apache.log4j.util.SerializationTestHelper; |
| import org.apache.log4j.Priority; |
| import org.apache.log4j.Category; |
| |
| |
| /** |
| * Tests LoggingEvent. |
| * |
| * @author Curt Arnold |
| */ |
| public class LoggingEventTest extends TestCase { |
| /** |
| * Create LoggingEventTest. |
| * |
| * @param name test name. |
| */ |
| public LoggingEventTest(final String name) { |
| super(name); |
| } |
| |
| /** |
| * Serialize a simple logging event and check it against |
| * a witness. |
| * @throws Exception if exception during test. |
| */ |
| public void testSerializationSimple() throws Exception { |
| Logger root = Logger.getRootLogger(); |
| LoggingEvent event = |
| new LoggingEvent( |
| root.getClass().getName(), root, Level.INFO, "Hello, world.", null); |
| // event.prepareForDeferredProcessing(); |
| |
| int[] skip = new int[] { 352, 353, 354, 355, 356 }; |
| SerializationTestHelper.assertSerializationEquals( |
| "witness/serialization/simple.bin", event, skip, 237); |
| } |
| |
| /** |
| * Serialize a logging event with an exception and check it against |
| * a witness. |
| * @throws Exception if exception during test. |
| * |
| */ |
| public void testSerializationWithException() throws Exception { |
| Logger root = Logger.getRootLogger(); |
| Exception ex = new Exception("Don't panic"); |
| LoggingEvent event = |
| new LoggingEvent( |
| root.getClass().getName(), root, Level.INFO, "Hello, world.", ex); |
| // event.prepareForDeferredProcessing(); |
| |
| int[] skip = new int[] { 352, 353, 354, 355, 356 }; |
| SerializationTestHelper.assertSerializationEquals( |
| "witness/serialization/exception.bin", event, skip, 237); |
| } |
| |
| /** |
| * Serialize a logging event with an exception and check it against |
| * a witness. |
| * @throws Exception if exception during test. |
| * |
| */ |
| public void testSerializationWithLocation() throws Exception { |
| Logger root = Logger.getRootLogger(); |
| LoggingEvent event = |
| new LoggingEvent( |
| root.getClass().getName(), root, Level.INFO, "Hello, world.", null); |
| event.getLocationInformation(); |
| // event.prepareForDeferredProcessing(); |
| |
| int[] skip = new int[] { 352, 353, 354, 355, 356 }; |
| SerializationTestHelper.assertSerializationEquals( |
| "witness/serialization/location.bin", event, skip, 237); |
| } |
| |
| /** |
| * Serialize a logging event with ndc. |
| * @throws Exception if exception during test. |
| * |
| */ |
| public void testSerializationNDC() throws Exception { |
| Logger root = Logger.getRootLogger(); |
| NDC.push("ndc test"); |
| |
| LoggingEvent event = |
| new LoggingEvent( |
| root.getClass().getName(), root, Level.INFO, "Hello, world.", null); |
| // event.prepareForDeferredProcessing(); |
| |
| int[] skip = new int[] { 352, 353, 354, 355, 356 }; |
| SerializationTestHelper.assertSerializationEquals( |
| "witness/serialization/ndc.bin", event, skip, 237); |
| } |
| |
| /** |
| * Serialize a logging event with mdc. |
| * @throws Exception if exception during test. |
| * |
| */ |
| public void testSerializationMDC() throws Exception { |
| Logger root = Logger.getRootLogger(); |
| MDC.put("mdckey", "mdcvalue"); |
| |
| LoggingEvent event = |
| new LoggingEvent( |
| root.getClass().getName(), root, Level.INFO, "Hello, world.", null); |
| // event.prepareForDeferredProcessing(); |
| |
| int[] skip = new int[] { 352, 353, 354, 355, 356 }; |
| SerializationTestHelper.assertSerializationEquals( |
| "witness/serialization/mdc.bin", event, skip, 237); |
| } |
| |
| /** |
| * Deserialize a simple logging event. |
| * @throws Exception if exception during test. |
| * |
| */ |
| public void testDeserializationSimple() throws Exception { |
| Object obj = |
| SerializationTestHelper.deserializeStream( |
| "witness/serialization/simple.bin"); |
| assertTrue(obj instanceof LoggingEvent); |
| |
| LoggingEvent event = (LoggingEvent) obj; |
| assertEquals("Hello, world.", event.getMessage()); |
| assertEquals(Level.INFO, event.getLevel()); |
| } |
| |
| /** |
| * Deserialize a logging event with an exception. |
| * @throws Exception if exception during test. |
| * |
| */ |
| public void testDeserializationWithException() throws Exception { |
| Object obj = |
| SerializationTestHelper.deserializeStream( |
| "witness/serialization/exception.bin"); |
| assertTrue(obj instanceof LoggingEvent); |
| |
| LoggingEvent event = (LoggingEvent) obj; |
| assertEquals("Hello, world.", event.getMessage()); |
| assertEquals(Level.INFO, event.getLevel()); |
| } |
| |
| /** |
| * Deserialize a logging event with an exception. |
| * @throws Exception if exception during test. |
| * |
| */ |
| public void testDeserializationWithLocation() throws Exception { |
| Object obj = |
| SerializationTestHelper.deserializeStream( |
| "witness/serialization/location.bin"); |
| assertTrue(obj instanceof LoggingEvent); |
| |
| LoggingEvent event = (LoggingEvent) obj; |
| assertEquals("Hello, world.", event.getMessage()); |
| assertEquals(Level.INFO, event.getLevel()); |
| } |
| |
| /** |
| * Tests LoggingEvent.fqnOfCategoryClass. |
| */ |
| public void testFQNOfCategoryClass() { |
| Category root = Logger.getRootLogger(); |
| Priority info = Level.INFO; |
| String catName = Logger.class.toString(); |
| LoggingEvent event = |
| new LoggingEvent( |
| catName, root, info, "Hello, world.", null); |
| assertEquals(catName, event.fqnOfCategoryClass); |
| } |
| |
| /** |
| * Tests LoggingEvent.level. |
| * @deprecated |
| */ |
| public void testLevel() { |
| Category root = Logger.getRootLogger(); |
| Priority info = Level.INFO; |
| String catName = Logger.class.toString(); |
| LoggingEvent event = |
| new LoggingEvent( |
| catName, root, 0L, info, "Hello, world.", null); |
| Priority error = Level.ERROR; |
| event.level = error; |
| assertEquals(Level.ERROR, event.level); |
| } |
| |
| /** |
| * Tests LoggingEvent.getLocationInfo() when no FQCN is specified. |
| * See bug 41186. |
| */ |
| public void testLocationInfoNoFQCN() { |
| Category root = Logger.getRootLogger(); |
| Priority level = Level.INFO; |
| LoggingEvent event = |
| new LoggingEvent( |
| null, root, 0L, level, "Hello, world.", null); |
| LocationInfo info = event.getLocationInformation(); |
| // |
| // log4j 1.2 returns an object, its layout doesn't check for nulls. |
| // log4j 1.3 returns a null. |
| // |
| assertNotNull(info); |
| if (info != null) { |
| assertEquals("?", info.getLineNumber()); |
| assertEquals("?", info.getClassName()); |
| assertEquals("?", info.getFileName()); |
| assertEquals("?", info.getMethodName()); |
| } |
| } |
| |
| /** |
| * Message object that throws a RuntimeException on toString(). |
| * See bug 37182. |
| */ |
| private static class BadMessage { |
| public BadMessage() { |
| } |
| |
| public String toString() { |
| throw new RuntimeException(); |
| } |
| } |
| |
| /** |
| * Tests that an runtime exception or error during toString |
| * on the message parameter does not propagate to caller. |
| * See bug 37182. |
| */ |
| public void testBadMessage() { |
| Category root = Logger.getRootLogger(); |
| Priority info = Level.INFO; |
| String catName = Logger.class.toString(); |
| BadMessage msg = new BadMessage(); |
| LoggingEvent event = |
| new LoggingEvent( |
| catName, root, 0L, info, msg, null); |
| // would result in exception in earlier versions |
| event.getRenderedMessage(); |
| } |
| |
| |
| } |