diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/Category.java b/log4j-1.2-api/src/main/java/org/apache/log4j/Category.java index 90857cb5b36..82a6e1be6a2 100644 --- a/log4j-1.2-api/src/main/java/org/apache/log4j/Category.java +++ b/log4j-1.2-api/src/main/java/org/apache/log4j/Category.java @@ -307,17 +307,28 @@ private void fireRemoveAppenderEvent(final Appender appender) { } } + private static Message createMessage(Object message) { + if (message instanceof String) { + return new SimpleMessage((String) message); + } + if (message instanceof CharSequence) { + return new SimpleMessage((CharSequence) message); + } + if (message instanceof Map) { + return new MapMessage<>((Map) message); + } + if (message instanceof Message) { + return (Message) message; + } + return new ObjectMessage(message); + } + public void forcedLog(final String fqcn, final Priority level, final Object message, final Throwable t) { final org.apache.logging.log4j.Level lvl = org.apache.logging.log4j.Level.toLevel(level.toString()); + final Message msg = createMessage(message); if (logger instanceof ExtendedLogger) { - @SuppressWarnings("unchecked") - final Message msg = message instanceof Message ? (Message) message - : message instanceof Map ? new MapMessage((Map) message) : new ObjectMessage(message); ((ExtendedLogger) logger).logMessage(fqcn, lvl, null, msg, t); } else { - final ObjectRenderer renderer = get(message.getClass()); - final Message msg = message instanceof Message ? (Message) message - : renderer != null ? new RenderedMessage(renderer, message) : new ObjectMessage(message); logger.log(lvl, msg, t); } } @@ -537,43 +548,25 @@ public void l7dlog(final Priority priority, final String key, final Throwable t) public void log(final Priority priority, final Object message) { if (isEnabledFor(priority)) { - @SuppressWarnings("unchecked") - final Message msg = message instanceof Map ? new MapMessage((Map) message) : new ObjectMessage(message); - forcedLog(FQCN, priority, msg, null); + forcedLog(FQCN, priority, message, null); } } public void log(final Priority priority, final Object message, final Throwable t) { if (isEnabledFor(priority)) { - @SuppressWarnings("unchecked") - final Message msg = message instanceof Map ? new MapMessage((Map) message) : new ObjectMessage(message); - forcedLog(FQCN, priority, msg, t); + forcedLog(FQCN, priority, message, t); } } public void log(final String fqcn, final Priority priority, final Object message, final Throwable t) { if (isEnabledFor(priority)) { - final Message msg = new ObjectMessage(message); - forcedLog(fqcn, priority, msg, t); + forcedLog(fqcn, priority, message, t); } } void maybeLog(final String fqcn, final org.apache.logging.log4j.Level level, final Object message, final Throwable throwable) { if (logger.isEnabled(level)) { - final Message msg; - if (message instanceof String) { - msg = new SimpleMessage((String) message); - } - // SimpleMessage treats String and CharSequence differently, hence this else-if block. - else if (message instanceof CharSequence) { - msg = new SimpleMessage((CharSequence) message); - } else if (message instanceof Map) { - @SuppressWarnings("unchecked") - final Map map = (Map) message; - msg = new MapMessage<>(map); - } else { - msg = new ObjectMessage(message); - } + final Message msg = createMessage(message); if (logger instanceof ExtendedLogger) { ((ExtendedLogger) logger).logMessage(fqcn, level, null, msg, throwable); } else { diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/CategoryTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/CategoryTest.java index 1bbedfa0520..c2be94c0737 100644 --- a/log4j-1.2-api/src/test/java/org/apache/log4j/CategoryTest.java +++ b/log4j-1.2-api/src/test/java/org/apache/log4j/CategoryTest.java @@ -86,18 +86,46 @@ public void testForcedLog() { final MockCategory category = new MockCategory("org.example.foo"); category.setAdditivity(false); ((org.apache.logging.log4j.core.Logger) category.getLogger()).addAppender(appender); + // Logging a String category.info("Hello, World"); - final List list = appender.getEvents(); + List list = appender.getEvents(); int events = list.size(); assertTrue("Number of events should be 1, was " + events, events == 1); LogEvent event = list.get(0); Message msg = event.getMessage(); assertNotNull("No message", msg); - assertTrue("Incorrect Message type", msg instanceof ObjectMessage); + // LOG4J2-3080: use message type consistently + assertTrue("Incorrect Message type", msg instanceof SimpleMessage); + assertEquals("Hello, World", msg.getFormat()); + appender.clear(); + // Logging a String map + category.info(Collections.singletonMap("hello", "world")); + list = appender.getEvents(); + events = list.size(); + assertTrue("Number of events should be 1, was " + events, events == 1); + event = list.get(0); + msg = event.getMessage(); + assertNotNull("No message", msg); + assertTrue("Incorrect Message type", msg instanceof MapMessage); Object[] objects = msg.getParameters(); - assertTrue("Incorrect Object type", objects[0] instanceof String); + assertEquals("world", objects[0]); appender.clear(); - category.log(Priority.INFO, "Hello, World"); + // Logging a generic map + category.info(Collections.singletonMap(1234L, "world")); + list = appender.getEvents(); + events = list.size(); + assertTrue("Number of events should be 1, was " + events, events == 1); + event = list.get(0); + msg = event.getMessage(); + assertNotNull("No message", msg); + assertTrue("Incorrect Message type", msg instanceof MapMessage); + objects = msg.getParameters(); + assertEquals("world", objects[0]); + appender.clear(); + // Logging an object + final Object obj = new Object(); + category.info(obj); + list = appender.getEvents(); events = list.size(); assertTrue("Number of events should be 1, was " + events, events == 1); event = list.get(0); @@ -105,7 +133,18 @@ public void testForcedLog() { assertNotNull("No message", msg); assertTrue("Incorrect Message type", msg instanceof ObjectMessage); objects = msg.getParameters(); - assertTrue("Incorrect Object type", objects[0] instanceof String); + assertEquals(obj, objects[0]); + appender.clear(); + + category.log(Priority.INFO, "Hello, World"); + list = appender.getEvents(); + events = list.size(); + assertTrue("Number of events should be 1, was " + events, events == 1); + event = list.get(0); + msg = event.getMessage(); + assertNotNull("No message", msg); + assertTrue("Incorrect Message type", msg instanceof SimpleMessage); + assertEquals("Hello, World", msg.getFormat()); appender.clear(); }