Merge pull request #93 from raviu/master

[KARAF-6342] adding location disable configuration to karaf decanter co…
diff --git a/collector/log/src/main/cfg/org.apache.karaf.decanter.collector.log.cfg b/collector/log/src/main/cfg/org.apache.karaf.decanter.collector.log.cfg
index 7321fd1..527f805 100644
--- a/collector/log/src/main/cfg/org.apache.karaf.decanter.collector.log.cfg
+++ b/collector/log/src/main/cfg/org.apache.karaf.decanter.collector.log.cfg
@@ -33,3 +33,10 @@
 #fields.rename.level=severity
 #fields.rename.renderedMessage=logMessage
 #fields.remove.timestamp=true
+
+# logger categories that the log collector should disable collecting
+# location information for. By default all logs will contain location
+# information. To disable for all logs use .*
+#location.disabled=.*
+# To disable selectively, use the same format as ignored.categories
+#location.disabled=org.apache.karaf.decanter.appender.*
diff --git a/collector/log/src/main/java/org/apache/karaf/decanter/collector/log/LogAppender.java b/collector/log/src/main/java/org/apache/karaf/decanter/collector/log/LogAppender.java
index acf8884..542a82e 100644
--- a/collector/log/src/main/java/org/apache/karaf/decanter/collector/log/LogAppender.java
+++ b/collector/log/src/main/java/org/apache/karaf/decanter/collector/log/LogAppender.java
@@ -56,6 +56,7 @@
 
     private Dictionary<String, Object> properties;
     protected String[] ignoredCategories;
+    protected String[] locationDisabledCategories;
 
     @SuppressWarnings("unchecked")
     @Activate
@@ -64,6 +65,9 @@
         if (this.properties.get("ignored.categories") != null) {
             ignoredCategories = ((String)this.properties.get("ignored.categories")).split(",");
         }
+        if (this.properties.get("location.disabled") != null) {
+            locationDisabledCategories = ((String) this.properties.get("location.disabled")).split(",");
+        }
     }
     
     public void doAppend(PaxLoggingEvent event) {
@@ -82,7 +86,7 @@
     }
 
     private void appendInternal(PaxLoggingEvent event) throws Exception {
-        if (isIgnored(event.getLoggerName())) {
+        if (isIgnored(event.getLoggerName(), ignoredCategories)) {
             LOGGER.debug("{} logger is ignored by the log collector", event.getLoggerName());
             return;
         }
@@ -100,7 +104,9 @@
         data.put("level", event.getLevel().toString());
         data.put("renderedMessage", event.getRenderedMessage());
         data.put("MDC", event.getProperties());
-        putLocation(data, event.getLocationInformation());
+        if (locationDisabledCategories == null || !isIgnored(event.getLoggerName(), locationDisabledCategories)) {
+            putLocation(data, event.getLocationInformation());
+        }
         String[] throwableAr = event.getThrowableStrRep();
         if (throwableAr != null) {
             data.put("throwable", join(throwableAr));
@@ -144,12 +150,12 @@
         return builder.toString();
     }
 
-    protected boolean isIgnored(String loggerName) {
+    protected boolean isIgnored(String loggerName, String[] ignoreList) {
         if (loggerName == null) {
             return true;
         }
-        if (ignoredCategories != null) {
-            for (String cat : ignoredCategories) {
+        if (ignoreList != null) {
+            for (String cat : ignoreList) {
                 if (loggerName.matches(cat)) {
                     return true;
                 }
diff --git a/collector/log/src/test/java/org/apache/karaf/decanter/collector/log/LogAppenderTest.java b/collector/log/src/test/java/org/apache/karaf/decanter/collector/log/LogAppenderTest.java
index 9115472..1526445 100644
--- a/collector/log/src/test/java/org/apache/karaf/decanter/collector/log/LogAppenderTest.java
+++ b/collector/log/src/test/java/org/apache/karaf/decanter/collector/log/LogAppenderTest.java
@@ -16,10 +16,6 @@
  */
 package org.apache.karaf.decanter.collector.log;
 
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.CoreMatchers.not;
-import static org.junit.Assert.*;
-
 import org.junit.Test;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
@@ -34,6 +30,10 @@
 import java.util.List;
 import java.util.Properties;
 
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.CoreMatchers.not;
+import static org.junit.Assert.*;
+
 public class LogAppenderTest {
 
     @Test
@@ -63,9 +63,45 @@
         assertEquals("test", appender.ignoredCategories[1]);
         assertEquals("other", appender.ignoredCategories[2]);
 
-        assertFalse(appender.isIgnored("org.apache.karaf.decanter.other"));
-        assertTrue(appender.isIgnored("org.apache.karaf.decanter.collector.log"));
-        assertTrue(appender.isIgnored("org.apache.karaf.decanter.collector.log.LogEvent"));
+        assertFalse(appender.isIgnored("org.apache.karaf.decanter.other", appender.ignoredCategories));
+        assertTrue(appender.isIgnored("org.apache.karaf.decanter.collector.log", appender.ignoredCategories));
+        assertTrue(appender.isIgnored("org.apache.karaf.decanter.collector.log.LogEvent", appender.ignoredCategories));
+    }
+
+    @Test
+    public void testDisabledLocationCategories() {
+        LogAppender appender = new LogAppender();
+
+        ComponentContext componentContext = new ComponentContextMock();
+        componentContext.getProperties().put("location.disabled", "org.apache.karaf.decanter.collector.log.*,test,other");
+
+        appender.activate(componentContext);
+
+        assertEquals("org.apache.karaf.decanter.collector.log.*", appender.locationDisabledCategories[0]);
+        assertEquals("test", appender.locationDisabledCategories[1]);
+        assertEquals("other", appender.locationDisabledCategories[2]);
+
+        assertFalse(appender.isIgnored("org.apache.karaf.decanter.other", appender.locationDisabledCategories));
+        assertTrue(appender.isIgnored("org.apache.karaf.decanter.collector.log", appender.locationDisabledCategories));
+        assertTrue(appender.isIgnored("org.apache.karaf.decanter.collector.log.LogEvent", appender.locationDisabledCategories));
+    }
+
+    @Test
+    public void testDisabledLocationCategoriesAllWildcard() {
+        LogAppender appender = new LogAppender();
+
+        ComponentContext componentContext = new ComponentContextMock();
+        componentContext.getProperties().put("location.disabled", ".*,test,other");
+
+        appender.activate(componentContext);
+
+        assertEquals(".*", appender.locationDisabledCategories[0]);
+        assertEquals("test", appender.locationDisabledCategories[1]);
+        assertEquals("other", appender.locationDisabledCategories[2]);
+
+        assertTrue(appender.isIgnored("org.apache.karaf.decanter.other", appender.locationDisabledCategories));
+        assertTrue(appender.isIgnored("org.apache.karaf.decanter.collector.log", appender.locationDisabledCategories));
+        assertTrue(appender.isIgnored("org.apache.karaf.decanter.collector.log.LogEvent", appender.locationDisabledCategories));
     }
 
     private class ComponentContextMock implements ComponentContext {