You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2017/08/24 03:46:36 UTC

[11/38] james-project git commit: JAMES-2114 MDC logging context for IMAP

JAMES-2114 MDC logging context for IMAP


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/56974b95
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/56974b95
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/56974b95

Branch: refs/heads/master
Commit: 56974b959d619823ccf377d4fa19bbd210b737c9
Parents: d0cad4d
Author: benwa <bt...@linagora.com>
Authored: Mon Aug 14 11:28:52 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Aug 24 10:34:42 2017 +0700

----------------------------------------------------------------------
 protocols/imap/pom.xml                          |   4 +
 .../imap/api/message/BodyFetchElement.java      |  14 ++
 .../james/imap/api/message/FetchData.java       |  21 ++
 .../apache/james/imap/api/message/IdRange.java  |   9 +
 .../james/imap/api/message/StatusDataItems.java |  15 +-
 .../apache/james/imap/api/message/UidRange.java |   7 +
 .../imap/api/message/request/SearchKey.java     |  19 ++
 .../api/message/request/SearchOperation.java    |  11 +-
 .../AbstractMailboxSelectionRequest.java        |   2 +
 .../imap/message/request/SetQuotaRequest.java   |  13 +-
 .../james/imap/processor/AppendProcessor.java   |   9 +
 .../imap/processor/AuthenticateProcessor.java   |   9 +
 .../imap/processor/CapabilityProcessor.java     |   9 +
 .../james/imap/processor/CheckProcessor.java    |  10 +
 .../james/imap/processor/CloseProcessor.java    |  10 +
 .../james/imap/processor/CompressProcessor.java |  11 +
 .../james/imap/processor/CopyProcessor.java     |  13 ++
 .../james/imap/processor/CreateProcessor.java   |  11 +
 .../imap/processor/DeleteACLProcessor.java      |  11 +
 .../james/imap/processor/DeleteProcessor.java   |  11 +
 .../james/imap/processor/EnableProcessor.java   |  11 +
 .../james/imap/processor/ExamineProcessor.java  |  18 ++
 .../james/imap/processor/ExpungeProcessor.java  |  10 +
 .../james/imap/processor/GetACLProcessor.java   |   9 +
 .../imap/processor/GetAnnotationProcessor.java  |  12 ++
 .../james/imap/processor/GetQuotaProcessor.java |   9 +
 .../imap/processor/GetQuotaRootProcessor.java   |  10 +
 .../james/imap/processor/IdleProcessor.java     |   9 +
 .../james/imap/processor/LSubProcessor.java     |  11 +
 .../james/imap/processor/ListProcessor.java     |  11 +
 .../imap/processor/ListRightsProcessor.java     |  10 +
 .../james/imap/processor/LoginProcessor.java    |  10 +
 .../james/imap/processor/LogoutProcessor.java   |  10 +
 .../james/imap/processor/MoveProcessor.java     |  13 ++
 .../james/imap/processor/MyRightsProcessor.java |   9 +
 .../imap/processor/NamespaceProcessor.java      |   8 +
 .../james/imap/processor/NoopProcessor.java     |  10 +
 .../james/imap/processor/RenameProcessor.java   |  12 ++
 .../james/imap/processor/SearchProcessor.java   |  11 +
 .../james/imap/processor/SelectProcessor.java   |  19 ++
 .../james/imap/processor/SetACLProcessor.java   |  11 +
 .../imap/processor/SetAnnotationProcessor.java  |  11 +
 .../james/imap/processor/SetQuotaProcessor.java |  11 +
 .../james/imap/processor/StartTLSProcessor.java |   8 +
 .../james/imap/processor/StatusProcessor.java   |  12 ++
 .../james/imap/processor/StoreProcessor.java    |  13 ++
 .../imap/processor/SubscribeProcessor.java      |  10 +
 .../imap/processor/SystemMessageProcessor.java  |  10 +
 .../james/imap/processor/UnselectProcessor.java |   8 +
 .../imap/processor/UnsubscribeProcessor.java    |  10 +
 .../base/AbstractChainedProcessor.java          |  17 +-
 .../base/ImapResponseMessageProcessor.java      |  10 +
 .../imap/processor/fetch/FetchProcessor.java    |  11 +
 server/protocols/protocols-imap4/pom.xml        |   4 +
 .../james/imapserver/netty/IMAPMDCContext.java  |  78 +++++++
 .../netty/ImapChannelUpstreamHandler.java       | 204 +++++++++----------
 56 files changed, 757 insertions(+), 112 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/pom.xml
----------------------------------------------------------------------
diff --git a/protocols/imap/pom.xml b/protocols/imap/pom.xml
index fe69297..1a2de8c 100644
--- a/protocols/imap/pom.xml
+++ b/protocols/imap/pom.xml
@@ -65,6 +65,10 @@
         </dependency>
         <dependency>
             <groupId>org.apache.james</groupId>
+            <artifactId>james-server-util-java8</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.james</groupId>
             <artifactId>metrics-api</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/api/message/BodyFetchElement.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/api/message/BodyFetchElement.java b/protocols/imap/src/main/java/org/apache/james/imap/api/message/BodyFetchElement.java
