This is an automated email from the ASF dual-hosted git repository. orudyy pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git
commit 2e3495a037f5cc1cab310ebc848b569425303961 Author: Alex Rudyy <oru...@apache.org> AuthorDate: Sat May 29 18:04:32 2021 +0100 QPID-8515: [Broker-J] Add missing operational logs This closes #85 --- .../berkeleydb/BDBHAVirtualHostNodeImpl.java | 36 +++- .../qpid/server/exchange/AbstractExchange.java | 54 +++++- .../qpid/server/logging/AbstractMessageLogger.java | 29 ++- .../qpid/server/logging/CreateLogMessage.java | 56 ++++++ .../qpid/server/logging/DeleteLogMessage.java | 52 +++++ .../org/apache/qpid/server/logging/LogMessage.java | 6 + .../QueueLogSubject.java => Outcome.java} | 18 +- .../qpid/server/logging/UpdateLogMessage.java | 55 ++++++ .../logging/messages/AccessControlMessages.java | 62 ++++++ .../messages/AccessControl_logmessages.properties | 4 + .../messages/AuthenticationProviderMessages.java | 62 ++++++ .../AuthenticationProvider_logmessages.properties | 5 + .../server/logging/messages/ExchangeMessages.java | 62 ++++++ .../messages/Exchange_logmessages.properties | 5 + .../logging/messages/HighAvailabilityMessages.java | 62 ++++++ .../HighAvailability_logmessages.properties | 5 + .../server/logging/messages/KeyStoreMessages.java | 62 ++++++ .../messages/KeyStore_logmessages.properties | 4 + .../qpid/server/logging/messages/PortMessages.java | 62 ++++++ .../logging/messages/Port_logmessages.properties | 5 + .../server/logging/messages/QueueMessages.java | 62 ++++++ .../logging/messages/Queue_logmessages.properties | 5 + .../logging/messages/TrustStoreMessages.java | 64 ++++++- .../messages/TrustStore_logmessages.properties | 7 +- .../logging/messages/VirtualHostMessages.java | 124 ++++++++++++ .../messages/VirtualHost_logmessages.properties | 9 + .../server/logging/subjects/QueueLogSubject.java | 10 +- .../server/model/AbstractConfiguredObject.java | 210 +++++++++++++++++++-- .../apache/qpid/server/model/VirtualHostNode.java | 4 +- .../qpid/server/model/port/AbstractPort.java | 54 +++++- .../apache/qpid/server/queue/AbstractQueue.java | 59 +++++- .../qpid/server/queue/QueueConsumerImpl.java | 25 ++- .../qpid/server/security/AbstractKeyStore.java | 53 +++++- .../qpid/server/security/AbstractTrustStore.java | 52 ++++- .../AutoGeneratedSelfSignedKeyStoreImpl.java | 8 - .../access/AbstractAccessControlProvider.java | 56 +++++- .../manager/AbstractAuthenticationManager.java | 62 ++++-- .../qpid/server/session/AbstractAMQPSession.java | 26 +++ .../server/transport/AbstractAMQPConnection.java | 16 +- .../server/virtualhost/AbstractVirtualHost.java | 44 ++++- .../virtualhostnode/AbstractVirtualHostNode.java | 3 +- .../RedirectingVirtualHostNodeImpl.java | 6 + .../logging/subjects/QueueLogSubjectTest.java | 2 +- .../apache/qpid/server/model/VirtualHostTest.java | 4 +- .../testmodels/hierarchy/TestAbstractCarImpl.java | 11 +- .../server/model/testmodels/hierarchy/TestCar.java | 3 +- .../virtualhost/AbstractVirtualHostTest.java | 2 + .../management/plugin/ManagementException.java | 4 +- .../endtoend/logging/VirtualHostLoggerTest.java | 2 +- 49 files changed, 1576 insertions(+), 117 deletions(-) diff --git a/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java b/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java index ff9015f..b5ec316 100644 --- a/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java +++ b/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java @@ -62,6 +62,8 @@ import org.slf4j.LoggerFactory; import org.apache.qpid.server.configuration.IllegalConfigurationException; import org.apache.qpid.server.configuration.updater.Task; +import org.apache.qpid.server.logging.LogMessage; +import org.apache.qpid.server.logging.Outcome; import org.apache.qpid.server.logging.messages.BrokerMessages; import org.apache.qpid.server.logging.messages.ConfigStoreMessages; import org.apache.qpid.server.logging.messages.HighAvailabilityMessages; @@ -300,7 +302,6 @@ public class BDBHAVirtualHostNodeImpl extends AbstractVirtualHostNode<BDBHAVirtu List<String> permittedNodes = new ArrayList<>(getPermittedNodesFromHelper()); setAttributes(Collections.<String, Object>singletonMap(PERMITTED_NODES, permittedNodes)); } - getEventLogger().message(getVirtualHostNodeLogSubject(), HighAvailabilityMessages.CREATED()); } @Override @@ -1473,4 +1474,37 @@ public class BDBHAVirtualHostNodeImpl extends AbstractVirtualHostNode<BDBHAVirtu { return Collections.singletonMap(VirtualHost.class.getSimpleName(), (Collection<String>) Collections.singleton(BDBHAVirtualHostImpl.VIRTUAL_HOST_TYPE)); } + + @Override + protected void logCreated(final Map<String, Object> attributes, + final Outcome outcome) + { + if (outcome == Outcome.SUCCESS) + { + getEventLogger().message(getVirtualHostNodeLogSubject(), HighAvailabilityMessages.CREATED()); + } + else + { + super.logCreated(attributes, outcome); + } + } + + @Override + protected void logDeleted(final Outcome outcome) + { + LOGGER.debug("{} : {} ({}) : Delete : {}", + LogMessage.getActor(), + getCategoryClass().getSimpleName(), + getName(), + outcome); + } + + @Override + protected void logUpdated(final Map<String, Object> attributes, final Outcome outcome) + { + getEventLogger().message(getVirtualHostNodeLogSubject(), + HighAvailabilityMessages.UPDATE(getName(), + String.valueOf(outcome), + attributesAsString(attributes))); + } } diff --git a/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java b/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java index 60fff56..61f855f 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java +++ b/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java @@ -48,6 +48,7 @@ import org.apache.qpid.server.binding.BindingImpl; import org.apache.qpid.server.configuration.IllegalConfigurationException; import org.apache.qpid.server.filter.AMQInvalidArgumentException; import org.apache.qpid.server.logging.EventLogger; +import org.apache.qpid.server.logging.Outcome; import org.apache.qpid.server.logging.LogSubject; import org.apache.qpid.server.logging.messages.BindingMessages; import org.apache.qpid.server.logging.messages.ExchangeMessages; @@ -267,8 +268,6 @@ public abstract class AbstractExchange<T extends AbstractExchange<T>> LOGGER.warn("Cannot find alternate binding destination '{}' for exchange '{}'", alternateDestination, toString()); } } - - getEventLogger().message(ExchangeMessages.CREATED(getType(), getName(), isDurable())); } @Override @@ -329,8 +328,6 @@ public abstract class AbstractExchange<T extends AbstractExchange<T>> { _alternateBindingDestination.removeReference(AbstractExchange.this); } - - getEventLogger().message(_logSubject, ExchangeMessages.DELETED()); } } @@ -1085,4 +1082,53 @@ public abstract class AbstractExchange<T extends AbstractExchange<T>> } } } + + @Override + protected void logCreated(final Map<String, Object> attributes, + final Outcome outcome) + { + if (outcome == Outcome.SUCCESS) + { + getEventLogger().message(_logSubject, ExchangeMessages.CREATED(getType(), getName(), isDurable())); + } + else + { + super.logCreated(attributes, outcome); + } + } + + @Override + protected void logRecovered(final Outcome outcome) + { + if (outcome == Outcome.SUCCESS) + { + getEventLogger().message(_logSubject, ExchangeMessages.CREATED(getType(), getName(), isDurable())); + } + else + { + super.logRecovered(outcome); + } + } + + @Override + protected void logDeleted(final Outcome outcome) + { + if (outcome == Outcome.SUCCESS) + { + getEventLogger().message(_logSubject, ExchangeMessages.DELETED()); + } + else + { + super.logDeleted(outcome); + } + } + + @Override + protected void logUpdated(final Map<String, Object> attributes, final Outcome outcome) + { + getEventLogger().message(_logSubject, + ExchangeMessages.UPDATE(getName(), + String.valueOf(outcome), + attributesAsString(attributes))); + } } diff --git a/broker-core/src/main/java/org/apache/qpid/server/logging/AbstractMessageLogger.java b/broker-core/src/main/java/org/apache/qpid/server/logging/AbstractMessageLogger.java index 6626321..e511920 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/logging/AbstractMessageLogger.java +++ b/broker-core/src/main/java/org/apache/qpid/server/logging/AbstractMessageLogger.java @@ -21,7 +21,6 @@ package org.apache.qpid.server.logging; -import static org.apache.qpid.server.logging.subjects.LogSubjectFormat.CHANNEL_FORMAT; import static org.apache.qpid.server.logging.subjects.LogSubjectFormat.CONNECTION_FORMAT; import static org.apache.qpid.server.logging.subjects.LogSubjectFormat.SOCKET_FORMAT; import static org.apache.qpid.server.logging.subjects.LogSubjectFormat.USER_FORMAT; @@ -45,6 +44,7 @@ import org.apache.qpid.server.transport.AMQPConnection; public abstract class AbstractMessageLogger implements MessageLogger { public static final String DEFAULT_LOG_HIERARCHY_PREFIX = "qpid.message."; + private static final String UNKNOWN_ACTOR = "<<UNKNOWN>>"; private final String _msgPrefix = System.getProperty("qpid.logging.prefix",""); @@ -97,13 +97,18 @@ public abstract class AbstractMessageLogger implements MessageLogger protected String getActor() { + return getLogActor(); + } + + static String getLogActor() + { Subject subject = Subject.getSubject(AccessController.getContext()); SessionPrincipal sessionPrincipal = getPrincipal(subject, SessionPrincipal.class); String message; if(sessionPrincipal != null) { - message = generateSessionMessage(sessionPrincipal.getSession()); + message = generateSessionActor(sessionPrincipal.getSession()); } else { @@ -111,7 +116,7 @@ public abstract class AbstractMessageLogger implements MessageLogger if(connPrincipal != null) { - message = generateConnectionMessage(connPrincipal.getConnection()); + message = generateConnectionActor(connPrincipal.getConnection()); } else { @@ -129,7 +134,7 @@ public abstract class AbstractMessageLogger implements MessageLogger } else { - message = "<<UNKNOWN>> "; + message = UNKNOWN_ACTOR + " "; } } } @@ -137,7 +142,7 @@ public abstract class AbstractMessageLogger implements MessageLogger return message; } - private String generateManagementConnectionMessage(final ManagementConnectionPrincipal managementConnection, + private static String generateManagementConnectionMessage(final ManagementConnectionPrincipal managementConnection, final AuthenticatedPrincipal userPrincipal) { String remoteAddress = managementConnection.getRemoteAddress().toString(); @@ -153,13 +158,18 @@ public abstract class AbstractMessageLogger implements MessageLogger remoteAddress) + "] "; } - private String generateTaskMessage(final TaskPrincipal taskPrincipal) + private static String generateTaskMessage(final TaskPrincipal taskPrincipal) { return "["+taskPrincipal.getName()+"] "; } protected String generateConnectionMessage(final AMQPConnection<?> connection) { + return generateConnectionActor(connection); + } + + private static String generateConnectionActor(final AMQPConnection<?> connection) + { if (connection.getAuthorizedPrincipal() != null) { if (connection.getAddressSpaceName() != null) @@ -203,10 +213,15 @@ public abstract class AbstractMessageLogger implements MessageLogger protected String generateSessionMessage(final AMQPSession session) { + return generateSessionActor(session); + } + + private static String generateSessionActor(final AMQPSession session) + { return session.getLogSubject().toLogString(); } - private <P extends Principal> P getPrincipal(Subject subject, Class<P> clazz) + private static <P extends Principal> P getPrincipal(Subject subject, Class<P> clazz) { if(subject != null) { diff --git a/broker-core/src/main/java/org/apache/qpid/server/logging/CreateLogMessage.java b/broker-core/src/main/java/org/apache/qpid/server/logging/CreateLogMessage.java new file mode 100644 index 0000000..1f7c936 --- /dev/null +++ b/broker-core/src/main/java/org/apache/qpid/server/logging/CreateLogMessage.java @@ -0,0 +1,56 @@ +/* + * + * 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.qpid.server.model.ConfiguredObject; + +public class CreateLogMessage implements LogMessage +{ + private final String _hierarchy; + private final String _logMessage; + + public CreateLogMessage(final Outcome outcome, + final Class<? extends ConfiguredObject> categoryClass, + final String name, + final String attributes) + { + _hierarchy = AbstractMessageLogger.DEFAULT_LOG_HIERARCHY_PREFIX + + "." + categoryClass.getSimpleName().toLowerCase() + + ".create"; + _logMessage = String.format("%s (%s) : Create : %s : %s", + categoryClass.getSimpleName(), + name, + outcome, + attributes); + } + + @Override + public String getLogHierarchy() + { + return _hierarchy; + } + + @Override + public String toString() + { + return _logMessage; + } +} diff --git a/broker-core/src/main/java/org/apache/qpid/server/logging/DeleteLogMessage.java b/broker-core/src/main/java/org/apache/qpid/server/logging/DeleteLogMessage.java new file mode 100644 index 0000000..9584c43 --- /dev/null +++ b/broker-core/src/main/java/org/apache/qpid/server/logging/DeleteLogMessage.java @@ -0,0 +1,52 @@ +/* + * + * 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.qpid.server.model.ConfiguredObject; + +public class DeleteLogMessage implements LogMessage +{ + private final String _hierarchy; + private final String _logMessage; + + public DeleteLogMessage(ConfiguredObject<?> object, final Outcome outcome) + { + _hierarchy = AbstractMessageLogger.DEFAULT_LOG_HIERARCHY_PREFIX + + "." + object.getCategoryClass().getSimpleName().toLowerCase() + + ".delete"; + _logMessage = String.format("%s (%s) : Delete : %s", + object.getCategoryClass().getSimpleName(), + object.getName(), + outcome); + } + + @Override + public String getLogHierarchy() + { + return _hierarchy; + } + + @Override + public String toString() + { + return _logMessage; + } +} diff --git a/broker-core/src/main/java/org/apache/qpid/server/logging/LogMessage.java b/broker-core/src/main/java/org/apache/qpid/server/logging/LogMessage.java index 53d5df8..fea338c 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/logging/LogMessage.java +++ b/broker-core/src/main/java/org/apache/qpid/server/logging/LogMessage.java @@ -22,6 +22,12 @@ package org.apache.qpid.server.logging; public interface LogMessage { + + static String getActor() + { + return AbstractMessageLogger.getLogActor(); + } + String getLogHierarchy(); } diff --git a/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/QueueLogSubject.java b/broker-core/src/main/java/org/apache/qpid/server/logging/Outcome.java similarity index 61% copy from broker-core/src/main/java/org/apache/qpid/server/logging/subjects/QueueLogSubject.java copy to broker-core/src/main/java/org/apache/qpid/server/logging/Outcome.java index 3ec57eb..b3648e5 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/QueueLogSubject.java +++ b/broker-core/src/main/java/org/apache/qpid/server/logging/Outcome.java @@ -18,20 +18,10 @@ * under the License. * */ -package org.apache.qpid.server.logging.subjects; +package org.apache.qpid.server.logging; -import org.apache.qpid.server.model.Queue; - -import static org.apache.qpid.server.logging.subjects.LogSubjectFormat.QUEUE_FORMAT; - -public class QueueLogSubject extends AbstractLogSubject +public enum Outcome { - - /** Create an QueueLogSubject that Logs in the following format. */ - public QueueLogSubject(Queue<?> queue) - { - setLogStringWithFormat(QUEUE_FORMAT, - queue.getVirtualHost().getName(), - queue.getName()); - } + SUCCESS, + FAILURE } diff --git a/broker-core/src/main/java/org/apache/qpid/server/logging/UpdateLogMessage.java b/broker-core/src/main/java/org/apache/qpid/server/logging/UpdateLogMessage.java new file mode 100644 index 0000000..93f907a --- /dev/null +++ b/broker-core/src/main/java/org/apache/qpid/server/logging/UpdateLogMessage.java @@ -0,0 +1,55 @@ +/* + * + * 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.qpid.server.model.ConfiguredObject; + +public class UpdateLogMessage implements LogMessage +{ + private final String _hierarchy; + private final String _logMessage; + + public UpdateLogMessage(final ConfiguredObject<?> object, + final String attributes, + final Outcome outcome) + { + _hierarchy = AbstractMessageLogger.DEFAULT_LOG_HIERARCHY_PREFIX + + "." + object.getCategoryClass().getSimpleName().toLowerCase() + + ".update"; + _logMessage = String.format("%s (%s) : Update : %s : %s", + object.getCategoryClass().getSimpleName(), + object.getName(), + outcome, + attributes); + } + + @Override + public String getLogHierarchy() + { + return _hierarchy; + } + + @Override + public String toString() + { + return _logMessage; + } +} diff --git a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/AccessControlMessages.java b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/AccessControlMessages.java index c21ac0f..84be31e 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/AccessControlMessages.java +++ b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/AccessControlMessages.java @@ -71,6 +71,7 @@ public class AccessControlMessages public static final String LOADED_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "accesscontrol.loaded"; public static final String OPEN_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "accesscontrol.open"; public static final String OPERATION_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "accesscontrol.operation"; + public static final String UPDATE_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "accesscontrol.update"; static { @@ -83,6 +84,7 @@ public class AccessControlMessages LoggerFactory.getLogger(LOADED_LOG_HIERARCHY); LoggerFactory.getLogger(OPEN_LOG_HIERARCHY); LoggerFactory.getLogger(OPERATION_LOG_HIERARCHY); + LoggerFactory.getLogger(UPDATE_LOG_HIERARCHY); _messages = ResourceBundle.getBundle("org.apache.qpid.server.logging.messages.AccessControl_logmessages", _currentLocale); } @@ -557,6 +559,66 @@ public class AccessControlMessages }; } + /** + * Log a AccessControl message of the Format: + * <pre>ACL-1017 : Update : {0} : {1} : {2}</pre> + * Optional values are contained in [square brackets] and are numbered + * sequentially in the method call. + * + */ + public static LogMessage UPDATE(String param1, String param2, String param3) + { + String rawMessage = _messages.getString("UPDATE"); + + final Object[] messageArguments = {param1, param2, param3}; + // Create a new MessageFormat to ensure thread safety. + // Sharing a MessageFormat and using applyPattern is not thread safe + MessageFormat formatter = new MessageFormat(rawMessage, _currentLocale); + + final String message = formatter.format(messageArguments); + + return new LogMessage() + { + @Override + public String toString() + { + return message; + } + + @Override + public String getLogHierarchy() + { + return UPDATE_LOG_HIERARCHY; + } + + @Override + public boolean equals(final Object o) + { + if (this == o) + { + return true; + } + if (o == null || getClass() != o.getClass()) + { + return false; + } + + final LogMessage that = (LogMessage) o; + + return getLogHierarchy().equals(that.getLogHierarchy()) && toString().equals(that.toString()); + + } + + @Override + public int hashCode() + { + int result = toString().hashCode(); + result = 31 * result + getLogHierarchy().hashCode(); + return result; + } + }; + } + private AccessControlMessages() { diff --git a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/AccessControl_logmessages.properties b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/AccessControl_logmessages.properties index ff8ef6a..232174d 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/AccessControl_logmessages.properties +++ b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/AccessControl_logmessages.properties @@ -33,3 +33,7 @@ LOADED = ACL-1015 : Rules loaded : Source "{0}" # 0 - operation name OPERATION = ACL-1016 : Operation : {0} +# 0 - object name +# 1 - outcome +# 2 - attributes +UPDATE = ACL-1017 : Update : "{0}" : {1} : {2} diff --git a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/AuthenticationProviderMessages.java b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/AuthenticationProviderMessages.java index da2f15e..ba75020 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/AuthenticationProviderMessages.java +++ b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/AuthenticationProviderMessages.java @@ -69,6 +69,7 @@ public class AuthenticationProviderMessages public static final String DELETE_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "authenticationprovider.delete"; public static final String OPEN_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "authenticationprovider.open"; public static final String OPERATION_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "authenticationprovider.operation"; + public static final String UPDATE_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "authenticationprovider.update"; static { @@ -79,6 +80,7 @@ public class AuthenticationProviderMessages LoggerFactory.getLogger(DELETE_LOG_HIERARCHY); LoggerFactory.getLogger(OPEN_LOG_HIERARCHY); LoggerFactory.getLogger(OPERATION_LOG_HIERARCHY); + LoggerFactory.getLogger(UPDATE_LOG_HIERARCHY); _messages = ResourceBundle.getBundle("org.apache.qpid.server.logging.messages.AuthenticationProvider_logmessages", _currentLocale); } @@ -456,6 +458,66 @@ public class AuthenticationProviderMessages }; } + /** + * Log a AuthenticationProvider message of the Format: + * <pre>ATH-1011 : Update : {0} : {1} : {2}</pre> + * Optional values are contained in [square brackets] and are numbered + * sequentially in the method call. + * + */ + public static LogMessage UPDATE(String param1, String param2, String param3) + { + String rawMessage = _messages.getString("UPDATE"); + + final Object[] messageArguments = {param1, param2, param3}; + // Create a new MessageFormat to ensure thread safety. + // Sharing a MessageFormat and using applyPattern is not thread safe + MessageFormat formatter = new MessageFormat(rawMessage, _currentLocale); + + final String message = formatter.format(messageArguments); + + return new LogMessage() + { + @Override + public String toString() + { + return message; + } + + @Override + public String getLogHierarchy() + { + return UPDATE_LOG_HIERARCHY; + } + + @Override + public boolean equals(final Object o) + { + if (this == o) + { + return true; + } + if (o == null || getClass() != o.getClass()) + { + return false; + } + + final LogMessage that = (LogMessage) o; + + return getLogHierarchy().equals(that.getLogHierarchy()) && toString().equals(that.toString()); + + } + + @Override + public int hashCode() + { + int result = toString().hashCode(); + result = 31 * result + getLogHierarchy().hashCode(); + return result; + } + }; + } + private AuthenticationProviderMessages() { diff --git a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/AuthenticationProvider_logmessages.properties b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/AuthenticationProvider_logmessages.properties index d840dd6..59068ac 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/AuthenticationProvider_logmessages.properties +++ b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/AuthenticationProvider_logmessages.properties @@ -27,3 +27,8 @@ OPERATION = ATH-1005 : Operation : {0} AUTHENTICATION_FAILED = ATH-1010 : Authentication Failed[ : "{0}"] + +# 0 - object name +# 1 - outcome +# 2 - attributes +UPDATE = ATH-1011 : Update : "{0}" : {1} : {2} diff --git a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/ExchangeMessages.java b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/ExchangeMessages.java index aa1cb38..bc2adaa 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/ExchangeMessages.java +++ b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/ExchangeMessages.java @@ -67,6 +67,7 @@ public class ExchangeMessages public static final String DELETED_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "exchange.deleted"; public static final String DISCARDMSG_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "exchange.discardmsg"; public static final String OPERATION_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "exchange.operation"; + public static final String UPDATE_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "exchange.update"; static { @@ -75,6 +76,7 @@ public class ExchangeMessages LoggerFactory.getLogger(DELETED_LOG_HIERARCHY); LoggerFactory.getLogger(DISCARDMSG_LOG_HIERARCHY); LoggerFactory.getLogger(OPERATION_LOG_HIERARCHY); + LoggerFactory.getLogger(UPDATE_LOG_HIERARCHY); _messages = ResourceBundle.getBundle("org.apache.qpid.server.logging.messages.Exchange_logmessages", _currentLocale); } @@ -337,6 +339,66 @@ public class ExchangeMessages }; } + /** + * Log a Exchange message of the Format: + * <pre>EXH-1005 : Update : {0} : {1} : {2}</pre> + * Optional values are contained in [square brackets] and are numbered + * sequentially in the method call. + * + */ + public static LogMessage UPDATE(String param1, String param2, String param3) + { + String rawMessage = _messages.getString("UPDATE"); + + final Object[] messageArguments = {param1, param2, param3}; + // Create a new MessageFormat to ensure thread safety. + // Sharing a MessageFormat and using applyPattern is not thread safe + MessageFormat formatter = new MessageFormat(rawMessage, _currentLocale); + + final String message = formatter.format(messageArguments); + + return new LogMessage() + { + @Override + public String toString() + { + return message; + } + + @Override + public String getLogHierarchy() + { + return UPDATE_LOG_HIERARCHY; + } + + @Override + public boolean equals(final Object o) + { + if (this == o) + { + return true; + } + if (o == null || getClass() != o.getClass()) + { + return false; + } + + final LogMessage that = (LogMessage) o; + + return getLogHierarchy().equals(that.getLogHierarchy()) && toString().equals(that.toString()); + + } + + @Override + public int hashCode() + { + int result = toString().hashCode(); + result = 31 * result + getLogHierarchy().hashCode(); + return result; + } + }; + } + private ExchangeMessages() { diff --git a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/Exchange_logmessages.properties b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/Exchange_logmessages.properties index 7c24f10..697d4a5 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/Exchange_logmessages.properties +++ b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/Exchange_logmessages.properties @@ -25,3 +25,8 @@ DELETED = EXH-1002 : Deleted DISCARDMSG = EXH-1003 : Discarded Message : Name: "{0}" Routing Key: "{1}" # 0 - operation name OPERATION = EXH-1004 : Operation : {0} + +# 0 - object name +# 1 - outcome +# 2 - attributes +UPDATE = EXH-1005 : Update : "{0}" : {1} : {2} diff --git a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/HighAvailabilityMessages.java b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/HighAvailabilityMessages.java index 7c4c2e5..4d3847e 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/HighAvailabilityMessages.java +++ b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/HighAvailabilityMessages.java @@ -77,6 +77,7 @@ public class HighAvailabilityMessages public static final String REMOVED_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "highavailability.removed"; public static final String ROLE_CHANGED_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "highavailability.role_changed"; public static final String TRANSFER_MASTER_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "highavailability.transfer_master"; + public static final String UPDATE_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "highavailability.update"; static { @@ -95,6 +96,7 @@ public class HighAvailabilityMessages LoggerFactory.getLogger(REMOVED_LOG_HIERARCHY); LoggerFactory.getLogger(ROLE_CHANGED_LOG_HIERARCHY); LoggerFactory.getLogger(TRANSFER_MASTER_LOG_HIERARCHY); + LoggerFactory.getLogger(UPDATE_LOG_HIERARCHY); _messages = ResourceBundle.getBundle("org.apache.qpid.server.logging.messages.HighAvailability_logmessages", _currentLocale); } @@ -919,6 +921,66 @@ public class HighAvailabilityMessages }; } + /** + * Log a HighAvailability message of the Format: + * <pre>HA-1015 : Update : {0} : {1} : {2}</pre> + * Optional values are contained in [square brackets] and are numbered + * sequentially in the method call. + * + */ + public static LogMessage UPDATE(String param1, String param2, String param3) + { + String rawMessage = _messages.getString("UPDATE"); + + final Object[] messageArguments = {param1, param2, param3}; + // Create a new MessageFormat to ensure thread safety. + // Sharing a MessageFormat and using applyPattern is not thread safe + MessageFormat formatter = new MessageFormat(rawMessage, _currentLocale); + + final String message = formatter.format(messageArguments); + + return new LogMessage() + { + @Override + public String toString() + { + return message; + } + + @Override + public String getLogHierarchy() + { + return UPDATE_LOG_HIERARCHY; + } + + @Override + public boolean equals(final Object o) + { + if (this == o) + { + return true; + } + if (o == null || getClass() != o.getClass()) + { + return false; + } + + final LogMessage that = (LogMessage) o; + + return getLogHierarchy().equals(that.getLogHierarchy()) && toString().equals(that.toString()); + + } + + @Override + public int hashCode() + { + int result = toString().hashCode(); + result = 31 * result + getLogHierarchy().hashCode(); + return result; + } + }; + } + private HighAvailabilityMessages() { diff --git a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/HighAvailability_logmessages.properties b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/HighAvailability_logmessages.properties index 15e08bd..c76a200 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/HighAvailability_logmessages.properties +++ b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/HighAvailability_logmessages.properties @@ -62,3 +62,8 @@ PRIORITY_CHANGED = HA-1012 : Priority : {0} DESIGNATED_PRIMARY_CHANGED = HA-1013 : Designated primary : {0} NODE_ROLLEDBACK = HA-1014 : Diverged transactions discarded + +# 0 - object name +# 1 - outcome +# 2 - attributes +UPDATE = HA-1015 : Update : "{0}" : {1} : {2} diff --git a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/KeyStoreMessages.java b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/KeyStoreMessages.java index 84f9de4..4fdad9c 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/KeyStoreMessages.java +++ b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/KeyStoreMessages.java @@ -69,6 +69,7 @@ public class KeyStoreMessages public static final String EXPIRING_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "keystore.expiring"; public static final String OPEN_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "keystore.open"; public static final String OPERATION_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "keystore.operation"; + public static final String UPDATE_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "keystore.update"; static { @@ -79,6 +80,7 @@ public class KeyStoreMessages LoggerFactory.getLogger(EXPIRING_LOG_HIERARCHY); LoggerFactory.getLogger(OPEN_LOG_HIERARCHY); LoggerFactory.getLogger(OPERATION_LOG_HIERARCHY); + LoggerFactory.getLogger(UPDATE_LOG_HIERARCHY); _messages = ResourceBundle.getBundle("org.apache.qpid.server.logging.messages.KeyStore_logmessages", _currentLocale); } @@ -433,6 +435,66 @@ public class KeyStoreMessages }; } + /** + * Log a KeyStore message of the Format: + * <pre>KST-1007 : Update : {0} : {1} : {2}</pre> + * Optional values are contained in [square brackets] and are numbered + * sequentially in the method call. + * + */ + public static LogMessage UPDATE(String param1, String param2, String param3) + { + String rawMessage = _messages.getString("UPDATE"); + + final Object[] messageArguments = {param1, param2, param3}; + // Create a new MessageFormat to ensure thread safety. + // Sharing a MessageFormat and using applyPattern is not thread safe + MessageFormat formatter = new MessageFormat(rawMessage, _currentLocale); + + final String message = formatter.format(messageArguments); + + return new LogMessage() + { + @Override + public String toString() + { + return message; + } + + @Override + public String getLogHierarchy() + { + return UPDATE_LOG_HIERARCHY; + } + + @Override + public boolean equals(final Object o) + { + if (this == o) + { + return true; + } + if (o == null || getClass() != o.getClass()) + { + return false; + } + + final LogMessage that = (LogMessage) o; + + return getLogHierarchy().equals(that.getLogHierarchy()) && toString().equals(that.toString()); + + } + + @Override + public int hashCode() + { + int result = toString().hashCode(); + result = 31 * result + getLogHierarchy().hashCode(); + return result; + } + }; + } + private KeyStoreMessages() { diff --git a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/KeyStore_logmessages.properties b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/KeyStore_logmessages.properties index 7d60217..62d6414 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/KeyStore_logmessages.properties +++ b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/KeyStore_logmessages.properties @@ -26,3 +26,7 @@ EXPIRING = KST-1005 : KeyStore {0} Certificate expires in {1} days : {2} # 0 - operation name OPERATION = KST-1006 : Operation : {0} +# 0 - object name +# 1 - outcome +# 2 - attributes +UPDATE = KST-1007 : Update : "{0}" : {1} : {2} diff --git a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/PortMessages.java b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/PortMessages.java index a3add21..395824f 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/PortMessages.java +++ b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/PortMessages.java @@ -73,6 +73,7 @@ public class PortMessages public static final String OPEN_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "port.open"; public static final String OPERATION_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "port.operation"; public static final String UNSUPPORTED_PROTOCOL_HEADER_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "port.unsupported_protocol_header"; + public static final String UPDATE_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "port.update"; static { @@ -87,6 +88,7 @@ public class PortMessages LoggerFactory.getLogger(OPEN_LOG_HIERARCHY); LoggerFactory.getLogger(OPERATION_LOG_HIERARCHY); LoggerFactory.getLogger(UNSUPPORTED_PROTOCOL_HEADER_LOG_HIERARCHY); + LoggerFactory.getLogger(UPDATE_LOG_HIERARCHY); _messages = ResourceBundle.getBundle("org.apache.qpid.server.logging.messages.Port_logmessages", _currentLocale); } @@ -681,6 +683,66 @@ public class PortMessages }; } + /** + * Log a Port message of the Format: + * <pre>PRT-1011 : Update : {0} : {1} : {2}</pre> + * Optional values are contained in [square brackets] and are numbered + * sequentially in the method call. + * + */ + public static LogMessage UPDATE(String param1, String param2, String param3) + { + String rawMessage = _messages.getString("UPDATE"); + + final Object[] messageArguments = {param1, param2, param3}; + // Create a new MessageFormat to ensure thread safety. + // Sharing a MessageFormat and using applyPattern is not thread safe + MessageFormat formatter = new MessageFormat(rawMessage, _currentLocale); + + final String message = formatter.format(messageArguments); + + return new LogMessage() + { + @Override + public String toString() + { + return message; + } + + @Override + public String getLogHierarchy() + { + return UPDATE_LOG_HIERARCHY; + } + + @Override + public boolean equals(final Object o) + { + if (this == o) + { + return true; + } + if (o == null || getClass() != o.getClass()) + { + return false; + } + + final LogMessage that = (LogMessage) o; + + return getLogHierarchy().equals(that.getLogHierarchy()) && toString().equals(that.toString()); + + } + + @Override + public int hashCode() + { + int result = toString().hashCode(); + result = 31 * result + getLogHierarchy().hashCode(); + return result; + } + }; + } + private PortMessages() { diff --git a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/Port_logmessages.properties b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/Port_logmessages.properties index 043721f..83d1f94 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/Port_logmessages.properties +++ b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/Port_logmessages.properties @@ -33,3 +33,8 @@ BIND_FAILED = PRT-1009 : FAILED to bind {0} service to {1,number,#} - port in us # 0 - operation name OPERATION = PRT-1010 : Operation : {0} +# 0 - object name +# 1 - outcome +# 2 - attributes +UPDATE = PRT-1011 : Update : "{0}" : {1} : {2} + diff --git a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/QueueMessages.java b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/QueueMessages.java index ee10dc3..3fa7599 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/QueueMessages.java +++ b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/QueueMessages.java @@ -70,6 +70,7 @@ public class QueueMessages public static final String OPERATION_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "queue.operation"; public static final String OVERFULL_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "queue.overfull"; public static final String UNDERFULL_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "queue.underfull"; + public static final String UPDATE_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "queue.update"; static { @@ -81,6 +82,7 @@ public class QueueMessages LoggerFactory.getLogger(OPERATION_LOG_HIERARCHY); LoggerFactory.getLogger(OVERFULL_LOG_HIERARCHY); LoggerFactory.getLogger(UNDERFULL_LOG_HIERARCHY); + LoggerFactory.getLogger(UPDATE_LOG_HIERARCHY); _messages = ResourceBundle.getBundle("org.apache.qpid.server.logging.messages.Queue_logmessages", _currentLocale); } @@ -568,6 +570,66 @@ public class QueueMessages }; } + /** + * Log a Queue message of the Format: + * <pre>QUE-1017 : Update : {0} : {1} : {2}</pre> + * Optional values are contained in [square brackets] and are numbered + * sequentially in the method call. + * + */ + public static LogMessage UPDATE(String param1, String param2, String param3) + { + String rawMessage = _messages.getString("UPDATE"); + + final Object[] messageArguments = {param1, param2, param3}; + // Create a new MessageFormat to ensure thread safety. + // Sharing a MessageFormat and using applyPattern is not thread safe + MessageFormat formatter = new MessageFormat(rawMessage, _currentLocale); + + final String message = formatter.format(messageArguments); + + return new LogMessage() + { + @Override + public String toString() + { + return message; + } + + @Override + public String getLogHierarchy() + { + return UPDATE_LOG_HIERARCHY; + } + + @Override + public boolean equals(final Object o) + { + if (this == o) + { + return true; + } + if (o == null || getClass() != o.getClass()) + { + return false; + } + + final LogMessage that = (LogMessage) o; + + return getLogHierarchy().equals(that.getLogHierarchy()) && toString().equals(that.toString()); + + } + + @Override + public int hashCode() + { + int result = toString().hashCode(); + result = 31 * result + getLogHierarchy().hashCode(); + return result; + } + }; + } + private QueueMessages() { diff --git a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/Queue_logmessages.properties b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/Queue_logmessages.properties index bfcf701..d0ad0b7 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/Queue_logmessages.properties +++ b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/Queue_logmessages.properties @@ -35,3 +35,8 @@ MALFORMED_MESSAGE = QUE-1006 : Malformed : {0} : {1} # 0 - operation name OPERATION = QUE-1016 : Operation : {0} + +# 0 - object name +# 1 - outcome +# 2 - attributes +UPDATE = QUE-1017 : Update : "{0}" : {1} : {2} diff --git a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/TrustStoreMessages.java b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/TrustStoreMessages.java index 8fd1e9d..5f93e28 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/TrustStoreMessages.java +++ b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/TrustStoreMessages.java @@ -69,6 +69,7 @@ public class TrustStoreMessages public static final String EXPIRING_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "truststore.expiring"; public static final String OPEN_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "truststore.open"; public static final String OPERATION_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "truststore.operation"; + public static final String UPDATE_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "truststore.update"; static { @@ -79,6 +80,7 @@ public class TrustStoreMessages LoggerFactory.getLogger(EXPIRING_LOG_HIERARCHY); LoggerFactory.getLogger(OPEN_LOG_HIERARCHY); LoggerFactory.getLogger(OPERATION_LOG_HIERARCHY); + LoggerFactory.getLogger(UPDATE_LOG_HIERARCHY); _messages = ResourceBundle.getBundle("org.apache.qpid.server.logging.messages.TrustStore_logmessages", _currentLocale); } @@ -375,7 +377,7 @@ public class TrustStoreMessages /** * Log a TrustStore message of the Format: - * <pre>TST-1005 : Operation : {0}</pre> + * <pre>TST-1006 : Operation : {0}</pre> * Optional values are contained in [square brackets] and are numbered * sequentially in the method call. * @@ -433,6 +435,66 @@ public class TrustStoreMessages }; } + /** + * Log a TrustStore message of the Format: + * <pre>TST-1007 : Update : {0} : {1} : {2}</pre> + * Optional values are contained in [square brackets] and are numbered + * sequentially in the method call. + * + */ + public static LogMessage UPDATE(String param1, String param2, String param3) + { + String rawMessage = _messages.getString("UPDATE"); + + final Object[] messageArguments = {param1, param2, param3}; + // Create a new MessageFormat to ensure thread safety. + // Sharing a MessageFormat and using applyPattern is not thread safe + MessageFormat formatter = new MessageFormat(rawMessage, _currentLocale); + + final String message = formatter.format(messageArguments); + + return new LogMessage() + { + @Override + public String toString() + { + return message; + } + + @Override + public String getLogHierarchy() + { + return UPDATE_LOG_HIERARCHY; + } + + @Override + public boolean equals(final Object o) + { + if (this == o) + { + return true; + } + if (o == null || getClass() != o.getClass()) + { + return false; + } + + final LogMessage that = (LogMessage) o; + + return getLogHierarchy().equals(that.getLogHierarchy()) && toString().equals(that.toString()); + + } + + @Override + public int hashCode() + { + int result = toString().hashCode(); + result = 31 * result + getLogHierarchy().hashCode(); + return result; + } + }; + } + private TrustStoreMessages() { diff --git a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/TrustStore_logmessages.properties b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/TrustStore_logmessages.properties index 494f832..b20b676 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/TrustStore_logmessages.properties +++ b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/TrustStore_logmessages.properties @@ -23,7 +23,12 @@ OPEN = TST-1002 : Open CLOSE = TST-1003 : Close DELETE = TST-1004 : Delete "{0}" # 0 - operation name -OPERATION = TST-1005 : Operation : {0} +OPERATION = TST-1006 : Operation : {0} EXPIRING = TST-1005 : TrustStore {0} Certificate expires in {1} days : {2} +# 0 - object name +# 1 - outcome +# 2 - attributes +UPDATE = TST-1007 : Update : "{0}" : {1} : {2} + diff --git a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/VirtualHostMessages.java b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/VirtualHostMessages.java index a4413f4..42fa9aa 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/VirtualHostMessages.java +++ b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/VirtualHostMessages.java @@ -65,20 +65,24 @@ public class VirtualHostMessages public static final String VIRTUALHOST_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "virtualhost"; public static final String CLOSED_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "virtualhost.closed"; public static final String CREATED_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "virtualhost.created"; + public static final String DELETE_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "virtualhost.delete"; public static final String ERRORED_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "virtualhost.errored"; public static final String FILESYSTEM_FULL_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "virtualhost.filesystem_full"; public static final String FILESYSTEM_NOTFULL_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "virtualhost.filesystem_notfull"; public static final String OPERATION_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "virtualhost.operation"; + public static final String UPDATE_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "virtualhost.update"; static { LoggerFactory.getLogger(VIRTUALHOST_LOG_HIERARCHY); LoggerFactory.getLogger(CLOSED_LOG_HIERARCHY); LoggerFactory.getLogger(CREATED_LOG_HIERARCHY); + LoggerFactory.getLogger(DELETE_LOG_HIERARCHY); LoggerFactory.getLogger(ERRORED_LOG_HIERARCHY); LoggerFactory.getLogger(FILESYSTEM_FULL_LOG_HIERARCHY); LoggerFactory.getLogger(FILESYSTEM_NOTFULL_LOG_HIERARCHY); LoggerFactory.getLogger(OPERATION_LOG_HIERARCHY); + LoggerFactory.getLogger(UPDATE_LOG_HIERARCHY); _messages = ResourceBundle.getBundle("org.apache.qpid.server.logging.messages.VirtualHost_logmessages", _currentLocale); } @@ -205,6 +209,66 @@ public class VirtualHostMessages /** * Log a VirtualHost message of the Format: + * <pre>VHT-1010 : Delete : {0} : {1}</pre> + * Optional values are contained in [square brackets] and are numbered + * sequentially in the method call. + * + */ + public static LogMessage DELETE(String param1, String param2) + { + String rawMessage = _messages.getString("DELETE"); + + final Object[] messageArguments = {param1, param2}; + // Create a new MessageFormat to ensure thread safety. + // Sharing a MessageFormat and using applyPattern is not thread safe + MessageFormat formatter = new MessageFormat(rawMessage, _currentLocale); + + final String message = formatter.format(messageArguments); + + return new LogMessage() + { + @Override + public String toString() + { + return message; + } + + @Override + public String getLogHierarchy() + { + return DELETE_LOG_HIERARCHY; + } + + @Override + public boolean equals(final Object o) + { + if (this == o) + { + return true; + } + if (o == null || getClass() != o.getClass()) + { + return false; + } + + final LogMessage that = (LogMessage) o; + + return getLogHierarchy().equals(that.getLogHierarchy()) && toString().equals(that.toString()); + + } + + @Override + public int hashCode() + { + int result = toString().hashCode(); + result = 31 * result + getLogHierarchy().hashCode(); + return result; + } + }; + } + + /** + * Log a VirtualHost message of the Format: * <pre>VHT-1005 : {0} Unexpected fatal error</pre> * Optional values are contained in [square brackets] and are numbered * sequentially in the method call. @@ -443,6 +507,66 @@ public class VirtualHostMessages }; } + /** + * Log a VirtualHost message of the Format: + * <pre>VHT-1009 : Update : {0} : {1} : {2}</pre> + * Optional values are contained in [square brackets] and are numbered + * sequentially in the method call. + * + */ + public static LogMessage UPDATE(String param1, String param2, String param3) + { + String rawMessage = _messages.getString("UPDATE"); + + final Object[] messageArguments = {param1, param2, param3}; + // Create a new MessageFormat to ensure thread safety. + // Sharing a MessageFormat and using applyPattern is not thread safe + MessageFormat formatter = new MessageFormat(rawMessage, _currentLocale); + + final String message = formatter.format(messageArguments); + + return new LogMessage() + { + @Override + public String toString() + { + return message; + } + + @Override + public String getLogHierarchy() + { + return UPDATE_LOG_HIERARCHY; + } + + @Override + public boolean equals(final Object o) + { + if (this == o) + { + return true; + } + if (o == null || getClass() != o.getClass()) + { + return false; + } + + final LogMessage that = (LogMessage) o; + + return getLogHierarchy().equals(that.getLogHierarchy()) && toString().equals(that.toString()); + + } + + @Override + public int hashCode() + { + int result = toString().hashCode(); + result = 31 * result + getLogHierarchy().hashCode(); + return result; + } + }; + } + private VirtualHostMessages() { diff --git a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/VirtualHost_logmessages.properties b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/VirtualHost_logmessages.properties index 17c2af9..f84b37d 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/logging/messages/VirtualHost_logmessages.properties +++ b/broker-core/src/main/java/org/apache/qpid/server/logging/messages/VirtualHost_logmessages.properties @@ -28,3 +28,12 @@ FILESYSTEM_NOTFULL = VHT-1007 : Filesystem is no longer over {0,number} per cent # 0 - operation name OPERATION = VHT-1008 : Operation : {0} + +# 0 - object name +# 1 - outcome +# 2 - attributes +UPDATE = VHT-1009 : Update : "{0}" : {1} : {2} + +# 0 - object name +# 1 - outcome +DELETE = VHT-1010 : Delete : "{0}" : {1} diff --git a/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/QueueLogSubject.java b/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/QueueLogSubject.java index 3ec57eb..4e6d97f 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/QueueLogSubject.java +++ b/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/QueueLogSubject.java @@ -28,10 +28,14 @@ public class QueueLogSubject extends AbstractLogSubject { /** Create an QueueLogSubject that Logs in the following format. */ + @Deprecated public QueueLogSubject(Queue<?> queue) { - setLogStringWithFormat(QUEUE_FORMAT, - queue.getVirtualHost().getName(), - queue.getName()); + this(queue.getName(), queue.getVirtualHost().getName()); + } + + public QueueLogSubject(String name, String virtualHostName) + { + setLogStringWithFormat(QUEUE_FORMAT, virtualHostName, name); } } diff --git a/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java b/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java index 267356c..d8144f8 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java +++ b/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java @@ -60,6 +60,7 @@ import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Supplier; import java.util.regex.Pattern; +import java.util.stream.Collectors; import javax.security.auth.Subject; import javax.security.auth.SubjectDomainCombiner; @@ -71,6 +72,13 @@ import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; import com.google.common.util.concurrent.SettableFuture; + +import org.apache.qpid.server.logging.CreateLogMessage; +import org.apache.qpid.server.logging.DeleteLogMessage; +import org.apache.qpid.server.logging.LogMessage; +import org.apache.qpid.server.logging.Outcome; +import org.apache.qpid.server.logging.UpdateLogMessage; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -588,7 +596,8 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im doResolution(true, exceptionHandler); doValidation(true, exceptionHandler); doOpening(true, exceptionHandler); - return doAttainState(exceptionHandler); + return doAttainState(exceptionHandler, + object -> object.logRecovered(Outcome.SUCCESS)); } catch (RuntimeException e) { @@ -600,7 +609,6 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im { return Futures.immediateFuture(null); } - } @Override @@ -722,7 +730,6 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im childCloseFutures.add(childCloseFuture); } }); - ListenableFuture<List<Void>> combinedFuture = Futures.allAsList(childCloseFutures); return doAfter(combinedFuture, new Runnable() { @@ -894,7 +901,8 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im { doCreation(true, unregisteringExceptionHandler); doOpening(true, unregisteringExceptionHandler); - return doAttainState(unregisteringExceptionHandler); + return doAttainState(unregisteringExceptionHandler, + object -> object.logCreated(getActualAttributes(), Outcome.SUCCESS)); } catch (RuntimeException e) { @@ -1032,7 +1040,8 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im { } - private ListenableFuture<Void> doAttainState(final AbstractConfiguredObjectExceptionHandler exceptionHandler) + private ListenableFuture<Void> doAttainState(final AbstractConfiguredObjectExceptionHandler exceptionHandler, + final Action<AbstractConfiguredObject<?>> postAction) { final List<ListenableFuture<Void>> childStateFutures = new ArrayList<>(); @@ -1047,7 +1056,7 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im if(abstractConfiguredChild._dynamicState.get().getDynamicState() == DynamicState.OPENED) { final AbstractConfiguredObject configuredObject = abstractConfiguredChild; - childStateFutures.add(configuredObject.doAttainState(exceptionHandler)); + childStateFutures.add(configuredObject.doAttainState(exceptionHandler, postAction)); } } else if(child instanceof AbstractConfiguredObjectProxy @@ -1075,6 +1084,7 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im @Override public void onSuccess(final Void result1) { + postAction.performAction(AbstractConfiguredObject.this); returnVal.set(null); } @@ -2066,6 +2076,23 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im @Override public ListenableFuture<C> execute() { + ListenableFuture<C> result = null; + try + { + result = create(); + } + finally + { + if (result == null) + { + logCreated(childClass, attributes, Outcome.FAILURE); + } + } + return result; + } + + private ListenableFuture<C> create() + { authoriseCreateChild(childClass, attributes); return doAfter(addChildAsync(childClass, attributes), new CallableWithArgument<ListenableFuture<C>, C>() @@ -2222,7 +2249,37 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im { return Futures.immediateFuture(null); } + ListenableFuture<Void> result = null; + try + { + result = deleteWithChecks(); + addFutureCallback(result, new FutureCallback<Void>() + { + @Override + public void onSuccess(final Void result11) + { + logDeleted(Outcome.SUCCESS); + } + + @Override + public void onFailure(final Throwable t) + { + logDeleted(Outcome.FAILURE); + } + }, MoreExecutors.directExecutor()); + return result; + } + finally + { + if (result == null) + { + logDeleted(Outcome.FAILURE); + } + } + } + private ListenableFuture<Void> deleteWithChecks() + { Map<String, Object> attributes = Collections.singletonMap(ConfiguredObject.DESIRED_STATE, State.DELETED); ConfiguredObject<?> proxyForValidation = createProxyForValidation(attributes); authoriseSetAttributes(proxyForValidation, attributes); @@ -2421,9 +2478,6 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im attributeSet(ConfiguredObject.DESIRED_STATE, currentDesiredState, State.DELETED); unregister(true); - LOGGER.debug("Delete {} : {}", - simpleClassName, - getName()); return Futures.immediateFuture(null); }); addFutureCallback(future, new FutureCallback<Void>() @@ -2478,6 +2532,10 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im @Override public void onSuccess(final Void result) { + if (child instanceof AbstractConfiguredObject<?>) + { + ((AbstractConfiguredObject)child).logDeleted(Outcome.SUCCESS); + } } @Override @@ -2485,6 +2543,11 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im { LOGGER.error("Exception occurred while deleting {} : {}", child.getClass().getSimpleName(), child.getName(), t); + + if (child instanceof AbstractConfiguredObject<?>) + { + ((AbstractConfiguredObject)child).logDeleted(Outcome.FAILURE); + } } }, getTaskExecutor()); childDeleteFutures.add(childDeleteFuture); @@ -2923,6 +2986,21 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im @Override public Void execute() { + Outcome outcome = Outcome.FAILURE; + try + { + setAttributes(); + outcome = Outcome.SUCCESS; + } + finally + { + logUpdated(updateAttributes, outcome); + } + return null; + } + + private void setAttributes() + { authoriseSetAttributes(createProxyForValidation(attributes), attributes); if (!isSystemProcess()) { @@ -2930,7 +3008,6 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im } changeAttributes(updateAttributes); - return null; } @Override @@ -3598,16 +3675,107 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im } else { - LOGGER.info(getCategoryClass().getSimpleName() - + "(" - + getName() - + ") : Operation " - + operation - + " invoked by user " - + AuthenticatedPrincipal.getCurrentUser().getName()); + LOGGER.info("{} : {} ({}) : Operation : {}", + LogMessage.getActor(), + getCategoryClass().getSimpleName(), + getName(), + operation); } } + protected void logUpdated(final Map<String, Object> attributes, final Outcome outcome) + { + final EventLogger eventLogger = getEventLogger(); + if (eventLogger != null) + { + eventLogger.message(new UpdateLogMessage(this, attributesAsString(attributes), outcome)); + } + else + { + LOGGER.info("{} : {} ({}) : Update : {} : {}", + LogMessage.getActor(), + getCategoryClass().getSimpleName(), + getName(), + outcome, + attributesAsString(attributes)); + } + } + + protected void logCreated(final Map<String, Object> attributes, + final Outcome outcome) + { + logCreated(getCategoryClass(), attributes, outcome); + } + + private void logCreated(final Class<? extends ConfiguredObject> categoryClass, + final Map<String, Object> attributes, + final Outcome outcome) + { + final EventLogger eventLogger = getEventLogger(); + if (eventLogger != null) + { + final String name = + attributes != null && attributes.containsKey(NAME) ? String.valueOf(attributes.get(NAME)) : ""; + eventLogger.message(new CreateLogMessage(outcome, categoryClass, name, attributesAsString(attributes))); + } + else + { + LOGGER.info("{} : {} ({}) : Create : {} : {}", + LogMessage.getActor(), + getCategoryClass().getSimpleName(), + getName(), + outcome, + attributesAsString(getActualAttributes())); + } + } + + protected void logRecovered(final Outcome outcome) + { + LOGGER.debug("{} : {} ({}) : Recover : {}", + LogMessage.getActor(), + getCategoryClass().getSimpleName(), + getName(), + outcome); + } + + protected void logDeleted(final Outcome outcome) + { + final EventLogger eventLogger = getEventLogger(); + if (eventLogger != null) + { + eventLogger.message(new DeleteLogMessage(this, outcome)); + } + else + { + LOGGER.debug("{} : {} ({}) : Delete : {}", + LogMessage.getActor(), + getCategoryClass().getSimpleName(), + getName(), + outcome); + } + } + + protected String attributesAsString(final Map<String, Object> attributes) + { + return attributes.entrySet() + .stream() + .filter(e -> _attributeTypes.get(e.getKey()) != null) + .sorted(Map.Entry.comparingByKey()) + .map(e -> { + final ConfiguredObjectAttribute<?, ?> attributeType = _attributeTypes.get(e.getKey()); + Object value = e.getValue(); + if (attributeType.isSecureValue(value)) + { + value = SECURED_STRING_VALUE; + } + else if (value instanceof Date) + { + value = ((Date)value).toInstant().toString(); + } + return String.format("%s=%s", e.getKey(), value); + }).collect(Collectors.joining(",", "{", "}")); + } + //========================================================================================= static String interpolate(ConfiguredObject<?> object, String value) @@ -3939,7 +4107,9 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im { if(source instanceof AbstractConfiguredObject<?>) { - ((AbstractConfiguredObject)source).handleExceptionOnOpen(exception); + AbstractConfiguredObject object = (AbstractConfiguredObject) source; + object.logRecovered(Outcome.FAILURE); + object.handleExceptionOnOpen(exception); } else if(source instanceof AbstractConfiguredObjectProxy) { @@ -3972,7 +4142,9 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im // TODO - RG - This isn't right :-( if (source instanceof AbstractConfiguredObject) { - ((AbstractConfiguredObject) source).deleteNoChecks(); + final AbstractConfiguredObject object = (AbstractConfiguredObject) source; + object.logCreated(object.getActualAttributes(), Outcome.FAILURE); + object.deleteNoChecks(); } else if (source instanceof AbstractConfiguredObjectProxy) { diff --git a/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostNode.java b/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostNode.java index 54c112f..2cc663b 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostNode.java +++ b/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostNode.java @@ -22,12 +22,14 @@ package org.apache.qpid.server.model; import java.util.Collection; +import org.apache.qpid.server.logging.EventLoggerProvider; import org.apache.qpid.server.store.DurableConfigurationStore; import org.apache.qpid.server.store.preferences.PreferenceStoreAttributes; import org.apache.qpid.server.store.preferences.PreferencesRoot; @ManagedObject(category=true, managesChildren=true, amqpName = "org.apache.qpid.VirtualHostNode") -public interface VirtualHostNode<X extends VirtualHostNode<X>> extends ConfiguredObject<X>, PreferencesRoot +public interface VirtualHostNode<X extends VirtualHostNode<X>> extends ConfiguredObject<X>, PreferencesRoot, + EventLoggerProvider { String QPID_INITIAL_CONFIG_VIRTUALHOST_CONFIG_VAR = "qpid.initial_config_virtualhost_config"; @ManagedContextDefault(name = QPID_INITIAL_CONFIG_VIRTUALHOST_CONFIG_VAR) diff --git a/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java b/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java index 55098f4..64ef027 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java +++ b/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java @@ -36,6 +36,7 @@ import org.slf4j.LoggerFactory; import org.apache.qpid.server.configuration.CommonProperties; import org.apache.qpid.server.configuration.IllegalConfigurationException; import org.apache.qpid.server.logging.EventLogger; +import org.apache.qpid.server.logging.Outcome; import org.apache.qpid.server.logging.messages.PortMessages; import org.apache.qpid.server.model.*; import org.apache.qpid.server.security.ManagedPeerCertificateTrustStore; @@ -97,7 +98,6 @@ public abstract class AbstractPort<X extends AbstractPort<X>> extends AbstractCo _container = container; _eventLogger = container.getEventLogger(); - _eventLogger.message(PortMessages.CREATE(getName())); } @Override @@ -374,13 +374,6 @@ public abstract class AbstractPort<X extends AbstractPort<X>> extends AbstractCo return getChildren(Connection.class); } - @Override - protected ListenableFuture<Void> onDelete() - { - _eventLogger.message(PortMessages.DELETE(getType(), getName())); - return super.onDelete(); - } - @StateTransition( currentState = {State.UNINITIALIZED, State.QUIESCED, State.ERRORED}, desiredState = State.ACTIVE ) protected ListenableFuture<Void> activate() { @@ -528,4 +521,49 @@ public abstract class AbstractPort<X extends AbstractPort<X>> extends AbstractCo protected abstract boolean updateSSLContext(); + @Override + protected void logCreated(final Map<String, Object> attributes, + final Outcome outcome) + { + if (outcome == Outcome.SUCCESS) + { + _eventLogger.message(PortMessages.CREATE(getName())); + } + else + { + super.logCreated(attributes, outcome); + } + } + + @Override + protected void logRecovered(final Outcome outcome) + { + if (outcome == Outcome.SUCCESS) + { + _eventLogger.message(PortMessages.CREATE(getName())); + } + else + { + super.logRecovered(outcome); + } + } + + @Override + protected void logDeleted(final Outcome outcome) + { + if (outcome == Outcome.SUCCESS) + { + _eventLogger.message(PortMessages.DELETE(getType(), getName())); + } + else + { + super.logDeleted(outcome); + } + } + + @Override + protected void logUpdated(final Map<String, Object> attributes, final Outcome outcome) + { + _eventLogger.message(PortMessages.UPDATE(getName(), String.valueOf(outcome), attributesAsString(attributes))); + } } diff --git a/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java b/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java index b8ec384..dc0df9f 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java +++ b/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java @@ -82,6 +82,7 @@ import org.apache.qpid.server.filter.selector.ParseException; import org.apache.qpid.server.filter.selector.TokenMgrError; import org.apache.qpid.server.logging.EventLogger; import org.apache.qpid.server.logging.LogMessage; +import org.apache.qpid.server.logging.Outcome; import org.apache.qpid.server.logging.LogSubject; import org.apache.qpid.server.logging.messages.QueueMessages; import org.apache.qpid.server.logging.messages.SenderMessages; @@ -300,6 +301,7 @@ public abstract class AbstractQueue<X extends AbstractQueue<X>> _queueConsumerManager = new QueueConsumerManagerImpl(this); _virtualHost = virtualHost; + _logSubject = new QueueLogSubject(getName(), _virtualHost.getName()); } @Override @@ -367,8 +369,6 @@ public abstract class AbstractQueue<X extends AbstractQueue<X>> _arguments = Collections.synchronizedMap(arguments); - _logSubject = new QueueLogSubject(this); - _queueHouseKeepingTask = new AdvanceConsumersTask(); Subject activeSubject = Subject.getSubject(AccessController.getContext()); Set<SessionPrincipal> sessionPrincipals = activeSubject == null ? Collections.emptySet() : activeSubject.getPrincipals(SessionPrincipal.class); @@ -489,11 +489,6 @@ public abstract class AbstractQueue<X extends AbstractQueue<X>> } - // Log the creation of this Queue. - // The priorities display is toggled on if we set priorities > 0 - getEventLogger().message(_logSubject, - getCreatedLogMessage()); - switch(getMessageGroupType()) { case NONE: @@ -2032,8 +2027,6 @@ public abstract class AbstractQueue<X extends AbstractQueue<X>> performQueueDeleteTasks(); - //Log Queue Deletion - getEventLogger().message(_logSubject, QueueMessages.DELETED(getId().toString())); _deleteQueueDepthFuture.set(queueDepthMessages); _transactions.clear(); @@ -3970,4 +3963,52 @@ public abstract class AbstractQueue<X extends AbstractQueue<X>> } } + @Override + protected void logCreated(final Map<String, Object> attributes, + final Outcome outcome) + { + if (outcome == Outcome.SUCCESS) + { + getEventLogger().message(_logSubject, getCreatedLogMessage()); + } + else + { + super.logCreated(attributes, outcome); + } + } + + @Override + protected void logRecovered(final Outcome outcome) + { + if (outcome == Outcome.SUCCESS) + { + getEventLogger().message(_logSubject, getCreatedLogMessage()); + } + else + { + super.logRecovered(outcome); + } + } + + @Override + protected void logDeleted(final Outcome outcome) + { + if (outcome == Outcome.SUCCESS) + { + getEventLogger().message(_logSubject, QueueMessages.DELETED(getId().toString())); + } + else + { + super.logDeleted(outcome); + } + } + + @Override + protected void logUpdated(final Map<String, Object> attributes, final Outcome outcome) + { + getEventLogger().message(_logSubject, + QueueMessages.UPDATE(getName(), + String.valueOf(outcome), + attributesAsString(attributes))); + } } diff --git a/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerImpl.java b/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerImpl.java index 8fe2342..a899b3c 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerImpl.java +++ b/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerImpl.java @@ -45,6 +45,8 @@ import org.apache.qpid.server.filter.JMSSelectorFilter; import org.apache.qpid.server.filter.MessageFilter; import org.apache.qpid.server.filter.SelectorParsingException; import org.apache.qpid.server.logging.EventLogger; +import org.apache.qpid.server.logging.LogMessage; +import org.apache.qpid.server.logging.Outcome; import org.apache.qpid.server.logging.LogSubject; import org.apache.qpid.server.logging.messages.SubscriptionMessages; import org.apache.qpid.server.logging.subjects.QueueLogSubject; @@ -568,7 +570,7 @@ class QueueConsumerImpl<T extends ConsumerTarget> } else { - String queueString = new QueueLogSubject(_queue).toLogString(); + String queueString = new QueueLogSubject(getName(), getName()).toLogString(); logString = "[" + MessageFormat.format(SUBSCRIPTION_FORMAT, getConsumerNumber()) + "(" // queueString is [vh(/{0})/qu({1}) ] so need to trim @@ -627,4 +629,25 @@ class QueueConsumerImpl<T extends ConsumerTarget> } } + + @Override + protected void logCreated(final Map<String, Object> attributes, + final Outcome outcome) + { + LOGGER.debug("{} : {} ({}) : Create : {}", + LogMessage.getActor(), + getCategoryClass().getSimpleName(), + getName(), + outcome); + } + + @Override + protected void logDeleted(final Outcome outcome) + { + LOGGER.debug("{} : {} ({}) : Delete : {}", + LogMessage.getActor(), + getCategoryClass().getSimpleName(), + getName(), + outcome); + } } diff --git a/broker-core/src/main/java/org/apache/qpid/server/security/AbstractKeyStore.java b/broker-core/src/main/java/org/apache/qpid/server/security/AbstractKeyStore.java index 1df12c9..18f06b0 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/security/AbstractKeyStore.java +++ b/broker-core/src/main/java/org/apache/qpid/server/security/AbstractKeyStore.java @@ -39,6 +39,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.qpid.server.logging.EventLogger; +import org.apache.qpid.server.logging.Outcome; import org.apache.qpid.server.logging.messages.KeyStoreMessages; import org.apache.qpid.server.model.AbstractConfigurationChangeListener; import org.apache.qpid.server.model.AbstractConfiguredObject; @@ -66,7 +67,6 @@ public abstract class AbstractKeyStore<X extends AbstractKeyStore<X>> _broker = broker; _eventLogger = broker.getEventLogger(); - _eventLogger.message(KeyStoreMessages.CREATE(getName())); } public final Broker<?> getBroker() @@ -98,7 +98,7 @@ public abstract class AbstractKeyStore<X extends AbstractKeyStore<X>> @Override protected void logOperation(final String operation) { - _broker.getEventLogger().message(KeyStoreMessages.OPERATION(operation)); + _eventLogger.message(KeyStoreMessages.OPERATION(operation)); } protected void initializeExpiryChecking() @@ -168,7 +168,6 @@ public abstract class AbstractKeyStore<X extends AbstractKeyStore<X>> protected ListenableFuture<Void> onDelete() { onCloseOrDelete(); - getEventLogger().message(KeyStoreMessages.DELETE(getName())); return super.onDelete(); } @@ -217,4 +216,52 @@ public abstract class AbstractKeyStore<X extends AbstractKeyStore<X>> } protected abstract Collection<Certificate> getCertificates(); + + @Override + protected void logCreated(final Map<String, Object> attributes, + final Outcome outcome) + { + if (outcome == Outcome.SUCCESS) + { + _eventLogger.message(KeyStoreMessages.CREATE(getName())); + } + else + { + super.logCreated(attributes, outcome); + } + } + + @Override + protected void logRecovered(final Outcome outcome) + { + if (outcome == Outcome.SUCCESS) + { + _eventLogger.message(KeyStoreMessages.CREATE(getName())); + } + else + { + super.logRecovered(outcome); + } + } + + @Override + protected void logDeleted(final Outcome outcome) + { + if (outcome == Outcome.SUCCESS) + { + _eventLogger.message(KeyStoreMessages.DELETE(getName())); + } + else + { + super.logDeleted(outcome); + } + } + + @Override + protected void logUpdated(final Map<String, Object> attributes, final Outcome outcome) + { + _eventLogger.message(KeyStoreMessages.UPDATE(getName(), + String.valueOf(outcome), + attributesAsString(attributes))); + } } diff --git a/broker-core/src/main/java/org/apache/qpid/server/security/AbstractTrustStore.java b/broker-core/src/main/java/org/apache/qpid/server/security/AbstractTrustStore.java index 7285aa8..d88f6eb 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/security/AbstractTrustStore.java +++ b/broker-core/src/main/java/org/apache/qpid/server/security/AbstractTrustStore.java @@ -66,6 +66,8 @@ import javax.net.ssl.X509TrustManager; import com.google.common.collect.Sets; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; + +import org.apache.qpid.server.logging.Outcome; import org.apache.qpid.server.transport.network.security.ssl.SSLUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -122,7 +124,6 @@ public abstract class AbstractTrustStore<X extends AbstractTrustStore<X>> _broker = broker; _eventLogger = broker.getEventLogger(); - _eventLogger.message(TrustStoreMessages.CREATE(getName())); } public final Broker<?> getBroker() @@ -170,6 +171,54 @@ public abstract class AbstractTrustStore<X extends AbstractTrustStore<X>> return Futures.immediateFuture(null); } + @Override + protected void logCreated(final Map<String, Object> attributes, + final Outcome outcome) + { + if (outcome == Outcome.SUCCESS) + { + _eventLogger.message(TrustStoreMessages.CREATE(getName())); + } + else + { + super.logCreated(attributes, outcome); + } + } + + @Override + protected void logRecovered(final Outcome outcome) + { + if (outcome == Outcome.SUCCESS) + { + _eventLogger.message(TrustStoreMessages.CREATE(getName())); + } + else + { + super.logRecovered(outcome); + } + } + + @Override + protected void logDeleted(final Outcome outcome) + { + if (outcome == Outcome.SUCCESS) + { + _eventLogger.message(TrustStoreMessages.DELETE(getName())); + } + else + { + super.logDeleted(outcome); + } + } + + @Override + protected void logUpdated(final Map<String, Object> attributes, final Outcome outcome) + { + _eventLogger.message(TrustStoreMessages.UPDATE(getName(), + String.valueOf(outcome), + attributesAsString(attributes))); + } + private void onCloseOrDelete() { if(_checkExpiryTaskFuture != null) @@ -217,7 +266,6 @@ public abstract class AbstractTrustStore<X extends AbstractTrustStore<X>> protected ListenableFuture<Void> onDelete() { onCloseOrDelete(); - _eventLogger.message(TrustStoreMessages.DELETE(getName())); return super.onDelete(); } diff --git a/broker-core/src/main/java/org/apache/qpid/server/security/AutoGeneratedSelfSignedKeyStoreImpl.java b/broker-core/src/main/java/org/apache/qpid/server/security/AutoGeneratedSelfSignedKeyStoreImpl.java index 1ff9803..41a9c48 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/security/AutoGeneratedSelfSignedKeyStoreImpl.java +++ b/broker-core/src/main/java/org/apache/qpid/server/security/AutoGeneratedSelfSignedKeyStoreImpl.java @@ -60,7 +60,6 @@ import com.google.common.util.concurrent.ListenableFuture; import org.apache.qpid.server.configuration.IllegalConfigurationException; import org.apache.qpid.server.logging.EventLogger; -import org.apache.qpid.server.logging.messages.KeyStoreMessages; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.Content; import org.apache.qpid.server.model.CustomRestHeaders; @@ -105,7 +104,6 @@ public class AutoGeneratedSelfSignedKeyStoreImpl super(attributes, broker); _broker = broker; _eventLogger = _broker.getEventLogger(); - _eventLogger.message(KeyStoreMessages.CREATE(getName())); } @Override @@ -494,10 +492,4 @@ public class AutoGeneratedSelfSignedKeyStoreImpl } - - @Override - protected void logOperation(final String operation) - { - _broker.getEventLogger().message(KeyStoreMessages.OPERATION(operation)); - } } diff --git a/broker-core/src/main/java/org/apache/qpid/server/security/access/AbstractAccessControlProvider.java b/broker-core/src/main/java/org/apache/qpid/server/security/access/AbstractAccessControlProvider.java index 95ffa70..05b8c63 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/security/access/AbstractAccessControlProvider.java +++ b/broker-core/src/main/java/org/apache/qpid/server/security/access/AbstractAccessControlProvider.java @@ -27,11 +27,11 @@ import com.google.common.util.concurrent.ListenableFuture; import org.apache.qpid.server.logging.EventLogger; import org.apache.qpid.server.logging.EventLoggerProvider; +import org.apache.qpid.server.logging.Outcome; import org.apache.qpid.server.logging.messages.AccessControlMessages; import org.apache.qpid.server.model.AbstractConfiguredObject; import org.apache.qpid.server.model.CommonAccessControlProvider; import org.apache.qpid.server.model.ConfiguredObject; -import org.apache.qpid.server.model.Container; import org.apache.qpid.server.model.ManagedAttributeField; import org.apache.qpid.server.model.State; import org.apache.qpid.server.model.StateTransition; @@ -48,11 +48,7 @@ public abstract class AbstractAccessControlProvider<X extends AbstractAccessCont public AbstractAccessControlProvider(Map<String, Object> attributes, T parent) { super(parent, attributes); - _eventLogger = parent.getEventLogger(); - _eventLogger.message(AccessControlMessages.CREATE(getName())); - - } @Override @@ -82,15 +78,55 @@ public abstract class AbstractAccessControlProvider<X extends AbstractAccessCont } @Override - protected ListenableFuture<Void> onDelete() + protected void logOperation(final String operation) { - getEventLogger().message(AccessControlMessages.DELETE(getName())); - return super.onDelete(); + getEventLogger().message(AccessControlMessages.OPERATION(operation)); } @Override - protected void logOperation(final String operation) + protected void logCreated(final Map<String, Object> attributes, + final Outcome outcome) + { + if (outcome == Outcome.SUCCESS) + { + getEventLogger().message(AccessControlMessages.CREATE(getName())); + } + else + { + super.logCreated(attributes, outcome); + } + } + + @Override + protected void logRecovered(final Outcome outcome) + { + if (outcome == Outcome.SUCCESS) + { + getEventLogger().message(AccessControlMessages.CREATE(getName())); + } + else + { + super.logRecovered(outcome); + } + } + + @Override + protected void logDeleted(final Outcome outcome) + { + if (outcome == Outcome.SUCCESS) + { + getEventLogger().message(AccessControlMessages.DELETE(getName())); + } + else + { + super.logDeleted(outcome); + } + } + + + @Override + protected void logUpdated(final Map<String, Object> attributes, final Outcome outcome) { - getAncestor(Container.class).getEventLogger().message(AccessControlMessages.OPERATION(operation)); + getEventLogger().message(AccessControlMessages.UPDATE(getName(), outcome.name(), attributesAsString(attributes))); } } diff --git a/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AbstractAuthenticationManager.java b/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AbstractAuthenticationManager.java index 337b109..8397302 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AbstractAuthenticationManager.java +++ b/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AbstractAuthenticationManager.java @@ -21,7 +21,6 @@ package org.apache.qpid.server.security.auth.manager; import java.util.ArrayList; -import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -33,14 +32,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.qpid.server.logging.EventLogger; +import org.apache.qpid.server.logging.Outcome; import org.apache.qpid.server.logging.messages.AuthenticationProviderMessages; import org.apache.qpid.server.model.AbstractConfiguredObject; import org.apache.qpid.server.model.AuthenticationProvider; -import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.Container; -import org.apache.qpid.server.model.IntegrityViolationException; import org.apache.qpid.server.model.ManagedAttributeField; -import org.apache.qpid.server.model.Port; import org.apache.qpid.server.model.State; import org.apache.qpid.server.model.StateTransition; import org.apache.qpid.server.model.SystemConfig; @@ -66,7 +63,6 @@ public abstract class AbstractAuthenticationManager<T extends AbstractAuthentica super(container, attributes); _container = container; _eventLogger = _container.getEventLogger(); - _eventLogger.message(AuthenticationProviderMessages.CREATE(getName())); } @Override @@ -130,13 +126,6 @@ public abstract class AbstractAuthenticationManager<T extends AbstractAuthentica } @Override - protected ListenableFuture<Void> onDelete() - { - _eventLogger.message(AuthenticationProviderMessages.DELETE(getName())); - return super.onDelete(); - } - - @Override public final List<String> getSecureOnlyMechanisms() { return _secureOnlyMechanisms; @@ -159,4 +148,53 @@ public abstract class AbstractAuthenticationManager<T extends AbstractAuthentica { return _eventLogger; } + + @Override + protected void logCreated(final Map<String, Object> attributes, + final Outcome outcome) + { + if (outcome == Outcome.SUCCESS) + { + _eventLogger.message(AuthenticationProviderMessages.CREATE(getName())); + } + else + { + super.logCreated(attributes, outcome); + } + } + + @Override + protected void logRecovered(final Outcome outcome) + { + if (outcome == Outcome.SUCCESS) + { + _eventLogger.message(AuthenticationProviderMessages.CREATE(getName())); + } + else + { + super.logRecovered(outcome); + } + } + + @Override + protected void logDeleted(final Outcome outcome) + { + if (outcome == Outcome.SUCCESS) + { + getEventLogger().message(AuthenticationProviderMessages.DELETE(getName())); + } + else + { + super.logDeleted(outcome); + } + } + + @Override + protected void logUpdated(final Map<String, Object> attributes, final Outcome outcome) + { + getEventLogger().message(AuthenticationProviderMessages.UPDATE(getName(), + String.valueOf(outcome), + attributesAsString(attributes))); + } + } diff --git a/broker-core/src/main/java/org/apache/qpid/server/session/AbstractAMQPSession.java b/broker-core/src/main/java/org/apache/qpid/server/session/AbstractAMQPSession.java index 66a3839..05dd46e 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/session/AbstractAMQPSession.java +++ b/broker-core/src/main/java/org/apache/qpid/server/session/AbstractAMQPSession.java @@ -36,6 +36,8 @@ import javax.security.auth.Subject; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.apache.qpid.server.connection.SessionPrincipal; import org.apache.qpid.server.consumer.AbstractConsumerTarget; @@ -43,6 +45,8 @@ import org.apache.qpid.server.consumer.ConsumerTarget; import org.apache.qpid.server.consumer.ScheduledConsumerTargetSet; import org.apache.qpid.server.logging.EventLogger; import org.apache.qpid.server.logging.EventLoggerProvider; +import org.apache.qpid.server.logging.LogMessage; +import org.apache.qpid.server.logging.Outcome; import org.apache.qpid.server.logging.LogSubject; import org.apache.qpid.server.logging.messages.ChannelMessages; import org.apache.qpid.server.logging.subjects.ChannelLogSubject; @@ -65,6 +69,7 @@ public abstract class AbstractAMQPSession<S extends AbstractAMQPSession<S, X>, extends AbstractConfiguredObject<S> implements AMQPSession<S, X>, EventLoggerProvider { + private static final Logger LOGGER = LoggerFactory.getLogger(AbstractAMQPSession.class); private final Action _deleteModelTask; private final AMQPConnection<?> _connection; private final int _sessionId; @@ -374,4 +379,25 @@ public abstract class AbstractAMQPSession<S extends AbstractAMQPSession<S, X>, _transactedMessagesIn.incrementAndGet(); _connection.registerTransactedMessageReceived(); } + + @Override + protected void logCreated(final Map<String, Object> attributes, + final Outcome outcome) + { + LOGGER.debug("{} : {} ({}) : Create : {}", + LogMessage.getActor(), + getCategoryClass().getSimpleName(), + getName(), + outcome); + } + + @Override + protected void logDeleted(final Outcome outcome) + { + LOGGER.debug("{} : {} ({}) : Delete : {}", + LogMessage.getActor(), + getCategoryClass().getSimpleName(), + getName(), + outcome); + } } diff --git a/broker-core/src/main/java/org/apache/qpid/server/transport/AbstractAMQPConnection.java b/broker-core/src/main/java/org/apache/qpid/server/transport/AbstractAMQPConnection.java index 9281eca..2536036 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/transport/AbstractAMQPConnection.java +++ b/broker-core/src/main/java/org/apache/qpid/server/transport/AbstractAMQPConnection.java @@ -53,6 +53,7 @@ import org.apache.qpid.server.configuration.updater.TaskExecutor; import org.apache.qpid.server.connection.ConnectionPrincipal; import org.apache.qpid.server.logging.EventLogger; import org.apache.qpid.server.logging.EventLoggerProvider; +import org.apache.qpid.server.logging.Outcome; import org.apache.qpid.server.logging.LogSubject; import org.apache.qpid.server.logging.messages.ConnectionMessages; import org.apache.qpid.server.logging.subjects.ConnectionLogSubject; @@ -218,7 +219,6 @@ public abstract class AbstractAMQPConnection<C extends AbstractAMQPConnection<C, _lastReadTime = _lastWriteTime = _lastMessageInboundTime = _lastMessageOutboundTime = getCreatedTime().getTime(); _maxUncommittedInMemorySize = getContextValue(Long.class, Connection.MAX_UNCOMMITTED_IN_MEMORY_SIZE); _transactionObserver = _maxUncommittedInMemorySize < 0 ? FlowToDiskTransactionObserver.NOOP_TRANSACTION_OBSERVER : new FlowToDiskTransactionObserver(_maxUncommittedInMemorySize, _logSubject, _eventLoggerProvider.getEventLogger()); - logConnectionOpen(); } @Override @@ -666,7 +666,6 @@ public abstract class AbstractAMQPConnection<C extends AbstractAMQPConnection<C, @Override protected ListenableFuture<Void> onDelete() { - getEventLogger().message(_logSubject, ConnectionMessages.MODEL_DELETE()); return closeAsyncIfNotAlreadyClosing(); } @@ -1185,4 +1184,17 @@ public abstract class AbstractAMQPConnection<C extends AbstractAMQPConnection<C, } return _connectionPrincipalStatistics.getConnectionFrequency(); } + + @Override + protected void logCreated(final Map<String, Object> attributes, + final Outcome outcome) + { + logConnectionOpen(); + } + + @Override + protected void logDeleted(final Outcome outcome) + { + getEventLogger().message(_logSubject, ConnectionMessages.MODEL_DELETE()); + } } diff --git a/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java b/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java index 699f3c0..7a6286b 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java +++ b/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java @@ -86,6 +86,7 @@ import org.apache.qpid.server.exchange.DefaultDestination; import org.apache.qpid.server.exchange.ExchangeDefaults; import org.apache.qpid.server.filter.AMQInvalidArgumentException; import org.apache.qpid.server.logging.EventLogger; +import org.apache.qpid.server.logging.Outcome; import org.apache.qpid.server.logging.messages.MessageStoreMessages; import org.apache.qpid.server.logging.messages.VirtualHostMessages; import org.apache.qpid.server.logging.subjects.MessageStoreLogSubject; @@ -298,8 +299,6 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte final SystemConfig systemConfig = (SystemConfig) _broker.getParent(); _eventLogger = systemConfig.getEventLogger(); - _eventLogger.message(VirtualHostMessages.CREATED(getName())); - _principal = new VirtualHostPrincipal(this); if (systemConfig.isManagementMode()) @@ -3402,4 +3401,45 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte } } + + @Override + protected void logCreated(final Map<String, Object> attributes, + final Outcome outcome) + { + if (outcome == Outcome.SUCCESS) + { + _eventLogger.message(VirtualHostMessages.CREATED(getName())); + } + else + { + super.logCreated(attributes, outcome); + } + } + + @Override + protected void logRecovered(final Outcome outcome) + { + if (outcome == Outcome.SUCCESS) + { + _eventLogger.message(VirtualHostMessages.CREATED(getName())); + } + else + { + super.logRecovered(outcome); + } + } + + @Override + protected void logDeleted(final Outcome outcome) + { + _eventLogger.message(VirtualHostMessages.DELETE(getName(), String.valueOf(outcome))); + } + + @Override + protected void logUpdated(final Map<String, Object> attributes, final Outcome outcome) + { + _eventLogger.message(VirtualHostMessages.UPDATE(getName(), + String.valueOf(outcome), + attributesAsString(attributes))); + } } diff --git a/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java b/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java index 3f5300e..b9a4b15 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java +++ b/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java @@ -278,7 +278,8 @@ public abstract class AbstractVirtualHostNode<X extends AbstractVirtualHostNode< return _broker; } - protected EventLogger getEventLogger() + @Override + public EventLogger getEventLogger() { return _eventLogger; } diff --git a/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostNodeImpl.java b/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostNodeImpl.java index bc08e79..c3fd502 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostNodeImpl.java +++ b/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostNodeImpl.java @@ -34,6 +34,7 @@ import com.google.common.util.concurrent.SettableFuture; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.apache.qpid.server.logging.EventLogger; import org.apache.qpid.server.model.AbstractConfiguredObject; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.ConfiguredObject; @@ -278,4 +279,9 @@ public class RedirectingVirtualHostNodeImpl return Collections.singletonMap(VirtualHost.class.getSimpleName(), validVhostTypes); } + @Override + public EventLogger getEventLogger() + { + return _broker.getEventLogger(); + } } diff --git a/broker-core/src/test/java/org/apache/qpid/server/logging/subjects/QueueLogSubjectTest.java b/broker-core/src/test/java/org/apache/qpid/server/logging/subjects/QueueLogSubjectTest.java index fafb918..369be16 100644 --- a/broker-core/src/test/java/org/apache/qpid/server/logging/subjects/QueueLogSubjectTest.java +++ b/broker-core/src/test/java/org/apache/qpid/server/logging/subjects/QueueLogSubjectTest.java @@ -50,7 +50,7 @@ public class QueueLogSubjectTest extends AbstractTestLogSubject when(_queue.getName()).thenReturn("QueueLogSubjectTest"); when(_queue.getVirtualHost()).thenReturn(_testVhost); - _subject = new QueueLogSubject(_queue); + _subject = new QueueLogSubject(_queue.getName(),_queue.getVirtualHost().getName()); } @After diff --git a/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java b/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java index b3dea1b..879d87c 100644 --- a/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java +++ b/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java @@ -733,8 +733,8 @@ public class VirtualHostTest extends UnitTestBase } } }; - - QueueManagingVirtualHost<?> vhost = createVirtualHost("host"); + String virtualHostName = getTestName(); + QueueManagingVirtualHost<?> vhost = createVirtualHost(virtualHostName); Map<String, Object> newAttributes = Collections.singletonMap(QueueManagingVirtualHost.NODE_AUTO_CREATION_POLICIES, diff --git a/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/TestAbstractCarImpl.java b/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/TestAbstractCarImpl.java index f01a6a4..63340bc 100644 --- a/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/TestAbstractCarImpl.java +++ b/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/TestAbstractCarImpl.java @@ -26,6 +26,7 @@ import java.util.concurrent.atomic.AtomicInteger; import org.apache.qpid.server.configuration.IllegalConfigurationException; import org.apache.qpid.server.configuration.updater.CurrentThreadTaskExecutor; +import org.apache.qpid.server.logging.EventLogger; import org.apache.qpid.server.model.AbstractConfiguredObject; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.ManagedAttributeField; @@ -37,6 +38,7 @@ public abstract class TestAbstractCarImpl<X extends TestAbstractCarImpl<X>> exte private Colour _bodyColour; @ManagedAttributeField private Colour _interiorColour; + private EventLogger _eventLogger; private AtomicInteger _mileage = new AtomicInteger(); @@ -44,12 +46,13 @@ public abstract class TestAbstractCarImpl<X extends TestAbstractCarImpl<X>> exte public TestAbstractCarImpl(final Map<String, Object> attributes) { - super(null, attributes, newTaskExecutor(), TestModel.getInstance()); + this(attributes, TestModel.getInstance()); } public TestAbstractCarImpl(final Map<String, Object> attributes, Model model) { super(null, attributes, newTaskExecutor(), model); + _eventLogger = new EventLogger(); } @Override @@ -123,4 +126,10 @@ public abstract class TestAbstractCarImpl<X extends TestAbstractCarImpl<X>> exte { return 0; } + + @Override + public EventLogger getEventLogger() + { + return _eventLogger; + } } diff --git a/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/TestCar.java b/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/TestCar.java index 8588d60..4dc966a 100644 --- a/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/TestCar.java +++ b/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/TestCar.java @@ -20,6 +20,7 @@ */ package org.apache.qpid.server.model.testmodels.hierarchy; +import org.apache.qpid.server.logging.EventLoggerProvider; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.ManagedAttribute; import org.apache.qpid.server.model.ManagedContextDefault; @@ -31,7 +32,7 @@ import org.apache.qpid.server.model.StatisticType; import org.apache.qpid.server.model.StatisticUnit; @ManagedObject( defaultType = TestStandardCarImpl.TEST_STANDARD_CAR_TYPE) -public interface TestCar<X extends TestCar<X>> extends ConfiguredObject<X> +public interface TestCar<X extends TestCar<X>> extends ConfiguredObject<X>, EventLoggerProvider { enum Colour { BLACK, RED, BLUE, GREY }; diff --git a/broker-core/src/test/java/org/apache/qpid/server/virtualhost/AbstractVirtualHostTest.java b/broker-core/src/test/java/org/apache/qpid/server/virtualhost/AbstractVirtualHostTest.java index bf31788..00f1785 100644 --- a/broker-core/src/test/java/org/apache/qpid/server/virtualhost/AbstractVirtualHostTest.java +++ b/broker-core/src/test/java/org/apache/qpid/server/virtualhost/AbstractVirtualHostTest.java @@ -63,6 +63,7 @@ import org.apache.qpid.server.model.VirtualHost; import org.apache.qpid.server.model.VirtualHostNode; import org.apache.qpid.server.security.AccessControl; import org.apache.qpid.server.store.DurableConfigurationStore; +import org.apache.qpid.server.store.Event; import org.apache.qpid.server.store.MessageStore; import org.apache.qpid.server.store.preferences.PreferenceStore; import org.apache.qpid.server.util.FileUtils; @@ -103,6 +104,7 @@ public class AbstractVirtualHostTest extends UnitTestBase when(_node.getConfigurationStore()).thenReturn(mock(DurableConfigurationStore.class)); when(_node.getCategoryClass()).thenReturn(VirtualHostNode.class); when(_node.createPreferenceStore()).thenReturn(mock(PreferenceStore.class)); + when(_node.getEventLogger()).thenReturn(mock(EventLogger.class)); _failingStore = mock(MessageStore.class); doThrow(new RuntimeException("Cannot open store")).when(_failingStore).openMessageStore(any(ConfiguredObject.class)); diff --git a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/ManagementException.java b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/ManagementException.java index 8e7b3c3..885a702 100644 --- a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/ManagementException.java +++ b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/ManagementException.java @@ -192,7 +192,7 @@ public class ManagementException extends RuntimeException } else if (e instanceof IllegalConfigurationException || e instanceof IllegalArgumentException) { - LOGGER.warn("{} processing request {} from user '{}': {}", + LOGGER.info("{} processing request {} from user '{}': {}", e.getClass().getSimpleName(), getRequestURI(path, categoryMapping), getRequestPrincipals(), @@ -201,7 +201,7 @@ public class ManagementException extends RuntimeException int maxDepth = 10; while ((t = t.getCause()) != null && maxDepth-- != 0) { - LOGGER.warn("... caused by " + t.getClass().getSimpleName() + " : " + t.getMessage()); + LOGGER.info("... caused by " + t.getClass().getSimpleName() + " : " + t.getMessage()); } if (LOGGER.isDebugEnabled()) { diff --git a/systests/qpid-systests-http-management/src/test/java/org/apache/qpid/tests/http/endtoend/logging/VirtualHostLoggerTest.java b/systests/qpid-systests-http-management/src/test/java/org/apache/qpid/tests/http/endtoend/logging/VirtualHostLoggerTest.java index 5a0154e..d3907fb 100644 --- a/systests/qpid-systests-http-management/src/test/java/org/apache/qpid/tests/http/endtoend/logging/VirtualHostLoggerTest.java +++ b/systests/qpid-systests-http-management/src/test/java/org/apache/qpid/tests/http/endtoend/logging/VirtualHostLoggerTest.java @@ -186,7 +186,7 @@ public class VirtualHostLoggerTest extends HttpTestBase try (InputStreamReader r = new InputStreamReader(httpCon.getInputStream())) { final List<String> strings = CharStreams.readLines(r); - return strings.stream().map(line -> line.contains(searchTerm)).collect(Collectors.toList()).size(); + return strings.stream().filter(line -> line.contains(searchTerm)).collect(Collectors.toList()).size(); } } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org