diff options
| author | Robert Gemmell <robbie@apache.org> | 2010-09-02 16:18:40 +0000 |
|---|---|---|
| committer | Robert Gemmell <robbie@apache.org> | 2010-09-02 16:18:40 +0000 |
| commit | 8d61ef73ef284bf95954c984d7909b8c1a4b02ea (patch) | |
| tree | 5c91a7e3ad7b045ba89bc172427b1b666cb6e52f /java | |
| parent | 0d8d94a588668bd651a02adec04c60fcd615c3ae (diff) | |
| download | qpid-python-8d61ef73ef284bf95954c984d7909b8c1a4b02ea.tar.gz | |
QPID-2843: Remove old logging and use the operational logging framework to provide startup information, directed to both stdout and the log file.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@992003 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java')
9 files changed, 124 insertions, 107 deletions
diff --git a/java/broker/etc/log4j.xml b/java/broker/etc/log4j.xml index 458329571e..b0383bdefd 100644 --- a/java/broker/etc/log4j.xml +++ b/java/broker/etc/log4j.xml @@ -82,18 +82,11 @@ </appender> <appender class="org.apache.log4j.ConsoleAppender" name="STDOUT"> - <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/> </layout> </appender> - <!-- Qpid.Broker log is a special log category used to log only useful broker startup details --> - <category additivity="true" name="Qpid.Broker"> - <priority value="debug"/> - <appender-ref ref="STDOUT"/> - </category> - <category additivity="true" name="org.apache.qpid.server.queue.AMQQueueMBean"> <priority value="info"/> </category> diff --git a/java/broker/src/main/java/org/apache/qpid/server/Main.java b/java/broker/src/main/java/org/apache/qpid/server/Main.java index 7d7eefc541..13927f28ab 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/Main.java +++ b/java/broker/src/main/java/org/apache/qpid/server/Main.java @@ -68,7 +68,6 @@ import org.apache.qpid.transport.network.mina.MINANetworkDriver; public class Main { private static Logger _logger; - private static Logger _brokerLogger; private static final String DEFAULT_CONFIG_FILE = "etc/config.xml"; @@ -230,13 +229,11 @@ public class Main catch (InitException e) { System.out.println("Initialisation Error : " + e.getMessage()); - _brokerLogger.error("Initialisation Error : " + e.getMessage()); shutdown(1); } catch (Throwable e) { System.out.println("Error initialising message broker: " + e); - _brokerLogger.error("Error initialising message broker: " + e); e.printStackTrace(); shutdown(1); } @@ -308,9 +305,9 @@ public class Main // the configuration. BrokerMessages.reload(); - // AR.initialise() sets its own actor so we now need to set the actor - // for the remainder of the startup - CurrentActor.set(new BrokerActor(config.getRootMessageLogger())); + // AR.initialise() sets and removes its own actor so we now need to set the actor + // for the remainder of the startup, and the default actor if the stack is empty + CurrentActor.set(new BrokerActor(config.getCompositeStartupMessageLogger())); CurrentActor.setDefault(new BrokerActor(config.getRootMessageLogger())); try @@ -324,13 +321,6 @@ public class Main new ServerInformationMBean(QpidProperties.getBuildVersion(), QpidProperties.getReleaseVersion()); sysInfoMBean.register(); - //fixme .. use QpidProperties.getVersionString when we have fixed the classpath issues - // that are causing the broker build to pick up the wrong properties file and hence say - // Starting Qpid Client - _brokerLogger.info("Starting Qpid Broker " + QpidProperties.getReleaseVersion() - + " build: " + QpidProperties.getBuildVersion()); - - String[] portStr = commandLine.getOptionValues("p"); @@ -443,10 +433,6 @@ public class Main CurrentActor.get().message(BrokerMessages.LISTENING("TCP/SSL", serverConfig.getSSLPort())); } - //fixme qpid.AMQP should be using qpidproperties to get value - _brokerLogger.info("Qpid Broker Ready :" + QpidProperties.getReleaseVersion() - + " build: " + QpidProperties.getBuildVersion()); - CurrentActor.get().message(BrokerMessages.READY()); } @@ -530,7 +516,6 @@ public class Main //now that the override status is know, we can instantiate the Loggers _logger = Logger.getLogger(Main.class); - _brokerLogger = Logger.getLogger("Qpid.Broker"); new Main(args); } @@ -568,7 +553,7 @@ public class Main if (logConfigFile.exists() && logConfigFile.canRead()) { CurrentActor.get().message(BrokerMessages.LOG_CONFIG(logConfigFile.getAbsolutePath())); - System.out.println("Configuring logger using configuration file " + logConfigFile.getAbsolutePath()); + if (logWatchTime > 0) { System.out.println("log file " + logConfigFile.getAbsolutePath() + " will be checked for changes every " diff --git a/java/broker/src/main/java/org/apache/qpid/server/logging/CompositeStartupMessageLogger.java b/java/broker/src/main/java/org/apache/qpid/server/logging/CompositeStartupMessageLogger.java new file mode 100644 index 0000000000..d2838f0789 --- /dev/null +++ b/java/broker/src/main/java/org/apache/qpid/server/logging/CompositeStartupMessageLogger.java @@ -0,0 +1,31 @@ +package org.apache.qpid.server.logging; + +public class CompositeStartupMessageLogger extends AbstractRootMessageLogger +{ + private RootMessageLogger[] _loggers; + + public CompositeStartupMessageLogger(RootMessageLogger[] loggers) + { + super(); + _loggers = loggers; + } + + @Override + public void rawMessage(String message, String logHierarchy) + { + for(RootMessageLogger l : _loggers) + { + l.rawMessage(message, logHierarchy); + } + } + + @Override + public void rawMessage(String message, Throwable throwable, String logHierarchy) + { + for(RootMessageLogger l : _loggers) + { + l.rawMessage(message, throwable, logHierarchy); + } + } + +} diff --git a/java/broker/src/main/java/org/apache/qpid/server/logging/messages/ManagementConsole_logmessages.properties b/java/broker/src/main/java/org/apache/qpid/server/logging/messages/ManagementConsole_logmessages.properties index bd42425033..722b02d935 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/logging/messages/ManagementConsole_logmessages.properties +++ b/java/broker/src/main/java/org/apache/qpid/server/logging/messages/ManagementConsole_logmessages.properties @@ -24,7 +24,7 @@ STARTUP = MNG-1001 : Startup LISTENING = MNG-1002 : Starting : {0} : Listening on port {1,number,#} # 0 - Service # 1 - Port -SHUTTING_DOWN = MNG-1003 : Shuting down : {0} : port {1,number,#} +SHUTTING_DOWN = MNG-1003 : Shutting down : {0} : port {1,number,#} READY = MNG-1004 : Ready STOPPED = MNG-1005 : Stopped # 0 - Path diff --git a/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java b/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java index 90e0bba6f7..fb369b4d5b 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java +++ b/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java @@ -73,7 +73,6 @@ import java.util.Map; public class JMXManagedObjectRegistry implements ManagedObjectRegistry { private static final Logger _log = Logger.getLogger(JMXManagedObjectRegistry.class); - private static final Logger _startupLog = Logger.getLogger("Qpid.Broker"); public static final String MANAGEMENT_PORT_CONFIG_PATH = "management.jmxport"; public static final int MANAGEMENT_PORT_DEFAULT = 8999; @@ -108,7 +107,6 @@ public class JMXManagedObjectRegistry implements ManagedObjectRegistry if (areOutOfTheBoxJMXOptionsSet()) { _log.warn("JMX: Using the out of the box JMX Agent"); - _startupLog.warn("JMX: Using the out of the box JMX Agent"); return; } @@ -170,9 +168,6 @@ public class JMXManagedObjectRegistry implements ManagedObjectRegistry + ksf + ". Check permissions."); } - _log.info("JMX ConnectorServer using SSL keystore file " + ksf.getAbsolutePath()); - _startupLog.info("JMX ConnectorServer using SSL keystore file " + ksf.getAbsolutePath()); - CurrentActor.get().message(ManagementConsoleMessages.SSL_KEYSTORE(ksf.getAbsolutePath())); } @@ -196,13 +191,8 @@ public class JMXManagedObjectRegistry implements ManagedObjectRegistry csf = new SslRMIClientSocketFactory(); ssf = new SslRMIServerSocketFactory(); - _log.warn("Starting JMX ConnectorServer on port '"+ port + "' (+" + - (port +PORT_EXPORT_OFFSET) + ") with SSL"); - _startupLog.warn("Starting JMX ConnectorServer on port '"+ port + "' (+" + - (port +PORT_EXPORT_OFFSET) + ") with SSL"); - - CurrentActor.get().message(ManagementConsoleMessages.LISTENING("SSL RMI Registry", port)); - CurrentActor.get().message(ManagementConsoleMessages.LISTENING("SSL RMI ConnectorServer", port + PORT_EXPORT_OFFSET)); + CurrentActor.get().message(ManagementConsoleMessages.LISTENING("RMI Registry", port)); + CurrentActor.get().message(ManagementConsoleMessages.LISTENING("SSL JMX RMIConnectorServer", port + PORT_EXPORT_OFFSET)); } else @@ -211,10 +201,8 @@ public class JMXManagedObjectRegistry implements ManagedObjectRegistry csf = null; ssf = null; - _log.warn("Starting JMX ConnectorServer on port '" + port + "' (+" + (port +PORT_EXPORT_OFFSET) + ")"); - _startupLog.warn("Starting JMX ConnectorServer on port '" + port + "' (+" + (port +PORT_EXPORT_OFFSET) + ")"); CurrentActor.get().message(ManagementConsoleMessages.LISTENING("RMI Registry", port)); - CurrentActor.get().message(ManagementConsoleMessages.LISTENING("RMI ConnectorServer", port + PORT_EXPORT_OFFSET)); + CurrentActor.get().message(ManagementConsoleMessages.LISTENING("JMX RMIConnectorServer", port + PORT_EXPORT_OFFSET)); } //add a JMXAuthenticator implementation the env map to authenticate the RMI based JMX connector server diff --git a/java/broker/src/main/java/org/apache/qpid/server/management/MBeanInvocationHandlerImpl.java b/java/broker/src/main/java/org/apache/qpid/server/management/MBeanInvocationHandlerImpl.java index e0a7c9c756..19b4586017 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/management/MBeanInvocationHandlerImpl.java +++ b/java/broker/src/main/java/org/apache/qpid/server/management/MBeanInvocationHandlerImpl.java @@ -74,7 +74,7 @@ public class MBeanInvocationHandlerImpl implements InvocationHandler, Notificati final Class<?>[] interfaces = new Class[] { MBeanServerForwarder.class }; - _logActor = new ManagementActor(CurrentActor.get().getRootMessageLogger()); + _logActor = new ManagementActor(ApplicationRegistry.getInstance().getRootMessageLogger()); Object proxy = Proxy.newProxyInstance(MBeanServerForwarder.class.getClassLoader(), interfaces, handler); return MBeanServerForwarder.class.cast(proxy); 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 e9d1ead4f7..78a642f22f 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,9 +38,11 @@ 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.CompositeStartupMessageLogger; 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.SystemOutMessageLogger; import org.apache.qpid.server.logging.actors.BrokerActor; import org.apache.qpid.server.logging.actors.CurrentActor; import org.apache.qpid.server.logging.messages.BrokerMessages; @@ -91,6 +93,8 @@ public abstract class ApplicationRegistry implements IApplicationRegistry protected RootMessageLogger _rootMessageLogger; + protected CompositeStartupMessageLogger _startupMessageLogger; + protected UUID _brokerId = UUID.randomUUID(); protected QMFService _qmfService; @@ -249,36 +253,53 @@ public abstract class ApplicationRegistry implements IApplicationRegistry public void initialise(int instanceID) throws Exception { + //Create the RootLogger to be used during broker operation _rootMessageLogger = new Log4jMessageLogger(_configuration); _registryName = String.valueOf(instanceID); - // Set the Actor for current log messages - CurrentActor.set(new BrokerActor(_registryName, _rootMessageLogger)); - - configure(); + //Create the composite (log4j+SystemOut MessageLogger to be used during startup + RootMessageLogger[] messageLoggers = {new SystemOutMessageLogger(), _rootMessageLogger}; + _startupMessageLogger = new CompositeStartupMessageLogger(messageLoggers); + + CurrentActor.set(new BrokerActor(_startupMessageLogger)); - _qmfService = new QMFService(getConfigStore(), this); + try + { + configure(); - CurrentActor.get().message(BrokerMessages.STARTUP(QpidProperties.getReleaseVersion(), QpidProperties.getBuildVersion())); + _qmfService = new QMFService(getConfigStore(), this); - initialiseManagedObjectRegistry(); + CurrentActor.get().message(BrokerMessages.STARTUP(QpidProperties.getReleaseVersion(), QpidProperties.getBuildVersion())); - _virtualHostRegistry = new VirtualHostRegistry(this); + initialiseManagedObjectRegistry(); - _securityManager = new SecurityManager(_configuration, _pluginManager); + _virtualHostRegistry = new VirtualHostRegistry(this); - createDatabaseManager(_configuration); + _securityManager = new SecurityManager(_configuration, _pluginManager); - _authenticationManager = new PrincipalDatabaseAuthenticationManager(null, null); + createDatabaseManager(_configuration); - _databaseManager.initialiseManagement(_configuration); + _authenticationManager = new PrincipalDatabaseAuthenticationManager(null, null); - _managedObjectRegistry.start(); + _databaseManager.initialiseManagement(_configuration); - initialiseVirtualHosts(); + _managedObjectRegistry.start(); + } + finally + { + CurrentActor.remove(); + } - // Startup complete, so pop the current actor - CurrentActor.remove(); + CurrentActor.set(new BrokerActor(_rootMessageLogger)); + try + { + initialiseVirtualHosts(); + } + finally + { + // Startup complete, so pop the current actor + CurrentActor.remove(); + } } protected void createDatabaseManager(ServerConfiguration configuration) throws Exception @@ -444,6 +465,11 @@ public abstract class ApplicationRegistry implements IApplicationRegistry { return _rootMessageLogger; } + + public RootMessageLogger getCompositeStartupMessageLogger() + { + return _startupMessageLogger; + } public UUID getBrokerId() { diff --git a/java/systests/src/main/java/org/apache/qpid/server/logging/BrokerLoggingTest.java b/java/systests/src/main/java/org/apache/qpid/server/logging/BrokerLoggingTest.java index ea6aec61c2..eafa2f6e61 100644 --- a/java/systests/src/main/java/org/apache/qpid/server/logging/BrokerLoggingTest.java +++ b/java/systests/src/main/java/org/apache/qpid/server/logging/BrokerLoggingTest.java @@ -156,16 +156,6 @@ public class BrokerLoggingTest extends AbstractTestLogging //Remove test Log4j config from the commandline _broker = _broker.substring(0, _broker.indexOf("-l")); - // As a result of removing the test log4j config - // we will pick up the broker default and will write - // data to the standard qpid.log file. Which means that the start - // broker process will not be monitoring the right file for startup - // messages. Therefore: - - // Set the broker.ready string to check for the _log4j default that - // is still present on standard out. - setTestClientSystemProperty(BROKER_READY, "Qpid Broker Ready"); - startBroker(); // Now we can create the monitor as _outputFile will now be defined @@ -206,7 +196,8 @@ public class BrokerLoggingTest extends AbstractTestLogging validateMessageID(TESTID, log); //2 - assertEquals("More than one log4j configuration message found.", + //There will be 1 copy of this startup message (via SystemOut) + assertEquals("Unexpected log4j configuration message count.", 1, findMatches(TESTID).size()); //3 @@ -296,7 +287,8 @@ public class BrokerLoggingTest extends AbstractTestLogging validateMessageID(TESTID, log); //2 - assertEquals("More than one log4j configuration message found.", + //There will be 1 copy of this startup message (via SystemOut) + assertEquals("Unexpected log4j configuration message count.", 1, findMatches(TESTID).size()); //3 @@ -378,8 +370,9 @@ public class BrokerLoggingTest extends AbstractTestLogging validateMessageID(TESTID, log); //2 - assertEquals("More than one startup message found.", - 1, findMatches(TESTID).size()); + //There will be 2 copies of the startup message (one via SystemOut, and one via Log4J) + assertEquals("Unexpected startup message count", + 2, findMatches(TESTID).size()); validation = true; } @@ -464,8 +457,9 @@ public class BrokerLoggingTest extends AbstractTestLogging validateMessageID(TESTID, log); //2 - assertEquals("More than one listen message found.", - 1, findMatches(TESTID).size()); + //There will be 2 copies of the startup message (one via SystemOut, and one via Log4J) + assertEquals("Unexpected listen message count", + 2, findMatches(TESTID).size()); //3 String message = getMessageString(log); @@ -566,17 +560,19 @@ public class BrokerLoggingTest extends AbstractTestLogging validateMessageID(TESTID, log); //2 + //There will be 4 copies of the startup message (two via SystemOut, and two via Log4J) List<String> listenMessages = findMatches(TESTID); - assertEquals("Two listen messages should be found.", - 2, listenMessages .size()); + assertEquals("Four listen messages should be found.", + 4, listenMessages .size()); //3 + //Check the first String message = getMessageString(getLog(listenMessages .get(0))); assertTrue("Expected Listen log not correct" + message, message.endsWith("Listening on TCP port " + getPort())); - // Check second, ssl, listen. - message = getMessageString(getLog(listenMessages .get(1))); + // Check the third, ssl listen. + message = getMessageString(getLog(listenMessages .get(2))); assertTrue("Expected Listen log not correct" + message, message.endsWith("Listening on TCP/SSL port " + sslPort)); @@ -639,11 +635,12 @@ public class BrokerLoggingTest extends AbstractTestLogging assertTrue("BRKer message not logged", results.size() > 0); - boolean validation = false; + boolean validationComplete = false; boolean foundBRK1001 = false; - for (String rawLog : results) + + for (int i=0; i < results.size(); i++) { - assertFalse("More broker log statements present after ready message", validation); + String rawLog = results.get(i); String log = getLog(rawLog); // Ensure we do not have a BRK-1001 message @@ -662,16 +659,18 @@ public class BrokerLoggingTest extends AbstractTestLogging validateMessageID(TESTID, log); //2 - assertEquals("More than one ready message found.", - 1, findMatches(TESTID).size()); - - //3 assertEquals("Ready message not present", "Ready", getMessageString(log)); - - validation = true; + + //There will be 2 copies of the startup message (one via SystemOut, and one via Log4J) + assertEquals("Unexpected ready message count", + 2, findMatches(TESTID).size()); + assertEquals("The ready messages should have been the last 2 messages", results.size() - 2, i); + + validationComplete = true; + break; } - assertTrue("Validation not performed: " + TESTID + " not logged", validation); + assertTrue("Validation not performed: " + TESTID + " not logged", validationComplete); } catch (AssertionFailedError afe) { diff --git a/java/systests/src/main/java/org/apache/qpid/server/logging/ManagementLoggingTest.java b/java/systests/src/main/java/org/apache/qpid/server/logging/ManagementLoggingTest.java index d5d3930641..6868f82ed9 100644 --- a/java/systests/src/main/java/org/apache/qpid/server/logging/ManagementLoggingTest.java +++ b/java/systests/src/main/java/org/apache/qpid/server/logging/ManagementLoggingTest.java @@ -97,9 +97,10 @@ public class ManagementLoggingTest extends AbstractTestLogging validateMessageID("MNG-1001", log); //2 + //There will be 2 copies of the startup message (one via SystemOut, and one via Log4J) results = findMatches("MNG-1001"); - assertEquals("More than one startup message found.", - 1, results.size()); + assertEquals("Unexpected startup message count.", + 2, results.size()); //3 assertEquals("Startup log message is not 'Startup'.", "Startup", @@ -199,31 +200,26 @@ public class ManagementLoggingTest extends AbstractTestLogging { // Validation - assertEquals("MNGer message not logged expected message", 2, results.size()); + //There will be 4 startup messages (two via SystemOut, and two via Log4J) + assertEquals("Unexpected MNG-1002 message count", 4, results.size()); String log = getLogMessage(results, 0); //1 validateMessageID("MNG-1002", log); - // Validate we only have one MNG-1002 - results = findMatches("MNG-1002"); - assertEquals("More than two RMI entries found.", - 2, results.size()); - - // We expect the RMI Server port to be 100 higher than - // the RMIConnector Server Port + //Check the RMI Registry port is as expected int mPort = getPort() + (DEFAULT_MANAGEMENT_PORT - DEFAULT_PORT); assertTrue("RMI Registry port not as expected(" + mPort + ").:" + getMessageString(log), getMessageString(log).endsWith(String.valueOf(mPort))); - log = getLogMessage(results, 1); + log = getLogMessage(results, 2); //1 validateMessageID("MNG-1002", log); - // We expect the RMIConnector Server port to be 100 higher than - // the RMI Server Port + // We expect the RMI Registry port (the defined 'management port') to be + // 100 lower than the RMIConnector Server Port (the actual JMX server) mPort = getPort() + (DEFAULT_MANAGEMENT_PORT - DEFAULT_PORT) + 100; assertTrue("RMI ConnectorServer port not as expected(" + mPort + ").:" + getMessageString(log), getMessageString(log).endsWith(String.valueOf(mPort))); @@ -270,13 +266,12 @@ public class ManagementLoggingTest extends AbstractTestLogging //1 validateMessageID("MNG-1006", log); - // Validate we only have one MNG-1002 + // Validate we only have two MNG-1002 (one via stdout, one via log4j) results = findMatches("MNG-1006"); - assertEquals("More than one SSL Keystore entry found.", - 1, results.size()); + assertEquals("Upexpected SSL Keystore message count", + 2, results.size()); - // We expect the RMIConnector Server port to be 100 higher than - // the RMI Server Port + // Validate the keystore path is as expected assertTrue("SSL Keystore entry expected.:" + getMessageString(log), getMessageString(log).endsWith(new File(getConfigurationStringProperty("management.ssl.keyStorePath")).getName())); } |
