You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ch...@apache.org on 2015/07/27 09:10:42 UTC
svn commit: r1692823 - in /sling/trunk/bundles/commons/log/src:
main/java/org/apache/sling/commons/log/logback/internal/FilterTracker.java
test/java/org/apache/sling/commons/log/logback/integration/ITFilterSupport.java
Author: chetanm
Date: Mon Jul 27 07:10:42 2015
New Revision: 1692823
URL: http://svn.apache.org/r1692823
Log:
SLING-4907 - Provide support for registering Filter with all configured appenders
Modified:
sling/trunk/bundles/commons/log/src/main/java/org/apache/sling/commons/log/logback/internal/FilterTracker.java
sling/trunk/bundles/commons/log/src/test/java/org/apache/sling/commons/log/logback/integration/ITFilterSupport.java
Modified: sling/trunk/bundles/commons/log/src/main/java/org/apache/sling/commons/log/logback/internal/FilterTracker.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/commons/log/src/main/java/org/apache/sling/commons/log/logback/internal/FilterTracker.java?rev=1692823&r1=1692822&r2=1692823&view=diff
==============================================================================
--- sling/trunk/bundles/commons/log/src/main/java/org/apache/sling/commons/log/logback/internal/FilterTracker.java (original)
+++ sling/trunk/bundles/commons/log/src/main/java/org/apache/sling/commons/log/logback/internal/FilterTracker.java Mon Jul 27 07:10:42 2015
@@ -23,6 +23,7 @@ import ch.qos.logback.classic.LoggerCont
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.Appender;
import ch.qos.logback.core.filter.Filter;
+import ch.qos.logback.core.util.ContextUtil;
import org.apache.sling.commons.log.logback.internal.util.Util;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
@@ -38,9 +39,11 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
public class FilterTracker extends ServiceTracker implements LogbackResetListener{
+ private static final String ALL_APPENDERS = "*";
private static final String PROP_APPENDER = "appenders";
private final LoggerContext loggerContext;
+ private final ContextUtil contextUtil;
private final LogbackManager logbackManager;
private Map<ServiceReference, FilterInfo> filters = new ConcurrentHashMap<ServiceReference, FilterInfo>();
@@ -48,6 +51,7 @@ public class FilterTracker extends Servi
super(context, createFilter(), null);
this.logbackManager = logbackManager;
this.loggerContext = logbackManager.getLoggerContext();
+ this.contextUtil = new ContextUtil(loggerContext);
super.open();
}
@@ -61,7 +65,7 @@ public class FilterTracker extends Servi
FilterInfo fi = new FilterInfo(reference, f);
filters.put(reference, fi);
attachFilter(fi, getAppenderMap());
- return fi;
+ return f;
}
@SuppressWarnings("unchecked")
@@ -106,25 +110,36 @@ public class FilterTracker extends Servi
//~-----------------------------------Internal Methods
- private void attachFilter(FilterInfo fi, Map<String,Appender<ILoggingEvent>> appenderMap) {
- //TODO Support attaching a filter to all appender if the appenerName list contains '*'
- for(String appenderName : fi.appenderNames){
+ private void attachFilter(FilterInfo fi, Map<String, Appender<ILoggingEvent>> appenderMap) {
+ if (fi.registerAgainstAllAppenders){
+ for (Appender<ILoggingEvent> appender : appenderMap.values()){
+ attachFilter(appender, fi);
+ }
+ return;
+ }
+ for (String appenderName : fi.appenderNames) {
Appender<ILoggingEvent> appender = appenderMap.get(appenderName);
- if(appender != null){
- attachFilter(appender,fi);
- }else{
- //TODO Log warning
+ if (appender != null) {
+ attachFilter(appender, fi);
+ } else {
+ contextUtil.addWarn("No appender with name [" + appenderName + "] found " +
+ "to which " + fi.filter + " can be attached");
}
}
}
- private void detachFilter(FilterInfo fi,Map<String,Appender<ILoggingEvent>> appenderMap) {
- for(String appenderName : fi.appenderNames){
+ private void detachFilter(FilterInfo fi, Map<String, Appender<ILoggingEvent>> appenderMap) {
+ if (fi.registerAgainstAllAppenders){
+ for (Appender<ILoggingEvent> appender : appenderMap.values()){
+ detachFilter(appender, fi);
+ }
+ return;
+ }
+
+ for (String appenderName : fi.appenderNames) {
Appender<ILoggingEvent> appender = appenderMap.get(appenderName);
- if(appender != null){
+ if (appender != null) {
detachFilter(appender, fi);
- }else{
- //TODO Log warning
}
}
}
@@ -168,6 +183,7 @@ public class FilterTracker extends Servi
final ServiceReference reference;
final Filter<ILoggingEvent> filter;
final Set<String> appenderNames;
+ final boolean registerAgainstAllAppenders;
FilterInfo(ServiceReference reference, Filter<ILoggingEvent> filter) {
this.reference = reference;
@@ -175,6 +191,7 @@ public class FilterTracker extends Servi
this.appenderNames = Collections.unmodifiableSet(
new HashSet<String>(Util.toList(reference.getProperty(PROP_APPENDER))));
+ this.registerAgainstAllAppenders = appenderNames.contains(ALL_APPENDERS);
}
public void stop(){
Modified: sling/trunk/bundles/commons/log/src/test/java/org/apache/sling/commons/log/logback/integration/ITFilterSupport.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/commons/log/src/test/java/org/apache/sling/commons/log/logback/integration/ITFilterSupport.java?rev=1692823&r1=1692822&r2=1692823&view=diff
==============================================================================
--- sling/trunk/bundles/commons/log/src/test/java/org/apache/sling/commons/log/logback/integration/ITFilterSupport.java (original)
+++ sling/trunk/bundles/commons/log/src/test/java/org/apache/sling/commons/log/logback/integration/ITFilterSupport.java Mon Jul 27 07:10:42 2015
@@ -59,7 +59,7 @@ public class ITFilterSupport extends Log
@Test
public void testTurboFilter() throws Exception {
- TestAppender ta = registerAppender("turbofilter");
+ TestAppender ta = registerAppender("turbofilter", "TestAppender");
org.slf4j.Logger bar = LoggerFactory.getLogger("turbofilter.foo.bar");
assertTrue(bar.isDebugEnabled());
@@ -98,7 +98,7 @@ public class ITFilterSupport extends Log
@Test
public void testNormalFilter() {
- TestAppender ta = registerAppender("filter");
+ TestAppender ta = registerAppender("filter", "TestAppender");
org.slf4j.Logger bar = LoggerFactory.getLogger("filter.foo.bar");
assertTrue(bar.isDebugEnabled());
@@ -135,11 +135,43 @@ public class ITFilterSupport extends Log
bar.debug("Test");
assertEquals(1, ta.events.size());
+ }
+ @Test
+ public void filterUsingWildcard() throws Exception{
+ TestAppender ta1 = registerAppender("filterUsingWildcard1", "app1");
+ TestAppender ta2 = registerAppender("filterUsingWildcard2", "app2");
+
+ //Set additivity to false to prevent other appender like CONSOLE from
+ //interfering
+ org.slf4j.Logger baz1 = LoggerFactory.getLogger("filterUsingWildcard1.foo.baz");
+ ((ch.qos.logback.classic.Logger)baz1).setAdditive(false);
+ org.slf4j.Logger baz2 = LoggerFactory.getLogger("filterUsingWildcard2.foo.baz");
+ ((ch.qos.logback.classic.Logger)baz2).setAdditive(false);
+
+ final List<String> msgs = new ArrayList<String>();
+ Filter stf = new Filter<ILoggingEvent>(){
+ @Override
+ public FilterReply decide(ILoggingEvent event) {
+ msgs.add(event.getMessage());
+ return FilterReply.NEUTRAL;
+ }
+ };
+
+ Dictionary<String, Object> props = new Hashtable<String, Object>();
+ props.put("appenders", "*");
+ ServiceRegistration sr = bundleContext.registerService(Filter.class.getName(), stf, props);
+
+ delay();
+
+ baz1.info("baz1-1");
+ baz2.info("baz2-1");
+
+ assertEquals(2, msgs.size());
}
- private TestAppender registerAppender(String prefix) {
- TestAppender ta = new TestAppender();
+ private TestAppender registerAppender(String prefix, String appenderName) {
+ TestAppender ta = new TestAppender(appenderName);
Dictionary<String, Object> props = new Hashtable<String, Object>();
String[] loggers = {
@@ -181,6 +213,11 @@ public class ITFilterSupport extends Log
private static class TestAppender extends AppenderBase<ILoggingEvent> {
final List<ILoggingEvent> events = new ArrayList<ILoggingEvent>();
+ final String name;
+
+ public TestAppender(String name) {
+ this.name = name;
+ }
@Override
protected void append(ILoggingEvent eventObject) {
@@ -189,7 +226,7 @@ public class ITFilterSupport extends Log
@Override
public String getName() {
- return "TestAppender";
+ return name;
}
}
}