JAMES-2113 Remove DEPRECATED ProtocolSessionLogger

This brings username on each IMAP log

(Note that because the username might be specified later on, IMAP needs a 
supplier)


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

Branch: refs/heads/master
Commit: 5d2e6a6e9dac614a9284067dd4b149baf1e4884f
Parents: a13597f
Author: benwa <btell...@linagora.com>
Authored: Thu Aug 10 16:52:49 2017 +0700
Committer: benwa <btell...@linagora.com>
Committed: Thu Aug 17 11:20:29 2017 +0700

----------------------------------------------------------------------
 .../protocols/api/logger/ContextualLogger.java  |  22 ++-
 .../api/logger/ProtocolSessionLogger.java       | 168 -------------------
 .../netty/ImapChannelUpstreamHandler.java       |  38 ++++-
 .../imapserver/netty/NettyImapSession.java      |  13 +-
 .../ManageSieveChannelUpstreamHandler.java      |  27 ++-
 5 files changed, 69 insertions(+), 199 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/5d2e6a6e/protocols/api/src/main/java/org/apache/james/protocols/api/logger/ContextualLogger.java
----------------------------------------------------------------------
diff --git 
a/protocols/api/src/main/java/org/apache/james/protocols/api/logger/ContextualLogger.java
 
b/protocols/api/src/main/java/org/apache/james/protocols/api/logger/ContextualLogger.java
index 8950c82..dcccc60 100644
--- 
a/protocols/api/src/main/java/org/apache/james/protocols/api/logger/ContextualLogger.java
+++ 
b/protocols/api/src/main/java/org/apache/james/protocols/api/logger/ContextualLogger.java
@@ -19,26 +19,34 @@
 
 package org.apache.james.protocols.api.logger;
 
+import java.util.function.Supplier;
+
 import org.apache.james.protocols.api.ProtocolSession;
 
 /**
  * {@link Logger} which adds context informations to the logged message.
  *
  */