index 93b88c8..ea173de 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/api/message/BodyFetchElement.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/api/message/BodyFetchElement.java
@@ -20,9 +20,13 @@ package org.apache.james.imap.api.message;
 
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Optional;
 
 import org.apache.james.imap.api.ImapConstants;
 
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableList;
+
 public class BodyFetchElement {
 
     public static final int TEXT = 0;
@@ -174,4 +178,14 @@ public class BodyFetchElement {
         return true;
     }
 
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+            .add("firstOctet", firstOctet)
+            .add("numberOfOctets", numberOfOctets)
+            .add("name", name)
+            .add("sectionType", sectionType)
+            .add("fieldNames", Optional.ofNullable(fieldNames).map(ImmutableList::copyOf))
+            .toString();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/api/message/FetchData.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/api/message/FetchData.java b/protocols/imap/src/main/java/org/apache/james/imap/api/message/FetchData.java
index 5b91c2f..d25f576 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/api/message/FetchData.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/api/message/FetchData.java
@@ -22,6 +22,9 @@ import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
 
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableSet;
+
 public class FetchData {
     private boolean flags;
 
@@ -207,4 +210,22 @@ public class FetchData {
         }
         return true;
     }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+            .add("flags", flags)
+            .add("uid", uid)
+            .add("internalDate", internalDate)
+            .add("size", size)
+            .add("envelope", envelope)
+            .add("body", body)
+            .add("bodyStructure", bodyStructure)
+            .add("setSeen", setSeen)
+            .add("bodyElements", ImmutableSet.copyOf(bodyElements))
+            .add("modSeq", modSeq)
+            .add("changedSince", changedSince)
+            .add("vanished", vanished)
+            .toString();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/api/message/IdRange.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/api/message/IdRange.java b/protocols/imap/src/main/java/org/apache/james/imap/api/message/IdRange.java
index 347b05d..23aee17 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/api/message/IdRange.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/api/message/IdRange.java
@@ -24,12 +24,21 @@ import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.NoSuchElementException;
+import java.util.Optional;
+
+import com.google.common.collect.ImmutableList;
 
 /**
  * Represents a range of UID or MSN values.
  */
 public final class IdRange implements Iterable<Long>, Comparable<IdRange>{
 
+    public static String toString(IdRange[] ranges) {
+        return Optional.ofNullable(ranges)
+            .map(ImmutableList::copyOf)
+            .toString();
+    }
+
     private long _lowVal;
 
     private long _highVal;

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/api/message/StatusDataItems.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/api/message/StatusDataItems.java b/protocols/imap/src/main/java/org/apache/james/imap/api/message/StatusDataItems.java
index 44602bb..5458e1a 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/api/message/StatusDataItems.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/api/message/StatusDataItems.java
@@ -18,6 +18,8 @@
  ****************************************************************/
 package org.apache.james.imap.api.message;
 
+import com.google.common.base.MoreObjects;
+
 public class StatusDataItems {
     private boolean messages;
 
@@ -78,5 +80,16 @@ public class StatusDataItems {
     public boolean isHighestModSeq() {
         return highestModSeq;
     }
-    
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+            .add("messages", messages)
+            .add("recent", recent)
+            .add("uidNext", uidNext)
+            .add("uidValidity", uidValidity)
+            .add("unseen", unseen)
+            .add("highestModSeq", highestModSeq)
+            .toString();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/api/message/UidRange.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/api/message/UidRange.java b/protocols/imap/src/main/java/org/apache/james/imap/api/message/UidRange.java
index e499cda..c2b1445 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/api/message/UidRange.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/api/message/UidRange.java
@@ -22,17 +22,24 @@ package org.apache.james.imap.api.message;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.model.MessageRange;
 
 import com.google.common.base.Objects;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Range;
 import com.google.common.collect.RangeSet;
 import com.google.common.collect.TreeRangeSet;
 
 public final class UidRange implements Iterable<MessageUid> {
+    public static String toString(UidRange[] ranges) {
+        return Optional.ofNullable(ranges)
+            .map(ImmutableList::copyOf)
+            .toString();
+    }
 
     public static List<UidRange> mergeRanges(List<UidRange> ranges) {
         if (ranges.isEmpty()) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/api/message/request/SearchKey.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/api/message/request/SearchKey.java b/protocols/imap/src/main/java/org/apache/james/imap/api/message/request/SearchKey.java
index 232c500..374efba 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/api/message/request/SearchKey.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/api/message/request/SearchKey.java
@@ -22,10 +22,14 @@ package org.apache.james.imap.api.message.request;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Optional;
 
 import org.apache.james.imap.api.message.IdRange;
 import org.apache.james.imap.api.message.UidRange;
 
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableList;
+
 /**
  * Atom key used by a search. Build instances by factory methods.
  */
@@ -508,4 +512,19 @@ public final class SearchKey {
             return false;
         return true;
     }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+            .add("type", type)
+            .add("date", date)
+            .add("size", size)
+            .add("value", value)
+            .add("seconds", seconds)
+            .add("modSeq", modSeq)
+            .add("uids", Arrays.toString(uids))
+            .add("sequences", Arrays.toString(sequence))
+            .add("keys", Optional.ofNullable(keys).map(ImmutableList::copyOf))
+            .toString();
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/api/message/request/SearchOperation.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/api/message/request/SearchOperation.java b/protocols/imap/src/main/java/org/apache/james/imap/api/message/request/SearchOperation.java
index 6068ef9..6da3f8a 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/api/message/request/SearchOperation.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/api/message/request/SearchOperation.java
@@ -21,6 +21,8 @@ package org.apache.james.imap.api.message.request;
 
 import java.util.List;
 
+import com.google.common.base.MoreObjects;
+
 public final class SearchOperation {
 
     private final SearchKey key;
@@ -37,7 +39,14 @@ public final class SearchOperation {
     public List<SearchResultOption> getResultOptions() {
         return options;
     }
-    
+
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+            .add("key", key)
+            .toString();
+    }
  
     
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/message/request/AbstractMailboxSelectionRequest.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/message/request/AbstractMailboxSelectionRequest.java b/protocols/imap/src/main/java/org/apache/james/imap/message/request/AbstractMailboxSelectionRequest.java
index cddfd1f..34202fa 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/message/request/AbstractMailboxSelectionRequest.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/message/request/AbstractMailboxSelectionRequest.java
@@ -30,6 +30,8 @@ import org.apache.james.imap.api.message.request.ImapRequest;
  * This supports also the <code>CONDSTORE</code> and the <code>QRESYNC</code> extension
  */
 public abstract class AbstractMailboxSelectionRequest extends AbstractImapRequest {
+
+
     private final String mailboxName;
     private final boolean condstore;
     private final Long lastKnownUidValidity;

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/message/request/SetQuotaRequest.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/message/request/SetQuotaRequest.java b/protocols/imap/src/main/java/org/apache/james/imap/message/request/SetQuotaRequest.java
index 1af01a9..33ed681 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/message/request/SetQuotaRequest.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/message/request/SetQuotaRequest.java
@@ -24,6 +24,9 @@ import java.util.List;
 
 import org.apache.james.imap.api.ImapCommand;
 
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableList;
+
 /**
  * SETQUOTA request
  */
@@ -45,6 +48,14 @@ public class SetQuotaRequest extends AbstractImapRequest {
         public long getLimit() {
             return limit;
         }
+
+        @Override
+        public String toString() {
+            return MoreObjects.toStringHelper(this)
+                .add("resource", resource)
+                .add("limit", limit)
+                .toString();
+        }
     }
 
     private final String quotaRoot;
@@ -61,7 +72,7 @@ public class SetQuotaRequest extends AbstractImapRequest {
     }
 
     public List<ResourceLimit> getResourceLimits() {
-        return new ArrayList<>(resourceLimits);
+        return ImmutableList.copyOf(resourceLimits);
     }
 
     public String getQuotaRoot() {

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/AppendProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/AppendProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/AppendProcessor.java
index d57adf5..f693296 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/AppendProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/AppendProcessor.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Date;
@@ -46,6 +47,7 @@ import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.model.ComposedMessageId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 public class AppendProcessor extends AbstractMailboxProcessor<AppendRequest> {
 
@@ -154,4 +156,11 @@ public class AppendProcessor extends AbstractMailboxProcessor<AppendRequest> {
         }
     }
 
+    @Override
+    protected Closeable addContextToMDC(AppendRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "APPEND")
+            .addContext("mailbox", message.getMailboxName())
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java
index 11a27f8..b10961c 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
 import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.List;
@@ -35,6 +36,7 @@ import org.apache.james.imap.message.request.IRAuthenticateRequest;
 import org.apache.james.imap.message.response.AuthenticateResponse;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 import com.google.common.collect.ImmutableList;
 
@@ -160,4 +162,11 @@ public class AuthenticateProcessor extends AbstractAuthProcessor<AuthenticateReq
         return ImmutableList.copyOf(caps);
     }
 
+    @Override
+    protected Closeable addContextToMDC(AuthenticateRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "AUTHENTICATE")
+            .addContext("authType", message.getAuthType())
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/CapabilityProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/CapabilityProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/CapabilityProcessor.java
index 7c921b4..cb6a61c 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/CapabilityProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/CapabilityProcessor.java
@@ -26,6 +26,7 @@ import static org.apache.james.imap.api.ImapConstants.SUPPORTS_RFC3348;
 import static org.apache.james.imap.api.ImapConstants.UTF8;
 import static org.apache.james.imap.api.ImapConstants.VERSION;
 
+import java.io.Closeable;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
@@ -41,6 +42,7 @@ import org.apache.james.imap.message.request.CapabilityRequest;
 import org.apache.james.imap.message.response.CapabilityResponse;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 import com.google.common.collect.ImmutableList;
 
@@ -140,6 +142,13 @@ public class CapabilityProcessor extends AbstractMailboxProcessor<CapabilityRequ
         caps.removeAll(disabledCaps);
         return caps;
     }
+
+    @Override
+    protected Closeable addContextToMDC(CapabilityRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "CAPABILITY")
+            .build();
+    }
     
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/CheckProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/CheckProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/CheckProcessor.java
index 8a03f34..4f9e092 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/CheckProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/CheckProcessor.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
+
 import org.apache.james.imap.api.ImapCommand;
 import org.apache.james.imap.api.message.response.StatusResponseFactory;
 import org.apache.james.imap.api.process.ImapProcessor;
@@ -26,6 +28,7 @@ import org.apache.james.imap.api.process.ImapSession;
 import org.apache.james.imap.message.request.CheckRequest;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 public class CheckProcessor extends AbstractMailboxProcessor<CheckRequest> {
 
@@ -38,4 +41,11 @@ public class CheckProcessor extends AbstractMailboxProcessor<CheckRequest> {
         unsolicitedResponses(session, responder, false);
         okComplete(command, tag, responder);
     }
+
+    @Override
+    protected Closeable addContextToMDC(CheckRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "CHECK")
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/CloseProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/CloseProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/CloseProcessor.java
index 195086b..1dd8f6a 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/CloseProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/CloseProcessor.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
+
 import org.apache.james.imap.api.ImapCommand;
 import org.apache.james.imap.api.ImapSessionUtils;
 import org.apache.james.imap.api.display.HumanReadableText;
@@ -33,6 +35,7 @@ import org.apache.james.mailbox.MessageManager.MetaData.FetchGroup;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MessageRange;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 public class CloseProcessor extends AbstractMailboxProcessor<CloseRequest> {
 
@@ -61,4 +64,11 @@ public class CloseProcessor extends AbstractMailboxProcessor<CloseRequest> {
             no(command, tag, responder, HumanReadableText.GENERIC_FAILURE_DURING_PROCESSING);
         }
     }
+
+    @Override
+    protected Closeable addContextToMDC(CloseRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "CLOSE")
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/CompressProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/CompressProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/CompressProcessor.java
index 69d64c0..ac033a9 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/CompressProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/CompressProcessor.java
@@ -18,6 +18,9 @@
  ****************************************************************/
 package org.apache.james.imap.processor;
 
+
+import java.io.Closeable;
+
 import java.util.Collections;
 import java.util.List;
 
@@ -28,6 +31,7 @@ import org.apache.james.imap.api.process.ImapProcessor;
 import org.apache.james.imap.api.process.ImapSession;
 import org.apache.james.imap.message.request.CompressRequest;
 import org.apache.james.imap.processor.base.AbstractChainedProcessor;
+import org.apache.james.util.MDCBuilder;
 
 import com.google.common.collect.ImmutableList;
 
@@ -81,4 +85,11 @@ public class CompressProcessor extends AbstractChainedProcessor<CompressRequest>
         return Collections.EMPTY_LIST;
     }
 
+    @Override
+    protected Closeable addContextToMDC(CompressRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "COMPRESS")
+            .addContext("algorithm", message.getAlgorithm())
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/CopyProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/CopyProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/CopyProcessor.java
index 2b7e242..be6f59f 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/CopyProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/CopyProcessor.java
@@ -19,8 +19,10 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
 import java.util.List;
 
+import org.apache.james.imap.api.message.IdRange;
 import org.apache.james.imap.api.message.response.StatusResponseFactory;
 import org.apache.james.imap.api.process.ImapProcessor;
 import org.apache.james.imap.api.process.SelectedMailbox;
@@ -31,6 +33,7 @@ import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageRange;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 public class CopyProcessor extends AbstractMessageRangeProcessor<CopyRequest> {
 
@@ -51,4 +54,14 @@ public class CopyProcessor extends AbstractMessageRangeProcessor<CopyRequest> {
                                          MailboxManager mailboxManager, MessageRange messageSet) throws MailboxException {
         return mailboxManager.copyMessages(messageSet, currentMailbox.getPath(), targetMailbox, mailboxSession);
     }
+
+    @Override
+    protected Closeable addContextToMDC(CopyRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "COPY")
+            .addContext("targetMailbox", message.getMailboxName())
+            .addContext("uidEnabled", message.isUseUids())
+            .addContext("idSet", IdRange.toString(message.getIdSet()))
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/CreateProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/CreateProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/CreateProcessor.java
index 66ad8ed..295b178 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/CreateProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/CreateProcessor.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
+
 import org.apache.james.imap.api.ImapCommand;
 import org.apache.james.imap.api.ImapSessionUtils;
 import org.apache.james.imap.api.display.HumanReadableText;
@@ -33,6 +35,7 @@ import org.apache.james.mailbox.exception.MailboxExistsException;
 import org.apache.james.mailbox.exception.TooLongMailboxNameException;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 public class CreateProcessor extends AbstractMailboxProcessor<CreateRequest> {
 
@@ -70,4 +73,12 @@ public class CreateProcessor extends AbstractMailboxProcessor<CreateRequest> {
             no(command, tag, responder, HumanReadableText.GENERIC_FAILURE_DURING_PROCESSING);
         }
     }
+
+    @Override
+    protected Closeable addContextToMDC(CreateRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "CREATE")
+            .addContext("mailbox", message.getMailboxName())
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteACLProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteACLProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteACLProcessor.java
index f3a7005..8fed11c 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteACLProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteACLProcessor.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.imap.processor;
 
+
+import java.io.Closeable;
 import java.util.List;
 
 import org.apache.james.imap.api.ImapCommand;
@@ -42,6 +44,7 @@ import org.apache.james.mailbox.model.SimpleMailboxACL;
 import org.apache.james.mailbox.model.SimpleMailboxACL.Rfc4314Rights;
 import org.apache.james.mailbox.model.SimpleMailboxACL.SimpleMailboxACLEntryKey;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 import com.google.common.collect.ImmutableList;
 
@@ -144,4 +147,12 @@ public class DeleteACLProcessor extends AbstractMailboxProcessor<DeleteACLReques
         return CAPABILITIES;
     }
 
+    @Override
+    protected Closeable addContextToMDC(DeleteACLRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "DELETE_ACL")
+            .addContext("mailbox", message.getMailboxName())
+            .addContext("identifier", message.getIdentifier())
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteProcessor.java
index 20b2be7..08b0b2f 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteProcessor.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
+
 import org.apache.james.imap.api.ImapCommand;
 import org.apache.james.imap.api.ImapSessionUtils;
 import org.apache.james.imap.api.display.HumanReadableText;
@@ -34,6 +36,7 @@ import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.exception.TooLongMailboxNameException;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 public class DeleteProcessor extends AbstractMailboxProcessor<DeleteRequest> {
 
@@ -75,4 +78,12 @@ public class DeleteProcessor extends AbstractMailboxProcessor<DeleteRequest> {
             no(command, tag, responder, HumanReadableText.GENERIC_FAILURE_DURING_PROCESSING);
         }
     }
+
+    @Override
+    protected Closeable addContextToMDC(DeleteRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "DELETE")
+            .addContext("mailbox", message.getMailboxName())
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/EnableProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/EnableProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/EnableProcessor.java
index 516ae7c..2611d7e 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/EnableProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/EnableProcessor.java
@@ -21,6 +21,7 @@ package org.apache.james.imap.processor;
 
 import static org.apache.james.imap.api.ImapConstants.SUPPORTS_ENABLE;
 
+import java.io.Closeable;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -38,6 +39,9 @@ import org.apache.james.imap.message.response.EnableResponse;
 import org.apache.james.imap.processor.PermitEnableCapabilityProcessor.EnableException;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
+
+import com.google.common.collect.ImmutableList;
 
 import com.google.common.collect.ImmutableList;
 
@@ -137,4 +141,11 @@ public class EnableProcessor extends AbstractMailboxProcessor<EnableRequest> imp
         return CAPS;
     }
 
+    @Override
+    protected Closeable addContextToMDC(EnableRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "ENABLE")
+            .addContext("capabilities", ImmutableList.copyOf(message.getCapabilities()))
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/ExamineProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/ExamineProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/ExamineProcessor.java
index f5428e0..69e7644 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/ExamineProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/ExamineProcessor.java
@@ -19,11 +19,16 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
+
+import org.apache.james.imap.api.message.IdRange;
+import org.apache.james.imap.api.message.UidRange;
 import org.apache.james.imap.api.message.response.StatusResponseFactory;
 import org.apache.james.imap.api.process.ImapProcessor;
 import org.apache.james.imap.message.request.ExamineRequest;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 public class ExamineProcessor extends AbstractSelectionProcessor<ExamineRequest> {
 
@@ -32,4 +37,17 @@ public class ExamineProcessor extends AbstractSelectionProcessor<ExamineRequest>
         super(ExamineRequest.class, next, mailboxManager, statusResponseFactory, true, metricFactory);
     }
 
+    @Override
+    protected Closeable addContextToMDC(ExamineRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "EXAMINE")
+            .addContext("mailbox", message.getMailboxName())
+            .addContext("condstore", Boolean.toString(message.getCondstore()))
+            .addContext("knownModseq", message.getKnownModSeq())
+            .addContext("knownUids", UidRange.toString(message.getKnownUidSet()))
+            .addContext("knownIdRange", IdRange.toString(message.getKnownSequenceSet()))
+            .addContext("lastKnownUidValidity", message.getLastKnownUidValidity())
+            .addContext("uidSet", UidRange.toString(message.getUidSet()))
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java
index 0c3a30d..05d199e 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
 import java.util.Iterator;
 import java.util.List;
 
@@ -43,6 +44,7 @@ import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MessageRangeException;
 import org.apache.james.mailbox.model.MessageRange;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 import com.google.common.collect.ImmutableList;
 
@@ -125,4 +127,12 @@ public class ExpungeProcessor extends AbstractMailboxProcessor<ExpungeRequest> i
     public List<String> getImplementedCapabilities(ImapSession session) {
         return UIDPLUS;
     }
+
+    @Override
+    protected Closeable addContextToMDC(ExpungeRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "EXPUNGE")
+            .addContext("uidSet", IdRange.toString(message.getUidSet()))
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/GetACLProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetACLProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetACLProcessor.java
index 3fe1fc4..5adf6cf 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetACLProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetACLProcessor.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
 import java.util.List;
 
 import org.apache.james.imap.api.ImapCommand;
@@ -41,6 +42,7 @@ import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.SimpleMailboxACL.Rfc4314Rights;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 import com.google.common.collect.ImmutableList;
 
@@ -118,4 +120,11 @@ public class GetACLProcessor extends AbstractMailboxProcessor<GetACLRequest> imp
         return CAPABILITIES;
     }
 
+    @Override
+    protected Closeable addContextToMDC(GetACLRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "GET_ACL")
+            .addContext("mailbox", message.getMailboxName())
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/GetAnnotationProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetAnnotationProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetAnnotationProcessor.java
index de0146f..e38e08f 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetAnnotationProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetAnnotationProcessor.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Set;
@@ -43,6 +44,7 @@ import org.apache.james.mailbox.model.MailboxAnnotation;
 import org.apache.james.mailbox.model.MailboxAnnotationKey;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 import com.google.common.base.Optional;
 import com.google.common.base.Predicate;
@@ -146,4 +148,14 @@ public class GetAnnotationProcessor extends AbstractMailboxProcessor<GetAnnotati
         return Optional.of(overLimitSizes.first());
     }
 
+    @Override
+    protected Closeable addContextToMDC(GetAnnotationRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "GET_ANNOTATION")
+            .addContext("mailbox", message.getMailboxName())
+            .addContext("depth", message.getDepth())
+            .addContext("maxSize", message.getMaxsize())
+            .addContext("keys", message.getKeys())
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaProcessor.java
index 6637ecf..00c1d6b 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaProcessor.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
 import java.util.List;
 
 import org.apache.james.imap.api.ImapCommand;
@@ -40,6 +41,7 @@ import org.apache.james.mailbox.model.SimpleMailboxACL;
 import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 import com.google.common.collect.ImmutableList;
 
@@ -106,4 +108,11 @@ public class GetQuotaProcessor extends AbstractMailboxProcessor<GetQuotaRequest>
         return false;
     }
 
+    @Override
+    protected Closeable addContextToMDC(GetQuotaRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "GET_QUOTA")
+            .addContext("quotaRoot", message.getQuotaRoot())
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaRootProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaRootProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaRootProcessor.java
index 3864bf6..fd45b64 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaRootProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaRootProcessor.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
 import java.util.List;
 
 import org.apache.james.imap.api.ImapCommand;
@@ -42,6 +43,7 @@ import org.apache.james.mailbox.model.SimpleMailboxACL;
 import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 import com.google.common.collect.ImmutableList;
 
@@ -97,4 +99,12 @@ public class GetQuotaRootProcessor extends AbstractMailboxProcessor<GetQuotaRoot
         }
 
     }
