Author: ceki Date: Fri Oct 3 21:09:33 2008 New Revision: 1178 Modified: slf4j/trunk/jul-to-slf4j/src/main/java/org/slf4j/bridge/SLF4JBridgeHandler.java slf4j/trunk/jul-to-slf4j/src/test/java/org/slf4j/bridge/ListAppender.java slf4j/trunk/jul-to-slf4j/src/test/java/org/slf4j/bridge/SLF4JBridgeHandlerTest.java slf4j/trunk/jul-to-slf4j/src/test/resources/org/slf4j/bridge/testLogStrings.properties
Log: - added parameter support as requested in bug 103 by Jarek Gawor Modified: slf4j/trunk/jul-to-slf4j/src/main/java/org/slf4j/bridge/SLF4JBridgeHandler.java ============================================================================== --- slf4j/trunk/jul-to-slf4j/src/main/java/org/slf4j/bridge/SLF4JBridgeHandler.java (original) +++ slf4j/trunk/jul-to-slf4j/src/main/java/org/slf4j/bridge/SLF4JBridgeHandler.java Fri Oct 3 21:09:33 2008 @@ -31,6 +31,7 @@ package org.slf4j.bridge; +import java.text.MessageFormat; import java.util.MissingResourceException; import java.util.ResourceBundle; import java.util.logging.Handler; @@ -191,22 +192,26 @@ * @return */ private String getMessageI18N(LogRecord record) { - String rawMsg = record.getMessage(); + String message = record.getMessage(); - if (rawMsg == null) { + if (message == null) { return null; } ResourceBundle bundle = record.getResourceBundle(); if (bundle != null) { try { - return bundle.getString(rawMsg); + message = bundle.getString(message); } catch (MissingResourceException e) { } } - return rawMsg; + Object[] params = record.getParameters(); + if (params != null) { + message = MessageFormat.format(message, params); + } + return message; } - + /** * Publish a LogRecord. * <p> @@ -240,6 +245,4 @@ } } - - } Modified: slf4j/trunk/jul-to-slf4j/src/test/java/org/slf4j/bridge/ListAppender.java ============================================================================== --- slf4j/trunk/jul-to-slf4j/src/test/java/org/slf4j/bridge/ListAppender.java (original) +++ slf4j/trunk/jul-to-slf4j/src/test/java/org/slf4j/bridge/ListAppender.java Fri Oct 3 21:09:33 2008 @@ -1,3 +1,27 @@ +/* + * Copyright (c) 2004-2008 QOS.ch + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + package org.slf4j.bridge; import java.util.ArrayList; Modified: slf4j/trunk/jul-to-slf4j/src/test/java/org/slf4j/bridge/SLF4JBridgeHandlerTest.java ============================================================================== --- slf4j/trunk/jul-to-slf4j/src/test/java/org/slf4j/bridge/SLF4JBridgeHandlerTest.java (original) +++ slf4j/trunk/jul-to-slf4j/src/test/java/org/slf4j/bridge/SLF4JBridgeHandlerTest.java Fri Oct 3 21:09:33 2008 @@ -1,5 +1,30 @@ +/* + * Copyright (c) 2004-2008 QOS.ch + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + package org.slf4j.bridge; +import java.text.MessageFormat; import java.util.ResourceBundle; import java.util.logging.Level; @@ -74,8 +99,8 @@ assertLevel(i++, org.apache.log4j.Level.WARN); assertLevel(i++, org.apache.log4j.Level.ERROR); } - - public void testLogWithResourceBundle(){ + + public void testLogWithResourceBundle() { SLF4JBridgeHandler.install(); String resourceBundleName = "org.slf4j.bridge.testLogStrings"; @@ -85,14 +110,61 @@ String msg = resourceKey; java.util.logging.Logger julResourceBundleLogger = java.util.logging.Logger - .getLogger("yay",resourceBundleName); + .getLogger("yay", resourceBundleName); julResourceBundleLogger.info(msg); assertEquals(1, listAppender.list.size()); LoggingEvent le = (LoggingEvent) listAppender.list.get(0); assertEquals(LOGGER_NAME, le.getLoggerName()); assertEquals(expectedMsg, le.getMessage()); + } + + public void testLogWithResourceBundleWithParameters() { + SLF4JBridgeHandler.install(); + + String resourceBundleName = "org.slf4j.bridge.testLogStrings"; + ResourceBundle bundle = ResourceBundle.getBundle(resourceBundleName); + + java.util.logging.Logger julResourceBundleLogger = java.util.logging.Logger + .getLogger("foo", resourceBundleName); + + String resourceKey1 = "resource_key_1"; + String expectedMsg1 = bundle.getString(resourceKey1); + julResourceBundleLogger.info(resourceKey1); // 1st log + + String resourceKey2 = "resource_key_2"; + Object[] params2 = new Object[] { "foo", "bar" }; + String expectedMsg2 = MessageFormat.format(bundle.getString(resourceKey2), + params2); + julResourceBundleLogger.log(Level.INFO, resourceKey2, params2); // 2nd log + + + String resourceKey3 = "invalidKey {0}"; + Object[] params3 = new Object[] { "John" }; + String expectedMsg3 = MessageFormat.format(resourceKey3, params3); + julResourceBundleLogger.log(Level.INFO, resourceKey3, params3); // 3rd log + + julLogger.log(Level.INFO, resourceKey3, params3); // 4th log + + assertEquals(4, listAppender.list.size()); + + LoggingEvent le = null; + + le = (LoggingEvent) listAppender.list.get(0); + assertEquals("foo", le.getLoggerName()); + assertEquals(expectedMsg1, le.getMessage()); + + le = (LoggingEvent) listAppender.list.get(1); + assertEquals("foo", le.getLoggerName()); + assertEquals(expectedMsg2, le.getMessage()); + + le = (LoggingEvent) listAppender.list.get(2); + assertEquals("foo", le.getLoggerName()); + assertEquals(expectedMsg3, le.getMessage()); + le = (LoggingEvent) listAppender.list.get(3); + assertEquals("yay", le.getLoggerName()); + assertEquals(expectedMsg3, le.getMessage()); } void assertLevel(int index, org.apache.log4j.Level expectedLevel) { Modified: slf4j/trunk/jul-to-slf4j/src/test/resources/org/slf4j/bridge/testLogStrings.properties ============================================================================== --- slf4j/trunk/jul-to-slf4j/src/test/resources/org/slf4j/bridge/testLogStrings.properties (original) +++ slf4j/trunk/jul-to-slf4j/src/test/resources/org/slf4j/bridge/testLogStrings.properties Fri Oct 3 21:09:33 2008 @@ -1 +1,3 @@ resource_key=msg +resource_key_1=msg +resource_key_2=msg {0} {1} _______________________________________________ dev mailing list dev@slf4j.org http://www.slf4j.org/mailman/listinfo/dev