FELIX-2443: MDC information on logging events can't be displayed in the console
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@957440 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/karaf/assembly/src/main/distribution/text/etc/org.apache.felix.karaf.log.cfg b/karaf/assembly/src/main/distribution/text/etc/org.apache.felix.karaf.log.cfg
index 5025a17..39437d0 100644
--- a/karaf/assembly/src/main/distribution/text/etc/org.apache.felix.karaf.log.cfg
+++ b/karaf/assembly/src/main/distribution/text/etc/org.apache.felix.karaf.log.cfg
@@ -19,4 +19,4 @@
#
size = 500
-pattern = %d{ABSOLUTE} | %-5.5p | %-16.16t | %-32.32c{1} | %-32.32C %4L | %m%n
+pattern = %d{ABSOLUTE} | %-5.5p | %-16.16t | %-32.32c{1} | %-32.32C %4L | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n
diff --git a/karaf/shell/log/src/main/java/org/apache/felix/karaf/shell/log/VmLogAppender.java b/karaf/shell/log/src/main/java/org/apache/felix/karaf/shell/log/VmLogAppender.java
index 5cffacd..cb67733 100644
--- a/karaf/shell/log/src/main/java/org/apache/felix/karaf/shell/log/VmLogAppender.java
+++ b/karaf/shell/log/src/main/java/org/apache/felix/karaf/shell/log/VmLogAppender.java
@@ -38,6 +38,7 @@
public void doAppend(PaxLoggingEvent event) {
if (events != null) {
+ event.getProperties(); // ensure MDC properties are copied
events.add(event);
}
}
diff --git a/karaf/shell/log/src/main/java/org/apache/felix/karaf/shell/log/layout/PatternParser.java b/karaf/shell/log/src/main/java/org/apache/felix/karaf/shell/log/layout/PatternParser.java
index ed6f4e6..f6507f8 100644
--- a/karaf/shell/log/src/main/java/org/apache/felix/karaf/shell/log/layout/PatternParser.java
+++ b/karaf/shell/log/src/main/java/org/apache/felix/karaf/shell/log/layout/PatternParser.java
@@ -18,7 +18,9 @@
import java.text.DateFormat;
import java.text.SimpleDateFormat;
+import java.util.Arrays;
import java.util.Date;
+import java.util.Map;
import org.apache.log4j.spi.LoggingEvent;
import org.ops4j.pax.logging.spi.PaxLocationInfo;
@@ -344,12 +346,12 @@
pc = new BasicPatternConverter(formattingInfo, NDC_CONVERTER);
//LogLog.debug("NDC converter.");
currentLiteral.setLength(0);
- break;
+ break;*/
case 'X':
String xOpt = extractOption();
pc = new MDCPatternConverter(formattingInfo, xOpt);
currentLiteral.setLength(0);
- break;*/
+ break;
default:
//LogLog.error("Unexpected char [" +c+"] at position "+i+" in conversion patterrn.");
pc = new LiteralPatternConverter(currentLiteral.toString());
@@ -523,5 +525,43 @@
return event.getLoggerName();
}
}
+
+ private class MDCPatternConverter extends PatternConverter {
+ String key;
+
+ MDCPatternConverter(FormattingInfo formattingInfo, String key) {
+ super(formattingInfo);
+ this.key = key;
+ }
+
+ public
+ String convert(PaxLoggingEvent event) {
+ if (key == null) {
+ StringBuffer buf = new StringBuffer("{");
+ Map properties = event.getProperties();
+ if (properties.size() > 0) {
+ Object[] keys = properties.keySet().toArray();
+ Arrays.sort(keys);
+ for (int i = 0; i < keys.length; i++) {
+ buf.append('{');
+ buf.append(keys[i]);
+ buf.append(',');
+ buf.append(properties.get(keys[i]));
+ buf.append('}');
+ }
+ }
+ buf.append('}');
+ return buf.toString();
+ } else {
+ Object val = event.getProperties().get(key);
+ if(val == null) {
+ return null;
+ } else {
+ return val.toString();
+ }
+ }
+ }
+
+ }
}