+
+    @Override
+    protected Closeable addContextToMDC(GetQuotaRootRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "GET_QUOTA_ROOT")
+            .addContext("mailbox", message.getMailboxName())
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
index bdc2688..2b1c81c 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
@@ -21,6 +21,7 @@ package org.apache.james.imap.processor;
 
 import static org.apache.james.imap.api.ImapConstants.SUPPORTS_IDLE;
 
+import java.io.Closeable;
 import java.util.List;
 import java.util.Locale;
 import java.util.concurrent.Executors;
@@ -46,6 +47,7 @@ import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 import com.google.common.collect.ImmutableList;
 
@@ -199,4 +201,11 @@ public class IdleProcessor extends AbstractMailboxProcessor<IdleRequest> impleme
             return ExecutionMode.ASYNCHRONOUS;
         }
     }
+
+    @Override
+    protected Closeable addContextToMDC(IdleRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "IDLE")
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/LSubProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/LSubProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/LSubProcessor.java
index 1de8e9a..040c94f 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/LSubProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/LSubProcessor.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
 import java.util.ArrayList;
 import java.util.Collection;
 
@@ -41,6 +42,7 @@ import org.apache.james.mailbox.model.MailboxConstants;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MailboxQuery;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 public class LSubProcessor extends AbstractSubscriptionProcessor<LsubRequest> {
 
@@ -131,4 +133,13 @@ public class LSubProcessor extends AbstractSubscriptionProcessor<LsubRequest> {
             no(command, tag, responder, displayTextKey);
         }
     }
