JAMES-2177 Logging Runtime exception with context in IMAP

Before, RuntimeException were logged by Jetty, outside of the scope of the MDC, 
hence we were loosing context


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

Branch: refs/heads/master
Commit: 9b0ebe2d4a6b945247b8da204bf3df805f736962
Parents: 1162147
Author: benwa <btell...@linagora.com>
Authored: Tue Oct 10 13:58:31 2017 +0700
Committer: benwa <btell...@linagora.com>
Committed: Wed Oct 11 10:08:44 2017 +0700

----------------------------------------------------------------------
 .../james/metrics/logger/DefaultMetricFactory.java      | 12 ++++++++++++
 .../imap/processor/base/AbstractChainedProcessor.java   | 10 +++++++++-
 2 files changed, 21 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/9b0ebe2d/metrics/metrics-logger/src/main/java/org/apache/james/metrics/logger/DefaultMetricFactory.java
----------------------------------------------------------------------
diff --git 
a/metrics/metrics-logger/src/main/java/org/apache/james/metrics/logger/DefaultMetricFactory.java
 
b/metrics/metrics-logger/src/main/java/org/apache/james/metrics/logger/DefaultMetricFactory.java
index b00e3f3..8f3f258 100644
--- 
a/metrics/metrics-logger/src/main/java/org/apache/james/metrics/logger/DefaultMetricFactory.java
+++ 
b/metrics/metrics-logger/src/main/java/org/apache/james/metrics/logger/DefaultMetricFactory.java
@@ -24,6 +24,8 @@ import org.apache.james.metrics.api.TimeMetric;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.function.Supplier;
+
 public class DefaultMetricFactory implements MetricFactory {
 
     public static final Logger LOGGER = 
LoggerFactory.getLogger(DefaultMetricFactory.class);
@@ -38,4 +40,14 @@ public class DefaultMetricFactory implements MetricFactory {
         return new DefaultTimeMetric(name);
     }
 
+    @Override
+    public <T> T withMetric(String name, Supplier<T> operation) {
+        TimeMetric timer = timer(name);
+        try {
+            return operation.get();
+        } finally {
+            timer.stopAndPublish();
+        }
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/9b0ebe2d/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 f7ee515..eed48c1 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
@@ -26,11 +26,14 @@ 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 org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Throwables;
 
 abstract public class AbstractChainedProcessor<M extends ImapMessage> 
implements ImapProcessor {
 
+    public static final Logger LOGGER = 
LoggerFactory.getLogger(AbstractChainedProcessor.class);
     private final ImapProcessor next;
     private final Class<M> acceptableClass;
 
@@ -58,7 +61,12 @@ abstract public class AbstractChainedProcessor<M extends 
ImapMessage> implements
         if (isAcceptable) {
             M acceptableMessage = (M) message;
             try (Closeable closeable = addContextToMDC(acceptableMessage)) {
-                doProcess(acceptableMessage, responder, session);
+                try {
+                    doProcess(acceptableMessage, responder, session);
+                } catch (RuntimeException e) {
+                    LOGGER.error("Error while processing IMAP request", e);
+                    throw e;
+                }
             } catch (IOException e) {
                 throw Throwables.propagate(e);
             }


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

Reply via email to