QPID-8232: [Broker-J] Support ability to turn off logger
diff --git a/broker-plugins/logging-logback/src/main/java/org/apache/qpid/server/logging/logback/CompositeFilter.java b/broker-plugins/logging-logback/src/main/java/org/apache/qpid/server/logging/logback/CompositeFilter.java
index 752c80d..8438876 100644
--- a/broker-plugins/logging-logback/src/main/java/org/apache/qpid/server/logging/logback/CompositeFilter.java
+++ b/broker-plugins/logging-logback/src/main/java/org/apache/qpid/server/logging/logback/CompositeFilter.java
@@ -67,11 +67,16 @@
FilterReply reply = DENY;
for(Filter<ILoggingEvent> filter : _filterList)
{
- reply = filter.decide(event);
- if (reply == DENY || reply == ACCEPT)
+ FilterReply filterReply = filter.decide(event);
+ if (filterReply == DENY)
{
+ reply = filterReply;
break;
}
+ if (filterReply == ACCEPT)
+ {
+ reply = filterReply;
+ }
}
if(reply == ACCEPT)
{
diff --git a/broker-plugins/logging-logback/src/main/java/org/apache/qpid/server/logging/logback/LoggerNameAndLevelFilter.java b/broker-plugins/logging-logback/src/main/java/org/apache/qpid/server/logging/logback/LoggerNameAndLevelFilter.java
index 825a01d..a2c620a 100644
--- a/broker-plugins/logging-logback/src/main/java/org/apache/qpid/server/logging/logback/LoggerNameAndLevelFilter.java
+++ b/broker-plugins/logging-logback/src/main/java/org/apache/qpid/server/logging/logback/LoggerNameAndLevelFilter.java
@@ -70,7 +70,7 @@
@Override
public FilterReply decide(final ILoggingEvent event)
{
- return event.getLevel().isGreaterOrEqual(_level) ? FilterReply.ACCEPT : FilterReply.NEUTRAL;
+ return getFilterReply(event.getLevel());
}
};
}
@@ -82,7 +82,11 @@
@Override
public FilterReply decide(final ILoggingEvent event)
{
- return event.getLevel().isGreaterOrEqual(_level) && event.getLoggerName().startsWith(prefixName) ? FilterReply.ACCEPT : FilterReply.NEUTRAL;
+ if (event.getLoggerName().startsWith(prefixName))
+ {
+ return getFilterReply(event.getLevel());
+ }
+ return FilterReply.NEUTRAL;
}
};
}
@@ -93,12 +97,32 @@
@Override
public FilterReply decide(final ILoggingEvent event)
{
- return event.getLevel().isGreaterOrEqual(_level) && event.getLoggerName().equals(loggerName) ? FilterReply.ACCEPT : FilterReply.NEUTRAL;
+ if (event.getLoggerName().equals(loggerName))
+ {
+ return getFilterReply(event.getLevel());
+ }
+ return FilterReply.NEUTRAL;
}
};
}
}
+ private FilterReply getFilterReply(final Level eventLevel)
+ {
+ if (_level == Level.OFF)
+ {
+ return FilterReply.DENY;
+ }
+ else if (eventLevel.isGreaterOrEqual(_level))
+ {
+ return FilterReply.ACCEPT;
+ }
+ else
+ {
+ return FilterReply.NEUTRAL;
+ }
+ }
+
@Override
public Level getEffectiveLevel(final Logger logger)
{
diff --git a/broker-plugins/logging-logback/src/test/java/org/apache/qpid/server/logging/logback/BrokerLoggerTest.java b/broker-plugins/logging-logback/src/test/java/org/apache/qpid/server/logging/logback/BrokerLoggerTest.java
index eee1c43..57dedd9 100644
--- a/broker-plugins/logging-logback/src/test/java/org/apache/qpid/server/logging/logback/BrokerLoggerTest.java
+++ b/broker-plugins/logging-logback/src/test/java/org/apache/qpid/server/logging/logback/BrokerLoggerTest.java
@@ -245,13 +245,46 @@
errorFilter.delete();
}
+ @Test
+ public void testTurningLoggingOff()
+ {
+ Map<String, Object> fooRuleAttributes =
+ createBrokerNameAndLevelLogInclusionRuleAttributes("fooRule",
+ "org.apache.qpid.foo.*",
+ LogLevel.INFO);
+ Map<String, Object> barRuleAttributes =
+ createBrokerNameAndLevelLogInclusionRuleAttributes("barRule",
+ "org.apache.qpid.foo.bar",
+ LogLevel.OFF);
+
+ _brokerLogger.createChild(BrokerLogInclusionRule.class, fooRuleAttributes);
+ _brokerLogger.createChild(BrokerLogInclusionRule.class, barRuleAttributes);
+
+ Logger barLogger = LoggerFactory.getLogger("org.apache.qpid.foo.bar");
+ barLogger.warn("bar message");
+
+ Logger fooLogger = LoggerFactory.getLogger("org.apache.qpid.foo.foo");
+ fooLogger.warn("foo message");
+
+ assertLoggedEvent(_loggerAppender, false, "bar message", barLogger.getName(), Level.WARN);
+ assertLoggedEvent(_loggerAppender, false, "bar message", fooLogger.getName(), Level.WARN);
+ assertLoggedEvent(_loggerAppender, true, "foo message", fooLogger.getName(), Level.WARN);
+ }
+
private Map<String, Object> createBrokerNameAndLevelLogInclusionRuleAttributes(final String loggerName,
final LogLevel logLevel)
{
+ return createBrokerNameAndLevelLogInclusionRuleAttributes("test", loggerName, logLevel);
+ }
+
+ private Map<String, Object> createBrokerNameAndLevelLogInclusionRuleAttributes(final String ruleName,
+ final String loggerName,
+ final LogLevel logLevel)
+ {
Map<String, Object> attributes = new HashMap<>();
attributes.put(BrokerNameAndLevelLogInclusionRule.LOGGER_NAME, loggerName);
attributes.put(BrokerNameAndLevelLogInclusionRule.LEVEL, logLevel);
- attributes.put(BrokerNameAndLevelLogInclusionRule.NAME, "test");
+ attributes.put(BrokerNameAndLevelLogInclusionRule.NAME, ruleName);
attributes.put(ConfiguredObject.TYPE, BrokerNameAndLevelLogInclusionRule.TYPE);
return attributes;
}
diff --git a/broker-plugins/logging-logback/src/test/java/org/apache/qpid/server/logging/logback/CompositeFilterTest.java b/broker-plugins/logging-logback/src/test/java/org/apache/qpid/server/logging/logback/CompositeFilterTest.java
index ac5936c..c6dcf1a 100644
--- a/broker-plugins/logging-logback/src/test/java/org/apache/qpid/server/logging/logback/CompositeFilterTest.java
+++ b/broker-plugins/logging-logback/src/test/java/org/apache/qpid/server/logging/logback/CompositeFilterTest.java
@@ -80,18 +80,18 @@
LogBackLogInclusionRule neutral = createRule(FilterReply.NEUTRAL);
compositeFilter.addLogInclusionRule(neutral);
- LogBackLogInclusionRule deny = createRule(FilterReply.DENY);
- compositeFilter.addLogInclusionRule(deny);
-
LogBackLogInclusionRule accept = createRule(FilterReply.ACCEPT);
compositeFilter.addLogInclusionRule(accept);
+ LogBackLogInclusionRule deny = createRule(FilterReply.DENY);
+ compositeFilter.addLogInclusionRule(deny);
+
FilterReply reply = compositeFilter.decide(mock(ILoggingEvent.class));
assertEquals("Unexpected reply", FilterReply.DENY, reply);
verify(neutral.asFilter()).decide(any(ILoggingEvent.class));
verify(deny.asFilter()).decide(any(ILoggingEvent.class));
- verify(accept.asFilter(), never()).decide(any(ILoggingEvent.class));
+ verify(accept.asFilter()).decide(any(ILoggingEvent.class));
}
@Test
diff --git a/broker-plugins/logging-logback/src/test/java/org/apache/qpid/server/logging/logback/LoggerNameAndLevelFilterTest.java b/broker-plugins/logging-logback/src/test/java/org/apache/qpid/server/logging/logback/LoggerNameAndLevelFilterTest.java
index 73e4cca..fb6ceab 100644
--- a/broker-plugins/logging-logback/src/test/java/org/apache/qpid/server/logging/logback/LoggerNameAndLevelFilterTest.java
+++ b/broker-plugins/logging-logback/src/test/java/org/apache/qpid/server/logging/logback/LoggerNameAndLevelFilterTest.java
@@ -145,4 +145,22 @@
FilterReply.NEUTRAL,
filter.decide(event));
}
+
+ @Test
+ public void testDecideForTurnedOffLogger() throws Exception
+ {
+ LoggerNameAndLevelFilter filter = new LoggerNameAndLevelFilter("org.apache.qpid", Level.OFF);
+
+ ILoggingEvent event = mock(ILoggingEvent.class);
+ when(event.getLevel()).thenReturn(Level.WARN);
+ when(event.getLoggerName()).thenReturn("org.apache.qpid");
+ assertEquals("Unexpected reply for matching log level and same logger name",
+ FilterReply.DENY,
+ filter.decide(event));
+
+ when(event.getLoggerName()).thenReturn("org.apache.qpid.foo");
+ assertEquals("Unexpected reply for matching log level and not same logger name",
+ FilterReply.NEUTRAL,
+ filter.decide(event));
+ }
}