+
+    @Override
+    protected Closeable addContextToMDC(LsubRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "LSUB")
+            .addContext("base", message.getBaseReferenceName())
+            .addContext("pattern", message.getMailboxPattern())
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/ListProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/ListProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/ListProcessor.java
index 71c1361..7f882e6 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/ListProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/ListProcessor.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -46,6 +47,7 @@ import org.apache.james.mailbox.model.MailboxMetaData.Children;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MailboxQuery;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 public class ListProcessor extends AbstractMailboxProcessor<ListRequest> {
 
@@ -230,4 +232,13 @@ public class ListProcessor extends AbstractMailboxProcessor<ListRequest> {
     protected boolean isAcceptable(ImapMessage message) {
         return ListRequest.class.equals(message.getClass());
     }
+
+    @Override
+    protected Closeable addContextToMDC(ListRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "LIST")
+            .addContext("base", message.getBaseReferenceName())
+            .addContext("pattern", message.getMailboxPattern())
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/ListRightsProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/ListRightsProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/ListRightsProcessor.java
index c68e559..c648e1a 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/ListRightsProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/ListRightsProcessor.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
 import java.util.List;
 
 import org.apache.james.imap.api.ImapCommand;
@@ -41,6 +42,7 @@ import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.SimpleMailboxACL.Rfc4314Rights;
 import org.apache.james.mailbox.model.SimpleMailboxACL.SimpleMailboxACLEntryKey;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 import com.google.common.collect.ImmutableList;
 
@@ -134,4 +136,12 @@ public class ListRightsProcessor extends AbstractMailboxProcessor<ListRightsRequ
         return CAPABILITIES;
     }
 
+    @Override
+    protected Closeable addContextToMDC(ListRightsRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "LIST_RIGHTS")
+            .addContext("mailbox", message.getMailboxName())
+            .addContext("identifier", message.getIdentifier())
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/LoginProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/LoginProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/LoginProcessor.java
index cf49b11..3011bda 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/LoginProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/LoginProcessor.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
 import java.util.Collections;
 import java.util.List;
 
@@ -30,6 +31,7 @@ import org.apache.james.imap.api.process.ImapSession;
 import org.apache.james.imap.message.request.LoginRequest;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 import com.google.common.collect.ImmutableList;
 
@@ -72,4 +74,12 @@ public class LoginProcessor extends AbstractAuthProcessor<LoginRequest> implemen
         }
         return Collections.emptyList();
     }
