
Author: seb Date: Thu Jan 18 17:00:43 2007 New Revision: 1250 Added: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/pattern/MarkerConverter.java logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/pattern/MarkerConverterTest.java Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/PatternLayout.java Log: Added and tested new MarkerConverter class Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/PatternLayout.java ============================================================================== --- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/PatternLayout.java (original) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/PatternLayout.java Thu Jan 18 17:00:43 2007 @@ -21,6 +21,7 @@ import ch.qos.logback.classic.pattern.LineSeparatorConverter; import ch.qos.logback.classic.pattern.LoggerConverter; import ch.qos.logback.classic.pattern.MDCConverter; +import ch.qos.logback.classic.pattern.MarkerConverter; import ch.qos.logback.classic.pattern.MessageConverter; import ch.qos.logback.classic.pattern.MethodOfCallerConverter; import ch.qos.logback.classic.pattern.NopThrowableInformationConverter; @@ -100,6 +101,8 @@ NopThrowableInformationConverter.class.getName()); defaultConverterMap.put("caller", CallerDataConverter.class.getName()); + + defaultConverterMap.put("marker", MarkerConverter.class.getName()); defaultConverterMap.put("n", LineSeparatorConverter.class.getName()); } Added: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/pattern/MarkerConverter.java ============================================================================== --- (empty file) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/pattern/MarkerConverter.java Thu Jan 18 17:00:43 2007 @@ -0,0 +1,47 @@ +package ch.qos.logback.classic.pattern; + +import java.util.Iterator; + +import org.slf4j.Marker; + +import ch.qos.logback.classic.spi.LoggingEvent; + +/** + * Return the event's marker value(s). + * + * @author Sébastien Pennec + */ +public class MarkerConverter extends ClassicConverter { + + private static String EMPTY = ""; + private static String OPEN = "[ "; + private static String CLOSE = " ]"; + private static String SEP = ", "; + + public String convert(LoggingEvent le) { + Marker marker = le.getMarker(); + if (marker == null) { + return EMPTY; + } + + if (!marker.hasChildren()) { + return marker.getName(); + } + + Iterator it = marker.iterator(); + Marker child; + StringBuffer sb = new StringBuffer(marker.getName()); + sb.append(' ').append(OPEN); + while(it.hasNext()) { + child = (Marker)it.next(); + sb.append(child.getName()); + if (it.hasNext()) { + sb.append(SEP); + } + } + sb.append(CLOSE); + + return sb.toString(); + } + +} Added: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/pattern/MarkerConverterTest.java ============================================================================== --- (empty file) +++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/pattern/MarkerConverterTest.java Thu Jan 18 17:00:43 2007 @@ -0,0 +1,69 @@ +package ch.qos.logback.classic.pattern; + +import junit.framework.TestCase; + +import org.slf4j.Marker; +import org.slf4j.MarkerFactory; + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.classic.spi.LoggingEvent; + +public class MarkerConverterTest extends TestCase { + + LoggerContext lc; + Marker marker; + MarkerConverter converter; + + public void setUp() throws Exception { + lc = new LoggerContext(); + converter = new MarkerConverter(); + converter.start(); + } + + public void tearDown() throws Exception { + lc = null; + converter.stop(); + converter = null; + } + + public void testWithNullMarker() { + marker = null; + String result = converter.convert(createLoggingEvent()); + assertEquals("", result); + } + + public void testWithMarker() { + String name = "test"; + marker = MarkerFactory.getMarker(name); + String result = converter.convert(createLoggingEvent()); + assertEquals(name, result); + } + + public void testWithOneChildMarker() { + marker = MarkerFactory.getMarker("test"); + marker.add(MarkerFactory.getMarker("child")); + + String result = converter.convert(createLoggingEvent()); + + assertEquals("test [ child ]", result); + } + + public void testWithSeveralChildMarker() { + marker = MarkerFactory.getMarker("testParent"); + marker.add(MarkerFactory.getMarker("child1")); + marker.add(MarkerFactory.getMarker("child2")); + marker.add(MarkerFactory.getMarker("child3")); + + String result = converter.convert(createLoggingEvent()); + + assertEquals("testParent [ child1, child2, child3 ]", result); + } + + private LoggingEvent createLoggingEvent() { + LoggingEvent le = new LoggingEvent(this.getClass().getName(), lc.getLogger(LoggerContext.ROOT_NAME), + Level.DEBUG, "test message", null, null); + le.setMarker(marker); + return le; + } +}