diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/pattern/PropertyConverter.java b/logback-classic/src/main/java/ch/qos/logback/classic/pattern/PropertyConverter.java index f70b098..4e77a54 100644 --- a/logback-classic/src/main/java/ch/qos/logback/classic/pattern/PropertyConverter.java +++ b/logback-classic/src/main/java/ch/qos/logback/classic/pattern/PropertyConverter.java @@ -18,30 +18,39 @@ import java.util.Map; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.classic.spi.LoggerContextVO; +import static ch.qos.logback.core.util.OptionHelper.extractDefaultReplacement; + public final class PropertyConverter extends ClassicConverter { - String key; + private String key; + private String defaultValue = ""; - public void start() { - String optStr = getFirstOption(); - if (optStr != null) { - key = optStr; - super.start(); + public void start() { + String[] keyInfo = extractDefaultReplacement(getFirstOption()); + key = keyInfo[0]; + if (keyInfo[1] != null) { + defaultValue = keyInfo[1]; + } + super.start(); } - } - - public String convert(ILoggingEvent event) { - if (key == null) { - return "Property_HAS_NO_KEY"; - } else { - LoggerContextVO lcvo = event.getLoggerContextVO(); - Map map = lcvo.getPropertyMap(); - String val = map.get(key); - if (val != null) { - return val; - } else { - return System.getProperty(key); - } + + public String convert(ILoggingEvent event) { + if (key == null) { + return "Property_HAS_NO_KEY"; + } else { + LoggerContextVO lcvo = event.getLoggerContextVO(); + Map map = lcvo.getPropertyMap(); + String val = map.get(key); + if (val != null) { + return val; + } else { + val = System.getProperty(key); + if (val != null) { + return val; + } + } + return defaultValue; + } } - } + } diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/pattern/PropertyConverterTest.java b/logback-classic/src/test/java/ch/qos/logback/classic/pattern/PropertyConverterTest.java new file mode 100644 index 0000000..a964595 --- /dev/null +++ b/logback-classic/src/test/java/ch/qos/logback/classic/pattern/PropertyConverterTest.java @@ -0,0 +1,57 @@ +package ch.qos.logback.classic.pattern; + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.classic.spi.LoggingEvent; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import java.util.Arrays; + +import static org.junit.Assert.assertEquals; + +public class PropertyConverterTest { + LoggerContext lc; + PropertyConverter converter; + + @Before + public void setUp() throws Exception { + lc = new LoggerContext(); + converter = new PropertyConverter(); + converter.setOptionList(Arrays.asList("foo:-bar")); + converter.start(); + } + + @After + public void tearDown() throws Exception { + lc = null; + converter.stop(); + converter = null; + } + + @Test + public void testDefault() { + ILoggingEvent le = createLoggingEvent(); + String result = converter.convert(le); + assertEquals("Got the default", "bar", result); + } + + @Test + public void testParam() { + ILoggingEvent le = createLoggingEvent(); + le.getLoggerContextVO().getPropertyMap().put("foo", "goo"); + String result = converter.convert(le); + assertEquals("Got the param", "goo", result); + } + + private ILoggingEvent createLoggingEvent() { + return new LoggingEvent(this.getClass().getName(), lc + .getLogger(Logger.ROOT_LOGGER_NAME), Level.DEBUG, "test message", null, + null); + } + + +}