From 654a85e7963634342b5f9ae81c019d6baa3b2803 Mon Sep 17 00:00:00 2001 From: Robert Gemmell Date: Thu, 26 Aug 2010 15:03:56 +0000 Subject: QPID-2802: move Log4jMessageLogger and update its test to account for use of per-message log heirarchies rather than a single default Logger git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@989735 13f79535-47bb-0310-9956-ffa450edef68 --- .../qpid/server/logging/Log4jMessageLogger.java | 74 ++++++++++++ .../logging/rawloggers/Log4jMessageLogger.java | 77 ------------ .../qpid/server/registry/ApplicationRegistry.java | 2 +- .../server/logging/Log4jMessageLoggerTest.java | 134 +++++++++++++-------- 4 files changed, 158 insertions(+), 129 deletions(-) create mode 100644 java/broker/src/main/java/org/apache/qpid/server/logging/Log4jMessageLogger.java delete mode 100644 java/broker/src/main/java/org/apache/qpid/server/logging/rawloggers/Log4jMessageLogger.java (limited to 'java') diff --git a/java/broker/src/main/java/org/apache/qpid/server/logging/Log4jMessageLogger.java b/java/broker/src/main/java/org/apache/qpid/server/logging/Log4jMessageLogger.java new file mode 100644 index 0000000000..a0285ebfc4 --- /dev/null +++ b/java/broker/src/main/java/org/apache/qpid/server/logging/Log4jMessageLogger.java @@ -0,0 +1,74 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * + */ +package org.apache.qpid.server.logging; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.apache.qpid.server.configuration.ServerConfiguration; + +public class Log4jMessageLogger extends AbstractRootMessageLogger +{ + public static final Level LEVEL = Level.toLevel("INFO"); + + public Log4jMessageLogger() + { + super(); + } + + public Log4jMessageLogger(ServerConfiguration config) + { + super(config); + } + + @Override + public boolean isMessageEnabled(LogActor actor, LogSubject subject, String logHierarchy) + { + return isMessageEnabled(actor, logHierarchy); + } + + @Override + public boolean isMessageEnabled(LogActor actor, String logHierarchy) + { + if(isEnabled()) + { + Logger logger = Logger.getLogger(logHierarchy); + return logger.isEnabledFor(LEVEL); + } + else + { + return false; + } + } + + @Override + public void rawMessage(String message, String logHierarchy) + { + rawMessage(message, null, logHierarchy); + } + + @Override + public void rawMessage(String message, Throwable throwable, String logHierarchy) + { + Logger logger = Logger.getLogger(logHierarchy); + + logger.log(LEVEL, message, throwable); + } +} diff --git a/java/broker/src/main/java/org/apache/qpid/server/logging/rawloggers/Log4jMessageLogger.java b/java/broker/src/main/java/org/apache/qpid/server/logging/rawloggers/Log4jMessageLogger.java deleted file mode 100644 index fffd16a812..0000000000 --- a/java/broker/src/main/java/org/apache/qpid/server/logging/rawloggers/Log4jMessageLogger.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - * - */ -package org.apache.qpid.server.logging.rawloggers; - -import org.apache.log4j.Level; -import org.apache.log4j.Logger; -import org.apache.qpid.server.configuration.ServerConfiguration; -import org.apache.qpid.server.logging.AbstractRootMessageLogger; -import org.apache.qpid.server.logging.LogActor; -import org.apache.qpid.server.logging.LogSubject; - -public class Log4jMessageLogger extends AbstractRootMessageLogger -{ - public static final Level LEVEL = Level.toLevel("INFO"); - - public Log4jMessageLogger() - { - super(); - } - - public Log4jMessageLogger(ServerConfiguration config) - { - super(config); - } - - @Override - public boolean isMessageEnabled(LogActor actor, LogSubject subject, String logHierarchy) - { - return isMessageEnabled(actor, logHierarchy); - } - - @Override - public boolean isMessageEnabled(LogActor actor, String logHierarchy) - { - if(isEnabled()) - { - Logger logger = Logger.getLogger(logHierarchy); - return logger.isEnabledFor(LEVEL); - } - else - { - return false; - } - } - - @Override - public void rawMessage(String message, String logHierarchy) - { - rawMessage(message, null, logHierarchy); - } - - @Override - public void rawMessage(String message, Throwable throwable, String logHierarchy) - { - Logger logger = Logger.getLogger(logHierarchy); - - logger.log(LEVEL, message, throwable); - } -} diff --git a/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java b/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java index 5cddfda059..e9d1ead4f7 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java +++ b/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java @@ -38,12 +38,12 @@ import org.apache.qpid.server.configuration.ServerConfiguration; import org.apache.qpid.server.configuration.SystemConfig; import org.apache.qpid.server.configuration.SystemConfigImpl; import org.apache.qpid.server.configuration.VirtualHostConfiguration; +import org.apache.qpid.server.logging.Log4jMessageLogger; import org.apache.qpid.server.logging.RootMessageLogger; import org.apache.qpid.server.logging.AbstractRootMessageLogger; import org.apache.qpid.server.logging.actors.BrokerActor; import org.apache.qpid.server.logging.actors.CurrentActor; import org.apache.qpid.server.logging.messages.BrokerMessages; -import org.apache.qpid.server.logging.rawloggers.Log4jMessageLogger; import org.apache.qpid.server.management.ManagedObjectRegistry; import org.apache.qpid.server.management.NoopManagedObjectRegistry; import org.apache.qpid.server.plugins.PluginManager; diff --git a/java/broker/src/test/java/org/apache/qpid/server/logging/Log4jMessageLoggerTest.java b/java/broker/src/test/java/org/apache/qpid/server/logging/Log4jMessageLoggerTest.java index 5ccff7ec08..a845bff9ce 100644 --- a/java/broker/src/test/java/org/apache/qpid/server/logging/Log4jMessageLoggerTest.java +++ b/java/broker/src/test/java/org/apache/qpid/server/logging/Log4jMessageLoggerTest.java @@ -20,23 +20,21 @@ */ package org.apache.qpid.server.logging; +import java.io.IOException; +import java.util.LinkedList; +import java.util.List; + import junit.framework.TestCase; + import org.apache.log4j.AppenderSkeleton; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.spi.LoggingEvent; -import org.apache.qpid.server.logging.rawloggers.Log4jMessageLogger; - -import java.io.File; -import java.io.IOException; -import java.util.LinkedList; -import java.util.List; +import org.apache.qpid.server.logging.actors.BrokerActor; /** Test that the Log4jMessageLogger defaults behave as expected */ public class Log4jMessageLoggerTest extends TestCase { - private File _lodgfile; - Level _rootLevel; Log4jTestAppender _appender; @@ -75,69 +73,103 @@ public class Log4jMessageLoggerTest extends TestCase } /** - * Verify that the default configuraion of Log4jMessageLogger will - * log a message. - * + * Verify that the Log4jMessageLogger successfully logs a message. */ - public void testDefaultLogsMessage() + public void testLoggedMessage() { - // Create a logger to test - Log4jMessageLogger logger = new Log4jMessageLogger(); + Log4jMessageLogger msgLogger = new Log4jMessageLogger(); + assertTrue("Expected message logger to be enabled", msgLogger.isEnabled()); + + testLoggedMessage(msgLogger, true, getName()); + } + /** + * Verify that for the given Log4jMessageLogger, after generating a message for the given + * log hierarchy that the outcome is as expected. + */ + private String testLoggedMessage(Log4jMessageLogger logger, boolean logExpected, String hierarchy) + { //Create Message for test String message = "testDefaults"; // Log the message - logger.rawMessage(message, null, null); + logger.rawMessage(message, hierarchy); - verifyLogPresent(message); + if(logExpected) + { + verifyLogPresent(message); + } + else + { + verifyNoLog(message); + } + + return message; } /** - * This test verifies that the Log4jMessageLogger does not inherit a logging - * level from the RootLogger. The Log4jMessageLogger default of INFO - * will result in logging being presented. - * + * Test that specifying different log hierarchies to be used works as expected. + *

+ * Test this by using one hierarchy and verifying it succeeds, then disabling it and + * confirming this takes effect, and finally that using another hierarchy still succeeds. */ - public void testLoggerDoesNotInheritRootLevel() + public void testMultipleHierarchyUsage() { - //Set default logger level to off - Logger.getRootLogger().setLevel(Level.OFF); - - testDefaultLogsMessage(); + String loggerName1 = getName() + ".TestLogger1"; + String loggerName2 = getName() + ".TestLogger2"; + + // Create a message logger to test + Log4jMessageLogger msgLogger = new Log4jMessageLogger(); + assertTrue("Expected message logger to be enabled", msgLogger.isEnabled()); + + //verify that using this hierarchy the message gets logged ok + String message = testLoggedMessage(msgLogger, true, loggerName1); + + //now disable that hierarchy in log4j + Logger.getLogger(loggerName1).setLevel(Level.OFF); + + //clear the previous message from the test appender + _appender.close(); + verifyNoLog(message); + + //verify that the hierarchy disabling took effect + testLoggedMessage(msgLogger, false, loggerName1); + + //now ensure that using a new hierarchy results in the message being output + testLoggedMessage(msgLogger, true, loggerName2); } - //TODO: use 2 different loggers rather than the default which isnt used anymore /** - * Test that changing the logger works. + * Test that log4j can be used to manipulate on a per-hierarchy(and thus message) basis + * whether a particular status message is enabled. *

- * Test this by setting the default logger level to off which has been - * verified to work by test 'testDefaultsLevelObeyed' - * + * Test this by using two hierarchies, setting one off and one on (info) via log4j directly, + * then confirming this gives the expected isMessageEnabled() result. Then reverse the log4j + * Levels for the Logger's and ensure the results change as expected. */ - public void testDefaultLoggerAdjustment() + public void testEnablingAndDisablingMessages() { - String loggerName = "TestLogger"; - // Create a logger to test - Log4jMessageLogger logger = new Log4jMessageLogger(); - - //Create Message for test - String message = "testDefaults"; - - //Disable the default Log4jMessageLogger logger - Level originalLevel = Logger.getLogger(Log4jMessageLogger.DEFAULT_LOG_HIERARCHY_PREFIX).getLevel(); - Logger.getLogger(Log4jMessageLogger.DEFAULT_LOG_HIERARCHY_PREFIX).setLevel(Level.OFF); - - // Log the message - logger.rawMessage(message, null, loggerName); - - verifyLogPresent(message); - - // Restore the logging level - Logger.getLogger(Log4jMessageLogger.DEFAULT_LOG_HIERARCHY_PREFIX).setLevel(originalLevel); + String loggerName1 = getName() + ".TestLogger1"; + String loggerName2 = getName() + ".TestLogger2"; + + Logger.getLogger(loggerName1).setLevel(Level.INFO); + Logger.getLogger(loggerName2).setLevel(Level.OFF); + + Log4jMessageLogger msgLogger = new Log4jMessageLogger(); + BrokerActor actor = new BrokerActor(msgLogger); + + assertTrue("Expected message logger to be enabled", msgLogger.isEnabled()); + + assertTrue("Message should be enabled", msgLogger.isMessageEnabled(actor, loggerName1)); + assertFalse("Message should be disabled", msgLogger.isMessageEnabled(actor, loggerName2)); + + Logger.getLogger(loggerName1).setLevel(Level.WARN); + Logger.getLogger(loggerName2).setLevel(Level.INFO); + + assertFalse("Message should be disabled", msgLogger.isMessageEnabled(actor, loggerName1)); + assertTrue("Message should be enabled", msgLogger.isMessageEnabled(actor, loggerName2)); } - /** * Check that the Log Message reached log4j * @param message the message to search for @@ -175,7 +207,7 @@ public class Log4jMessageLoggerTest extends TestCase } } - assertEquals("No messages expected.", 0, results.size()); + assertEquals("No message was expected.", 0, results.size()); } /** -- cgit v1.2.1