+
+    @Override
+    protected Closeable addContextToMDC(LoginRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "LOGIN")
+            .addContext(MDCBuilder.USER, message.getUserid())
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/LogoutProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/LogoutProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/LogoutProcessor.java
index acec17c..3e9fc00 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/LogoutProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/LogoutProcessor.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
+
 import org.apache.james.imap.api.ImapCommand;
 import org.apache.james.imap.api.ImapSessionUtils;
 import org.apache.james.imap.api.display.HumanReadableText;
@@ -30,6 +32,7 @@ import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 public class LogoutProcessor extends AbstractMailboxProcessor<LogoutRequest> {
 
@@ -50,4 +53,11 @@ public class LogoutProcessor extends AbstractMailboxProcessor<LogoutRequest> {
             no(command, tag, responder, HumanReadableText.GENERIC_FAILURE_DURING_PROCESSING);
         }
     }
+
+    @Override
+    protected Closeable addContextToMDC(LogoutRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "LOGOUT")
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/MoveProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/MoveProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/MoveProcessor.java
index 834b552..1f72217 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/MoveProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/MoveProcessor.java
@@ -19,9 +19,11 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
 import java.util.List;
 
 import org.apache.james.imap.api.ImapConstants;
+import org.apache.james.imap.api.message.IdRange;
 import org.apache.james.imap.api.message.response.StatusResponseFactory;
 import org.apache.james.imap.api.process.ImapProcessor;
 import org.apache.james.imap.api.process.ImapSession;
