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