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/17 04:22:26 UTC
[2/4] james-project git commit: JAMES-2113 Remove DEPRECATED
ProtocolSessionLogger
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 <bt...@linagora.com>
Authored: Thu Aug 10 16:52:49 2017 +0700
Committer: benwa <bt...@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org