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