@@ -33,6 +35,7 @@ import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageRange;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 import com.google.common.collect.ImmutableList;
 
@@ -67,4 +70,14 @@ public class MoveProcessor extends AbstractMessageRangeProcessor<MoveRequest> im
         }
     }
 
+    @Override
+    protected Closeable addContextToMDC(MoveRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "MOVE")
+            .addContext("targetMailbox", message.getMailboxName())
+            .addContext("uidEnabled", message.isUseUids())
+            .addContext("idSet", IdRange.toString(message.getIdSet()))
+            .build();
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/MyRightsProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/MyRightsProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/MyRightsProcessor.java
index 2f1c89a..c4dc6c8 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/MyRightsProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/MyRightsProcessor.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
 import java.util.Collections;
 import java.util.List;
 
@@ -40,6 +41,7 @@ import org.apache.james.mailbox.model.MailboxACL.MailboxACLRights;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.SimpleMailboxACL.Rfc4314Rights;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 /**
  * MYRIGHTS Processor.
@@ -112,4 +114,11 @@ public class MyRightsProcessor extends AbstractMailboxProcessor<MyRightsRequest>
         return CAPABILITIES;
     }
 
+    @Override
+    protected Closeable addContextToMDC(MyRightsRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "MYRIGHTS")
+            .addContext("mailbox", message.getMailboxName())
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/NamespaceProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/NamespaceProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/NamespaceProcessor.java
index 724b238..fecabd3 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/NamespaceProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/NamespaceProcessor.java
@@ -20,6 +20,7 @@ package org.apache.james.imap.processor;
 
 import static org.apache.james.imap.api.ImapConstants.SUPPORTS_NAMESPACES;
 
+import java.io.Closeable;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -36,6 +37,7 @@ import org.apache.james.imap.message.response.NamespaceResponse;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 /**
  * Processes a NAMESPACE command into a suitable set of responses.
@@ -110,4 +112,10 @@ public class NamespaceProcessor extends AbstractMailboxProcessor<NamespaceReques
         return CAPS;
     }
 
+    @Override
+    protected Closeable addContextToMDC(NamespaceRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "NAMESPACE")
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/NoopProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/NoopProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/NoopProcessor.java
index c903564..4d88c2b 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/NoopProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/NoopProcessor.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
+
 import org.apache.james.imap.api.ImapCommand;
 import org.apache.james.imap.api.message.response.StatusResponseFactory;
 import org.apache.james.imap.api.process.ImapProcessor;
@@ -26,6 +28,7 @@ import org.apache.james.imap.api.process.ImapSession;
 import org.apache.james.imap.message.request.NoopRequest;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 public class NoopProcessor extends AbstractMailboxProcessor<NoopRequest> {
 
@@ -39,4 +42,11 @@ public class NoopProcessor extends AbstractMailboxProcessor<NoopRequest> {
         unsolicitedResponses(session, responder, false);
         okComplete(command, tag, responder);
     }
+
+    @Override
+    protected Closeable addContextToMDC(NoopRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "NOOP")
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/RenameProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/RenameProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/RenameProcessor.java
index 2ce9187..42ec3cf 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/RenameProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/RenameProcessor.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
+
 import org.apache.james.imap.api.ImapCommand;
 import org.apache.james.imap.api.ImapConstants;
 import org.apache.james.imap.api.ImapSessionUtils;
@@ -36,6 +38,7 @@ import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.exception.TooLongMailboxNameException;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 public class RenameProcessor extends AbstractMailboxProcessor<RenameRequest> {
 
@@ -86,4 +89,13 @@ public class RenameProcessor extends AbstractMailboxProcessor<RenameRequest> {
             no(command, tag, responder, HumanReadableText.GENERIC_FAILURE_DURING_PROCESSING);
         }
     }
+
+    @Override
+    protected Closeable addContextToMDC(RenameRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "RENAME")
+            .addContext("existingName", message.getExistingName())
+            .addContext("newName", message.getNewName())
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
index 065b2eb..8822e4d 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
@@ -62,6 +63,7 @@ import org.apache.james.mailbox.model.SearchQuery.AddressType;
 import org.apache.james.mailbox.model.SearchQuery.Criterion;
 import org.apache.james.mailbox.model.SearchQuery.DateResolution;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableList;
@@ -497,4 +499,13 @@ public class SearchProcessor extends AbstractMailboxProcessor<SearchRequest> imp
     public List<String> getImplementedCapabilities(ImapSession session) {
         return CAPS;
     }
+
+    @Override
+    protected Closeable addContextToMDC(SearchRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "SEARCH")
+            .addContext("useUid", message.isUseUids())
+            .addContext("searchOperation", message.getSearchOperation())
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/SelectProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/SelectProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/SelectProcessor.java
index 6414487..fc200d7 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/SelectProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/SelectProcessor.java
@@ -19,11 +19,16 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
+
+import org.apache.james.imap.api.message.IdRange;
+import org.apache.james.imap.api.message.UidRange;
 import org.apache.james.imap.api.message.response.StatusResponseFactory;
 import org.apache.james.imap.api.process.ImapProcessor;
 import org.apache.james.imap.message.request.SelectRequest;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 public class SelectProcessor extends AbstractSelectionProcessor<SelectRequest> {
 
@@ -32,4 +37,18 @@ public class SelectProcessor extends AbstractSelectionProcessor<SelectRequest> {
         super(SelectRequest.class, next, mailboxManager, statusResponseFactory, false, metricFactory);
     }
 
+    @Override
+    protected Closeable addContextToMDC(SelectRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "SELECT")
+            .addContext("mailbox", message.getMailboxName())
+            .addContext("condstore", message.getCondstore())
+            .addContext("knownModseq", message.getKnownModSeq())
+            .addContext("knownUids", UidRange.toString(message.getKnownUidSet()))
+            .addContext("knownIdRange", IdRange.toString(message.getKnownSequenceSet()))
+            .addContext("lastKnownUidValidity", message.getLastKnownUidValidity())
+            .addContext("uidSet", UidRange.toString(message.getUidSet()))
+            .build();
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/SetACLProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/SetACLProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/SetACLProcessor.java
index 8d26d3e..4f63d57 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/SetACLProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/SetACLProcessor.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
 import java.util.Collections;
 import java.util.List;
 
@@ -45,6 +46,7 @@ import org.apache.james.mailbox.model.SimpleMailboxACL;
 import org.apache.james.mailbox.model.SimpleMailboxACL.Rfc4314Rights;
 import org.apache.james.mailbox.model.SimpleMailboxACL.SimpleMailboxACLEntryKey;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 /**
  * SETACL Processor.
@@ -163,4 +165,13 @@ public class SetACLProcessor extends AbstractMailboxProcessor<SetACLRequest> imp
         return CAPABILITIES;
     }
 
+    @Override
+    protected Closeable addContextToMDC(SetACLRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "SET_ACL")
+            .addContext("mailbox", message.getMailboxName())
+            .addContext("identifier", message.getIdentifier())
+            .addContext("rights", message.getRights())
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/SetAnnotationProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/SetAnnotationProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/SetAnnotationProcessor.java
index 774b74d..adfe274 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/SetAnnotationProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/SetAnnotationProcessor.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
 import java.util.List;
 
 import org.apache.james.imap.api.ImapCommand;
@@ -38,6 +39,7 @@ import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 import com.google.common.collect.ImmutableList;
 
@@ -74,4 +76,13 @@ public class SetAnnotationProcessor extends AbstractMailboxProcessor<SetAnnotati
             no(command, tag, responder, HumanReadableText.GENERIC_FAILURE_DURING_PROCESSING);
         }
     }
+
+    @Override
+    protected Closeable addContextToMDC(SetAnnotationRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "SET_ANNOTATION")
+            .addContext("mailbox", message.getMailboxName())
+            .addContext("annotations", message.getMailboxAnnotations())
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/SetQuotaProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/SetQuotaProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/SetQuotaProcessor.java
index 8238f0a..1e7c68c 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/SetQuotaProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/SetQuotaProcessor.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
 import java.util.Collections;
 import java.util.List;
 
@@ -31,6 +32,7 @@ import org.apache.james.imap.api.process.ImapSession;
 import org.apache.james.imap.message.request.SetQuotaRequest;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 /**
  * SETQUOTA processor
@@ -57,4 +59,13 @@ public class SetQuotaProcessor extends AbstractMailboxProcessor<SetQuotaRequest>
         HumanReadableText humanReadableText = new HumanReadableText(HumanReadableText.UNSUFFICIENT_RIGHTS_KEY, HumanReadableText.UNSUFFICIENT_RIGHTS_DEFAULT_VALUE, params);
         no(command, tag, responder, humanReadableText);
     }
+
+    @Override
+    protected Closeable addContextToMDC(SetQuotaRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "SET_QUOTA")
+            .addContext("quotaRoot", message.getQuotaRoot())
+            .addContext("limits", message.getResourceLimits())
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/StartTLSProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/StartTLSProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/StartTLSProcessor.java
index 30c7ff8..a89b665 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/StartTLSProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/StartTLSProcessor.java
@@ -18,6 +18,7 @@
  ****************************************************************/
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
 import java.util.Collections;
 import java.util.List;
 
