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

Reply via email to