-public class ContextualLogger implements Logger{
+public class ContextualLogger implements Logger {
 
-    private final ProtocolSession session;
+    private final Supplier<String> userSupplier;
+    private final String sessionId;
     private final Logger logger;
 
-    public ContextualLogger(ProtocolSession session, Logger logger) {
-        this.session = session;
+    public ContextualLogger(final ProtocolSession session, Logger logger) {
+        this(session::getUser, session.getSessionID(), logger);
+    }
+
+    public ContextualLogger(Supplier<String> userSupplier, String sessionId, 
Logger logger) {
+        this.userSupplier = userSupplier;
+        this.sessionId = sessionId;
         this.logger = logger;
     }
-    
+
     private String getText(String str) {
-        String user = session.getUser();
+        String user = userSupplier.get();
         StringBuilder sb = new StringBuilder();
-        sb.append("Id='").append(session.getSessionID());
+        sb.append("Id='").append(sessionId);
         sb.append("' User='");
         if (user != null) {
             sb.append(user);

http://git-wip-us.apache.org/repos/asf/james-project/blob/5d2e6a6e/protocols/api/src/main/java/org/apache/james/protocols/api/logger/ProtocolSessionLogger.java
----------------------------------------------------------------------
diff --git 
a/protocols/api/src/main/java/org/apache/james/protocols/api/logger/ProtocolSessionLogger.java
 
b/protocols/api/src/main/java/org/apache/james/protocols/api/logger/ProtocolSessionLogger.java
deleted file mode 100644
index df32a49..0000000
--- 
a/protocols/api/src/main/java/org/apache/james/protocols/api/logger/ProtocolSessionLogger.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-
-package org.apache.james.protocols.api.logger;
-
-
-/**
- * A {@link Logger} implementation which suffix every log message with the
- * session id Id
- * 
- * @deprecated use {@link ContextualLogger}
- * 
- */
-@Deprecated
-public class ProtocolSessionLogger implements Logger {
-    private final Logger logger;
-    private final String id;
-
-    public ProtocolSessionLogger(String id, Logger logger) {
-        this.logger = logger;
-        this.id = id;
-    }
-
-    private String getText(String str) {
-        return "ID=" + id + " " + str;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see 
org.apache.james.protocols.api.logger.Logger#debug(java.lang.String)
-     */
-    public void debug(String arg0) {
-        logger.debug(getText(arg0));
-    }
-
-
-    /*
-     * (non-Javadoc)
-     * @see 
org.apache.james.protocols.api.logger.Logger#debug(java.lang.String, 
java.lang.Throwable)
-     */
-    public void debug(String arg0, Throwable arg1) {
-        logger.debug(getText(arg0), arg1);
-    }
-
-
-    /*
-     * (non-Javadoc)
-     * @see 
org.apache.james.protocols.api.logger.Logger#error(java.lang.String)
-     */
-    public void error(String arg0) {
-        logger.error(getText(arg0));
-    }
-
-
-    /*
-     * (non-Javadoc)
-     * @see 
org.apache.james.protocols.api.logger.Logger#error(java.lang.String, 
java.lang.Throwable)
-     */
-    public void error(String arg0, Throwable arg1) {
-        logger.error(getText(arg0), arg1);
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.james.protocols.api.logger.Logger#info(java.lang.String)
-     */
-    public void info(String arg0) {
-        logger.info(getText(arg0));
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see 
org.apache.james.protocols.api.logger.Logger#info(java.lang.String, 
java.lang.Throwable)
-     */
-    public void info(String arg0, Throwable arg1) {
-        logger.info(getText(arg0), arg1);
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.james.protocols.api.logger.Logger#isDebugEnabled()
-     */
-    public boolean isDebugEnabled() {
-        return logger.isDebugEnabled();
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.james.protocols.api.logger.Logger#isErrorEnabled()
-     */
-    public boolean isErrorEnabled() {
-        return logger.isErrorEnabled();
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.james.protocols.api.logger.Logger#isInfoEnabled()
-     */
-    public boolean isInfoEnabled() {
-        return logger.isInfoEnabled();
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.james.protocols.api.logger.Logger#isTraceEnabled()
-     */
-    public boolean isTraceEnabled() {
-        return logger.isTraceEnabled();
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.james.protocols.api.logger.Logger#isWarnEnabled()
-     */
-    public boolean isWarnEnabled() {
-        return logger.isWarnEnabled();
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see 
org.apache.james.protocols.api.logger.Logger#trace(java.lang.String)
-     */
-    public void trace(String arg0) {
-        logger.trace(getText(arg0));
-    }
-    
-    /*
-     * (non-Javadoc)
-     * @see 
org.apache.james.protocols.api.logger.Logger#trace(java.lang.String, 
java.lang.Throwable)
-     */
-    public void trace(String arg0, Throwable arg1) {
-        logger.trace(getText(arg0), arg1);
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.james.protocols.api.logger.Logger#warn(java.lang.String)
-     */
-    public void warn(String arg0) {
-        logger.warn(getText(arg0));
-    }
-
-
-    /*
-     * (non-Javadoc)
-     * @see 
org.apache.james.protocols.api.logger.Logger#warn(java.lang.String, 
java.lang.Throwable)
-     */
-    public void warn(String arg0, Throwable arg1) {
-        logger.warn(getText(arg0), arg1);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/5d2e6a6e/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapChannelUpstreamHandler.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapChannelUpstreamHandler.java
 
b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapChannelUpstreamHandler.java
index 40916fd..0c5da20 100644
--- 
a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapChannelUpstreamHandler.java
+++ 
b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapChannelUpstreamHandler.java
@@ -20,6 +20,7 @@ package org.apache.james.imapserver.netty;
 
 import java.io.IOException;
 import java.net.InetSocketAddress;
+import java.util.function.Supplier;
 
 import javax.net.ssl.SSLContext;
 
@@ -33,8 +34,9 @@ import org.apache.james.imap.encode.ImapResponseComposer;
 import org.apache.james.imap.encode.base.ImapResponseComposerImpl;
 import org.apache.james.imap.main.ResponseEncoder;
 import org.apache.james.metrics.api.Metric;
+import org.apache.james.protocols.api.logger.ContextualLogger;
 import org.apache.james.protocols.api.logger.ProtocolLoggerAdapter;
-import org.apache.james.protocols.api.logger.ProtocolSessionLogger;
+import org.apache.james.protocols.imap.IMAPSession;
 import org.apache.james.protocols.lib.Slf4jLoggerAdapter;
 import org.jboss.netty.buffer.ChannelBuffers;
 import org.jboss.netty.channel.Channel;
@@ -51,7 +53,6 @@ import org.slf4j.Logger;
 /**
  * {@link SimpleChannelUpstreamHandler} which handles IMAP
  */
-@SuppressWarnings("deprecation")
 public class ImapChannelUpstreamHandler extends SimpleChannelUpstreamHandler 
implements NettyConstants{
 
     private final Logger logger;
@@ -95,22 +96,41 @@ public class ImapChannelUpstreamHandler extends 
SimpleChannelUpstreamHandler imp
         this.imapCommandsMetric = imapMetrics.getCommandsMetric();
     }
 
-    private Logger getLogger(Channel channel) {
-        return new Slf4jLoggerAdapter(new ProtocolSessionLogger("" + 
channel.getId(), new ProtocolLoggerAdapter(logger)));
+    private Logger getLogger(final ChannelHandlerContext ctx) {
+        return new Slf4jLoggerAdapter(
+            new ContextualLogger(
+                getUserSupplier(ctx),
+                "" + ctx.getChannel().getId(),
+                new ProtocolLoggerAdapter(logger)));
+    }
+
+    private Supplier<String> getUserSupplier(final ChannelHandlerContext ctx) {
+        return () -> {
+            Object o = attributes.get(ctx.getChannel());
+            if (o instanceof IMAPSession) {
+                IMAPSession session = (IMAPSession) o;
+                return session.getUser();
+            }
+            return null;
+        };
     }
 
     @Override
-    public void channelBound(ChannelHandlerContext ctx, ChannelStateEvent e) 
throws Exception {
-        ImapSession imapsession = new NettyImapSession(ctx.getChannel(), 
logger, context, enabledCipherSuites, compress, plainAuthDisallowed);
+    public void channelBound(final ChannelHandlerContext ctx, 
ChannelStateEvent e) throws Exception {
+        ImapSession imapsession = new NettyImapSession(ctx.getChannel(), 
toLogSupplier(ctx), context, enabledCipherSuites, compress, 
plainAuthDisallowed);
         attributes.set(ctx.getChannel(), imapsession);
         super.channelBound(ctx, e);
     }
 
+    private Supplier<Logger> toLogSupplier(final ChannelHandlerContext ctx) {
+        return () -> getLogger(ctx);
+    }
+
     @Override
     public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) 
throws Exception {
         
         InetSocketAddress address = (InetSocketAddress) 
ctx.getChannel().getRemoteAddress();
-        getLogger(ctx.getChannel()).info("Connection closed for " + 
address.getAddress().getHostAddress());
+        getLogger(ctx).info("Connection closed for " + 
address.getAddress().getHostAddress());
 
         // remove the stored attribute for the channel to free up resources
         // See JAMES-1195
@@ -126,7 +146,7 @@ public class ImapChannelUpstreamHandler extends 
SimpleChannelUpstreamHandler imp
     public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent 
e) throws Exception {
         
         InetSocketAddress address = (InetSocketAddress) 
ctx.getChannel().getRemoteAddress();
-        getLogger(ctx.getChannel()).info("Connection established from " + 
address.getAddress().getHostAddress());
+        getLogger(ctx).info("Connection established from " + 
address.getAddress().getHostAddress());
         imapConnectionsMetric.increment();
 
         ImapResponseComposer response = new ImapResponseComposerImpl(new 
ChannelImapResponseWriter(ctx.getChannel()));
@@ -141,7 +161,7 @@ public class ImapChannelUpstreamHandler extends 
SimpleChannelUpstreamHandler imp
     @Override
     public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) 
throws Exception {
         
-        getLogger(ctx.getChannel()).warn("Error while processing imap 
request", e.getCause());
+        getLogger(ctx).warn("Error while processing imap request", 
e.getCause());
 
         if (e.getCause() instanceof TooLongFrameException) {
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/5d2e6a6e/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/NettyImapSession.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/NettyImapSession.java
 
b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/NettyImapSession.java
index 3c7bafd..6c47b0a 100644
--- 
a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/NettyImapSession.java
+++ 
b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/NettyImapSession.java
@@ -20,6 +20,7 @@ package org.apache.james.imapserver.netty;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.function.Supplier;
 
 import javax.net.ssl.SSLContext;
 
@@ -27,9 +28,6 @@ import org.apache.james.imap.api.ImapSessionState;
 import org.apache.james.imap.api.process.ImapLineHandler;
 import org.apache.james.imap.api.process.ImapSession;
 import org.apache.james.imap.api.process.SelectedMailbox;
-import org.apache.james.protocols.api.logger.ProtocolLoggerAdapter;
-import org.apache.james.protocols.api.logger.ProtocolSessionLogger;
-import org.apache.james.protocols.lib.Slf4jLoggerAdapter;
 import org.jboss.netty.channel.Channel;
 import org.jboss.netty.handler.codec.compression.ZlibDecoder;
 import org.jboss.netty.handler.codec.compression.ZlibEncoder;
@@ -37,7 +35,6 @@ import org.jboss.netty.handler.codec.compression.ZlibWrapper;
 import org.jboss.netty.handler.ssl.SslHandler;
 import org.slf4j.Logger;
 
-@SuppressWarnings("deprecation")
 public class NettyImapSession implements ImapSession, NettyConstants {
 
     private ImapSessionState state = ImapSessionState.NON_AUTHENTICATED;
@@ -46,14 +43,14 @@ public class NettyImapSession implements ImapSession, 
NettyConstants {
     private final SSLContext sslContext;
     private final String[] enabledCipherSuites;
     private final boolean compress;
-    private final ProtocolSessionLogger log;
+    private final Supplier<Logger> log;
     private final Channel channel;
     private int handlerCount;
     private final boolean plainAuthDisallowed;
 
-    public NettyImapSession(Channel channel, Logger log, SSLContext 
sslContext, String[] enabledCipherSuites, boolean compress, boolean 
plainAuthDisallowed) {
+    public NettyImapSession(Channel channel, Supplier<Logger> log, SSLContext 
sslContext, String[] enabledCipherSuites, boolean compress, boolean 
plainAuthDisallowed) {
         this.channel = channel;
-        this.log = new ProtocolSessionLogger(channel.getId() + "", new 
ProtocolLoggerAdapter(log));
+        this.log = log;
         this.sslContext = sslContext;
         this.enabledCipherSuites = enabledCipherSuites;
         this.compress = compress;
@@ -230,7 +227,7 @@ public class NettyImapSession implements ImapSession, 
NettyConstants {
      * @see org.apache.james.imap.api.process.ImapSession#getLog()
      */
     public Logger getLog() {
-        return new Slf4jLoggerAdapter(log);
+        return log.get();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/james-project/blob/5d2e6a6e/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveChannelUpstreamHandler.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveChannelUpstreamHandler.java
 
b/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveChannelUpstreamHandler.java
index 89e6e5c..6533c1f 100644
--- 
a/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveChannelUpstreamHandler.java
+++ 
b/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveChannelUpstreamHandler.java
@@ -20,6 +20,7 @@
 package org.apache.james.managesieveserver.netty;
 
 import java.net.InetSocketAddress;
+import java.util.function.Supplier;
 
 import javax.net.ssl.SSLContext;
 
@@ -27,8 +28,8 @@ import org.apache.james.managesieve.api.Session;
 import org.apache.james.managesieve.api.SessionTerminatedException;
 import org.apache.james.managesieve.transcode.ManageSieveProcessor;
 import org.apache.james.managesieve.util.SettableSession;
+import org.apache.james.protocols.api.logger.ContextualLogger;
 import org.apache.james.protocols.api.logger.ProtocolLoggerAdapter;
-import org.apache.james.protocols.api.logger.ProtocolSessionLogger;
 import org.apache.james.protocols.lib.Slf4jLoggerAdapter;
 import org.jboss.netty.buffer.ChannelBuffers;
 import org.jboss.netty.channel.Channel;
@@ -43,7 +44,6 @@ import 
org.jboss.netty.handler.codec.frame.TooLongFrameException;
 import org.jboss.netty.handler.ssl.SslHandler;
 import org.slf4j.Logger;
 
-@SuppressWarnings("deprecation")
 public class ManageSieveChannelUpstreamHandler extends 
SimpleChannelUpstreamHandler {
 
     final static String SSL_HANDLER = "sslHandler";
@@ -80,7 +80,7 @@ public class ManageSieveChannelUpstreamHandler extends 
SimpleChannelUpstreamHand
 
     @Override
     public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) 
throws Exception {
-        getLogger(ctx.getChannel()).warn("Error while processing ManageSieve 
request", e.getCause());
+        getLogger(ctx).warn("Error while processing ManageSieve request", 
e.getCause());
 
         if (e.getCause() instanceof TooLongFrameException) {
             // Max line length exceeded
@@ -105,7 +105,7 @@ public class ManageSieveChannelUpstreamHandler extends 
SimpleChannelUpstreamHand
     @Override
     public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent 
e) throws Exception {
         InetSocketAddress address = (InetSocketAddress) 
ctx.getChannel().getRemoteAddress();
-        getLogger(ctx.getChannel()).info("Connection established from " + 
address.getAddress().getHostAddress());
+        getLogger(ctx).info("Connection established from " + 
address.getAddress().getHostAddress());
 
         Session session = new SettableSession();
         if (sslServer) {
@@ -120,14 +120,27 @@ public class ManageSieveChannelUpstreamHandler extends 
SimpleChannelUpstreamHand
     @Override
     public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) 
throws Exception {
         InetSocketAddress address = (InetSocketAddress) 
ctx.getChannel().getRemoteAddress();
-        getLogger(ctx.getChannel()).info("Connection closed for " + 
address.getAddress().getHostAddress());
+        getLogger(ctx).info("Connection closed for " + 
address.getAddress().getHostAddress());
 
         attributes.remove(ctx.getChannel());
         super.channelClosed(ctx, e);
     }
 
-    private Logger getLogger(Channel channel) {
-        return new Slf4jLoggerAdapter(new ProtocolSessionLogger("" + 
channel.getId(), new ProtocolLoggerAdapter(logger)));
+    private Logger getLogger(final ChannelHandlerContext ctx) {
+        return new Slf4jLoggerAdapter(
+            new ContextualLogger(getUserSupplier(ctx),
+                "" + ctx.getChannel().getId(),
+                new ProtocolLoggerAdapter(logger)));
+    }
+
+    private Supplier<String> getUserSupplier(final ChannelHandlerContext ctx) {
+        return () -> {
+            Session session = attributes.get(ctx.getChannel());
+            if (session != null) {
+                return session.getUser();
+            }
+            return null;
+        };
     }
 
     private void turnSSLon(Channel channel) {


---------------------------------------------------------------------
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