@@ -28,6 +29,7 @@ import org.apache.james.imap.api.process.ImapProcessor;
 import org.apache.james.imap.api.process.ImapSession;
 import org.apache.james.imap.message.request.StartTLSRequest;
 import org.apache.james.imap.processor.base.AbstractChainedProcessor;
+import org.apache.james.util.MDCBuilder;
 
 import com.google.common.collect.ImmutableList;
 
@@ -73,4 +75,10 @@ public class StartTLSProcessor extends AbstractChainedProcessor<StartTLSRequest>
         }
     }
 
+    @Override
+    protected Closeable addContextToMDC(StartTLSRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "START_TLS")
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/StatusProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/StatusProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/StatusProcessor.java
index 8b10e8c..b4bc96b 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/StatusProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/StatusProcessor.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
+
 import org.apache.james.imap.api.ImapCommand;
 import org.apache.james.imap.api.ImapSessionUtils;
 import org.apache.james.imap.api.display.HumanReadableText;
@@ -36,6 +38,7 @@ import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 import org.slf4j.Logger;
 
 public class StatusProcessor extends AbstractMailboxProcessor<StatusRequest> {
@@ -157,4 +160,13 @@ public class StatusProcessor extends AbstractMailboxProcessor<StatusRequest> {
         }
         return messages;
     }
+
+    @Override
+    protected Closeable addContextToMDC(StatusRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "STATUS")
+            .addContext("mailbox", message.getMailboxName())
+            .addContext("parameters", message.getStatusDataItems())
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/StoreProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/StoreProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/StoreProcessor.java
index a281c8d..44aecce 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/StoreProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/StoreProcessor.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -56,6 +57,7 @@ import org.apache.james.mailbox.model.MessageRange.Type;
 import org.apache.james.mailbox.model.MessageResult;
 import org.apache.james.mailbox.model.MessageResultIterator;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 import com.google.common.collect.ImmutableList;
 
@@ -344,4 +346,15 @@ public class StoreProcessor extends AbstractMailboxProcessor<StoreRequest> {
         }
         
     }
+
+    @Override
+    protected Closeable addContextToMDC(StoreRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "STORE")
+            .addContext("ranges", IdRange.toString(message.getIdSet()))
+            .addContext("useUids", message.isUseUids())
+            .addContext("unchangedSince", message.getUnchangedSince())
+            .addContext("isSilent", message.isSilent())
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/SubscribeProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/SubscribeProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/SubscribeProcessor.java
index 78cd530..732a584 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/SubscribeProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/SubscribeProcessor.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
+
 import org.apache.james.imap.api.ImapCommand;
 import org.apache.james.imap.api.ImapSessionUtils;
 import org.apache.james.imap.api.display.HumanReadableText;
@@ -31,6 +33,7 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.SubscriptionManager;
 import org.apache.james.mailbox.exception.SubscriptionException;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 public class SubscribeProcessor extends AbstractSubscriptionProcessor<SubscribeRequest> {
 
@@ -64,4 +67,11 @@ public class SubscribeProcessor extends AbstractSubscriptionProcessor<SubscribeR
         }
     }
 
+    @Override
+    protected Closeable addContextToMDC(SubscribeRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "SUBSCRIBE")
+            .addContext("mailbox", message.getMailboxName())
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/SystemMessageProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/SystemMessageProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/SystemMessageProcessor.java
index 2e1c28e..2054368 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/SystemMessageProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/SystemMessageProcessor.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
+
 import org.apache.james.imap.api.ImapSessionUtils;
 import org.apache.james.imap.api.process.ImapProcessor;
 import org.apache.james.imap.api.process.ImapSession;
@@ -27,6 +29,7 @@ import org.apache.james.imap.processor.base.AbstractChainedProcessor;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.util.MDCBuilder;
 
 /**
  * Processes system messages unrelated to IMAP.
@@ -76,4 +79,11 @@ public class SystemMessageProcessor extends AbstractChainedProcessor<SystemMessa
         }
     }
 
+    @Override
+    protected Closeable addContextToMDC(SystemMessage message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "SYSTEM_MESSAGE")
+            .addContext("message", message)
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/UnselectProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/UnselectProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/UnselectProcessor.java
index f046a5d..f392ea5 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/UnselectProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/UnselectProcessor.java
@@ -18,6 +18,7 @@
  ****************************************************************/
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
@@ -30,6 +31,7 @@ import org.apache.james.imap.api.process.ImapSession;
 import org.apache.james.imap.message.request.UnselectRequest;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 /**
  * Processor which implements the UNSELECT extension.
@@ -71,4 +73,10 @@ public class UnselectProcessor extends AbstractMailboxProcessor<UnselectRequest>
         return UNSELECT;
     }
 
+    @Override
+    protected Closeable addContextToMDC(UnselectRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "UNSELECT")
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/UnsubscribeProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/UnsubscribeProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/UnsubscribeProcessor.java
index 59f210d..b40bc6d 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/UnsubscribeProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/UnsubscribeProcessor.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.imap.processor;
 
+import java.io.Closeable;
+
 import org.apache.james.imap.api.ImapCommand;
 import org.apache.james.imap.api.ImapSessionUtils;
 import org.apache.james.imap.api.display.HumanReadableText;
@@ -31,6 +33,7 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.SubscriptionManager;
 import org.apache.james.mailbox.exception.SubscriptionException;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 public class UnsubscribeProcessor extends AbstractSubscriptionProcessor<UnsubscribeRequest> {
 
@@ -65,4 +68,11 @@ public class UnsubscribeProcessor extends AbstractSubscriptionProcessor<Unsubscr
         }
     }
 
+    @Override
+    protected Closeable addContextToMDC(UnsubscribeRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "UNSUBSCRIBE")
+            .addContext("mailbox", message.getMailboxName())
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/base/AbstractChainedProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/base/AbstractChainedProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/base/AbstractChainedProcessor.java
index e6649e6..f7ee515 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/base/AbstractChainedProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/base/AbstractChainedProcessor.java
@@ -19,11 +19,16 @@
 
 package org.apache.james.imap.processor.base;
 
+import java.io.Closeable;
+import java.io.IOException;
+
 import org.apache.james.imap.api.ImapConfiguration;
 import org.apache.james.imap.api.ImapMessage;
 import org.apache.james.imap.api.process.ImapProcessor;
 import org.apache.james.imap.api.process.ImapSession;
 
+import com.google.common.base.Throwables;
+
 abstract public class AbstractChainedProcessor<M extends ImapMessage> implements ImapProcessor {
 
     private final ImapProcessor next;
@@ -51,7 +56,12 @@ abstract public class AbstractChainedProcessor<M extends ImapMessage> implements
     public void process(ImapMessage message, Responder responder, ImapSession session) {
         final boolean isAcceptable = isAcceptable(message);
         if (isAcceptable) {
-            doProcess((M) message, responder, session);
+            M acceptableMessage = (M) message;
+            try (Closeable closeable = addContextToMDC(acceptableMessage)) {
+                doProcess(acceptableMessage, responder, session);
+            } catch (IOException e) {
+                throw Throwables.propagate(e);
+            }
         } else {
             next.process(message, responder, session);
         }
@@ -85,4 +95,9 @@ abstract public class AbstractChainedProcessor<M extends ImapMessage> implements
      *            <code>ImapSession</code>, not null
      */
     abstract protected void doProcess(M acceptableMessage, Responder responder, ImapSession session);
+
+    /**
+     * Add request specific information to the MDC, for contextual logging
+     */
+    abstract protected Closeable addContextToMDC(M message);
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/base/ImapResponseMessageProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/base/ImapResponseMessageProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/base/ImapResponseMessageProcessor.java
index f47085f..720dfa6 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/base/ImapResponseMessageProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/base/ImapResponseMessageProcessor.java
@@ -19,9 +19,12 @@
 
 package org.apache.james.imap.processor.base;
 
+import java.io.Closeable;
+
 import org.apache.james.imap.api.message.response.ImapResponseMessage;
 import org.apache.james.imap.api.process.ImapProcessor;
 import org.apache.james.imap.api.process.ImapSession;
+import org.apache.james.util.MDCBuilder;
 
 public class ImapResponseMessageProcessor extends AbstractChainedProcessor<ImapResponseMessage> {
 
@@ -32,4 +35,11 @@ public class ImapResponseMessageProcessor extends AbstractChainedProcessor<ImapR
     protected void doProcess(ImapResponseMessage acceptableMessage, Responder responder, ImapSession session) {
         responder.respond(acceptableMessage);
     }
+
+    @Override
+    protected Closeable addContextToMDC(ImapResponseMessage message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "RESPOND")
+            .build();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/56974b95/protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
index ec7f3e7..5c3ed47 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.imap.processor.fetch;
 
+import java.io.Closeable;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -50,6 +51,7 @@ import org.apache.james.mailbox.model.MessageResult.FetchGroup;
 import org.apache.james.mailbox.model.MessageResult.MimePath;
 import org.apache.james.mailbox.model.MessageResultIterator;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
 
 import com.google.common.collect.ImmutableList;
 
@@ -246,4 +248,13 @@ public class FetchProcessor extends AbstractMailboxProcessor<FetchRequest> {
         }
     }
 
+    @Override
+    protected Closeable addContextToMDC(FetchRequest message) {
+        return MDCBuilder.create()
+            .addContext(MDCBuilder.ACTION, "FETCH")
+            .addContext("useUid", message.isUseUids())
+            .addContext("idSet", IdRange.toString(message.getIdSet()))
+            .addContext("fetchedData", message.getFetch())
+            .build();
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org