You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by lg...@apache.org on 2015/05/18 13:29:38 UTC

mina-sshd git commit: [SSHD-463] Use a common base class to provide logger instance wherever possible

Repository: mina-sshd
Updated Branches:
  refs/heads/master bd1d975ad -> 60dac4dde


[SSHD-463] Use a common base class to provide logger instance wherever possible


Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/60dac4dd
Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/60dac4dd
Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/60dac4dd

Branch: refs/heads/master
Commit: 60dac4dded99dfd2f0989f65d245c9c3299ef6de
Parents: bd1d975
Author: Lyor Goldstein <lg...@vmware.com>
Authored: Mon May 18 14:29:28 2015 +0300
Committer: Lyor Goldstein <lg...@vmware.com>
Committed: Mon May 18 14:29:28 2015 +0300

----------------------------------------------------------------------
 .../sshd/agent/local/AgentServerProxy.java      |  6 ---
 .../sshd/agent/unix/AgentServerProxy.java       | 27 +++++------
 .../auth/UserAuthKeyboardInteractive.java       | 16 ++++---
 .../sshd/client/auth/UserAuthPassword.java      | 10 ++--
 .../sshd/client/auth/UserAuthPublicKey.java     | 10 ++--
 .../keyverifier/AcceptAllServerKeyVerifier.java | 12 ++---
 .../DelegatingServerKeyVerifier.java            | 17 ++++---
 .../keyverifier/RequiredServerKeyVerifier.java  | 22 +++++----
 .../sshd/common/channel/AbstractChannel.java    |  8 ++++
 .../org/apache/sshd/common/channel/Window.java  |  8 +---
 .../file/nativefs/NativeFileSystemFactory.java  | 25 +++++-----
 .../sshd/common/future/DefaultSshFuture.java    | 10 ++--
 .../common/io/AbstractIoServiceFactory.java     |  4 --
 .../io/DefaultIoServiceFactoryFactory.java      |  2 +-
 .../apache/sshd/common/io/mina/MinaService.java |  5 --
 .../sshd/common/io/nio2/Nio2Acceptor.java       | 14 +++---
 .../sshd/common/io/nio2/Nio2Connector.java      |  2 +-
 .../apache/sshd/common/io/nio2/Nio2Service.java | 10 ++--
 .../sshd/common/io/nio2/Nio2ServiceFactory.java | 12 +++--
 .../common/kex/dh/AbstractDHKeyExchange.java    |  7 +--
 .../keyprovider/AbstractKeyPairProvider.java    |  7 +--
 .../keyprovider/ResourceKeyPairProvider.java    |  9 ----
 .../org/apache/sshd/common/scp/ScpHelper.java   | 10 ++--
 .../common/session/SessionTimeoutListener.java  | 23 ++++-----
 .../sshd/common/util/AbstractLoggingBean.java   | 49 ++++++++++++++++++++
 .../apache/sshd/common/util/CloseableUtils.java | 27 ++++++++---
 .../apache/sshd/common/util/SecurityUtils.java  | 23 +++++----
 .../sshd/server/auth/AbstractUserAuth.java      | 13 +++---
 .../server/channel/AbstractServerChannel.java   | 15 +++++-
 .../sshd/server/channel/PipeDataReceiver.java   |  9 ++--
 .../server/channel/PuttyRequestHandler.java     | 16 +++----
 .../apache/sshd/server/command/ScpCommand.java  | 29 +++++++-----
 .../server/jaas/JaasPasswordAuthenticator.java  | 17 +++++--
 .../apache/sshd/server/sftp/SftpSubsystem.java  |  7 +--
 .../sshd/server/shell/ProcessShellFactory.java  | 18 ++++---
 .../sshd/deprecated/AbstractUserAuth.java       |  9 +---
 .../deprecated/ClientUserAuthServiceOld.java    |  6 ---
 .../sshd/deprecated/UserAuthPassword.java       |  5 --
 .../sshd/deprecated/UserAuthPublicKey.java      |  5 --
 .../java/org/apache/sshd/util/JSchLogger.java   |  4 ++
 40 files changed, 288 insertions(+), 240 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/agent/local/AgentServerProxy.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/agent/local/AgentServerProxy.java b/sshd-core/src/main/java/org/apache/sshd/agent/local/AgentServerProxy.java
index 78cb8ce..32ae13f 100644
--- a/sshd-core/src/main/java/org/apache/sshd/agent/local/AgentServerProxy.java
+++ b/sshd-core/src/main/java/org/apache/sshd/agent/local/AgentServerProxy.java
@@ -25,17 +25,11 @@ import org.apache.sshd.agent.SshAgent;
 import org.apache.sshd.agent.SshAgentServer;
 import org.apache.sshd.client.future.OpenFuture;
 import org.apache.sshd.common.session.ConnectionService;
-import org.apache.sshd.server.session.ServerSession;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * The server side fake agent, acting as an agent, but actually forwarding the requests to the auth channel on the client side.
  */
 public class AgentServerProxy implements SshAgentServer {
-
-    private static final Logger LOG = LoggerFactory.getLogger(AgentServerProxy.class);
-
     private final ConnectionService service;
     private String id;
 

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentServerProxy.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentServerProxy.java b/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentServerProxy.java
index 993c174..aa40241 100644
--- a/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentServerProxy.java
+++ b/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentServerProxy.java
@@ -25,21 +25,17 @@ import org.apache.sshd.agent.SshAgentServer;
 import org.apache.sshd.client.future.OpenFuture;
 import org.apache.sshd.common.SshException;
 import org.apache.sshd.common.session.ConnectionService;
+import org.apache.sshd.common.util.AbstractLoggingBean;
 import org.apache.sshd.common.util.OsUtils;
 import org.apache.tomcat.jni.Local;
 import org.apache.tomcat.jni.Pool;
 import org.apache.tomcat.jni.Socket;
 import org.apache.tomcat.jni.Status;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * The server side fake agent, acting as an agent, but actually forwarding the requests to the auth channel on the client side.
  */
-public class AgentServerProxy implements SshAgentServer {
-
-    private static final Logger LOG = LoggerFactory.getLogger(AgentServerProxy.class);
-
+public class AgentServerProxy extends AbstractLoggingBean implements SshAgentServer {
     private final ConnectionService service;
     private final String authSocket;
     private final long pool;
@@ -93,7 +89,7 @@ public class AgentServerProxy implements SshAgentServer {
                                 }
                             } catch (Exception e) {
                                 if (!closed) {
-                                    LOG.info("Exchange caught in authentication forwarding", e);
+                                    log.info("Exchange caught in authentication forwarding", e);
                                 }
                             }
                         }
@@ -122,7 +118,7 @@ public class AgentServerProxy implements SshAgentServer {
             return;
         }
         closed = true;
-        final boolean isDebug = LOG.isDebugEnabled();
+        final boolean isDebug = log.isDebugEnabled();
 
         if (handle != 0) {
             if (!innerFinished) {
@@ -134,7 +130,7 @@ public class AgentServerProxy implements SshAgentServer {
 
                     if (connectResult != Status.APR_SUCCESS) {
                         if (isDebug) {
-                            LOG.debug("Unable to connect to socket PIPE {}. APR errcode {}", authSocket, connectResult);
+                            log.debug("Unable to connect to socket PIPE {}. APR errcode {}", authSocket, Long.valueOf(connectResult));
                         }
                     }
 
@@ -142,21 +138,20 @@ public class AgentServerProxy implements SshAgentServer {
                     int sendResult = Socket.send(tmpSocket, END_OF_STREAM_MESSAGE, 0, 1);
                     if (sendResult != 1) {
                         if (isDebug) {
-                            LOG.debug("Unable to send signal the EOS for {}. APR retcode {} != 1", authSocket,
-                                    sendResult);
+                            log.debug("Unable to send signal the EOS for {}. APR retcode {} != 1", authSocket, Integer.valueOf(sendResult));
                         }
                     }
                 } catch (Exception e) {
                     //log eventual exceptions in debug mode
                     if (isDebug) {
-                        LOG.debug("Exception connecting to the PIPE socket: " + authSocket, e);
+                        log.debug("Exception connecting to the PIPE socket: " + authSocket, e);
                     }
                 }
             }
 
             final int closeCode = Socket.close(handle);
             if (closeCode != Status.APR_SUCCESS) {
-                LOG.warn("Exceptions closing the PIPE: {}. APR error code: {} ", authSocket, closeCode);
+                log.warn("Exceptions closing the PIPE: {}. APR error code: {} ", authSocket, Integer.valueOf(closeCode));
             }
         }
 
@@ -167,7 +162,7 @@ public class AgentServerProxy implements SshAgentServer {
                 if (socketFile.exists()) {
                     if (socketFile.delete()) {
                         if (isDebug) {
-                            LOG.debug("Deleted PIPE socket {}", socketFile);
+                            log.debug("Deleted PIPE socket {}", socketFile);
                         }
                     }
 
@@ -175,7 +170,7 @@ public class AgentServerProxy implements SshAgentServer {
                         final File parentFile = socketFile.getParentFile();
                         if (parentFile.delete()) {
                             if (isDebug) {
-                                LOG.debug("Deleted parent PIPE socket {}", parentFile);
+                                log.debug("Deleted parent PIPE socket {}", parentFile);
                             }
                         }
                     }
@@ -184,7 +179,7 @@ public class AgentServerProxy implements SshAgentServer {
         } catch (Exception e) {
             //log eventual exceptions in debug mode
             if (isDebug) {
-                LOG.debug("Exception deleting the PIPE socket: " + authSocket, e);
+                log.debug("Exception deleting the PIPE socket: " + authSocket, e);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthKeyboardInteractive.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthKeyboardInteractive.java b/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthKeyboardInteractive.java
index e3ec446..b27b182 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthKeyboardInteractive.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthKeyboardInteractive.java
@@ -18,6 +18,9 @@
  */
 package org.apache.sshd.client.auth;
 
+import static org.apache.sshd.common.SshConstants.SSH_MSG_USERAUTH_INFO_REQUEST;
+import static org.apache.sshd.common.SshConstants.SSH_MSG_USERAUTH_INFO_RESPONSE;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Iterator;
@@ -29,20 +32,16 @@ import org.apache.sshd.client.UserAuth;
 import org.apache.sshd.client.UserInteraction;
 import org.apache.sshd.common.NamedFactory;
 import org.apache.sshd.common.SshConstants;
+import org.apache.sshd.common.util.AbstractLoggingBean;
 import org.apache.sshd.common.util.GenericUtils;
 import org.apache.sshd.common.util.buffer.Buffer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.apache.sshd.common.SshConstants.SSH_MSG_USERAUTH_INFO_REQUEST;
-import static org.apache.sshd.common.SshConstants.SSH_MSG_USERAUTH_INFO_RESPONSE;
 
 /**
  * TODO Add javadoc
  *
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
-public class UserAuthKeyboardInteractive implements UserAuth {
+public class UserAuthKeyboardInteractive extends AbstractLoggingBean implements UserAuth {
 
     public static class UserAuthKeyboardInteractiveFactory implements NamedFactory<UserAuth> {
         public static final UserAuthKeyboardInteractiveFactory INSTANCE = new UserAuthKeyboardInteractiveFactory();
@@ -61,7 +60,6 @@ public class UserAuthKeyboardInteractive implements UserAuth {
         }
     }
 
-    protected final Logger log = LoggerFactory.getLogger(getClass());
     private ClientSession session;
     private String service;
     private Iterator<String> passwords;
@@ -69,6 +67,10 @@ public class UserAuthKeyboardInteractive implements UserAuth {
     private int nbTrials;
     private int maxTrials;
 
+    public UserAuthKeyboardInteractive() {
+        super();
+    }
+
     @Override
     public void init(ClientSession session, String service, List<Object> identities) throws Exception {
         this.session = session;

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPassword.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPassword.java b/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPassword.java
index 3f91481..0754014 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPassword.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPassword.java
@@ -26,16 +26,15 @@ import org.apache.sshd.ClientSession;
 import org.apache.sshd.client.UserAuth;
 import org.apache.sshd.common.NamedFactory;
 import org.apache.sshd.common.SshConstants;
+import org.apache.sshd.common.util.AbstractLoggingBean;
 import org.apache.sshd.common.util.buffer.Buffer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * TODO Add javadoc
  *
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
-public class UserAuthPassword implements UserAuth {
+public class UserAuthPassword extends AbstractLoggingBean implements UserAuth {
 
     public static class UserAuthPasswordFactory implements NamedFactory<UserAuth> {
         public static final UserAuthPasswordFactory INSTANCE = new UserAuthPasswordFactory();
@@ -54,12 +53,15 @@ public class UserAuthPassword implements UserAuth {
         }
     }
 
-    protected final Logger log = LoggerFactory.getLogger(getClass());
     private ClientSession session;
     private String service;
     private Iterator<String> passwords;
     private String current;
 
+    public UserAuthPassword() {
+        super();
+    }
+
     @Override
     public void init(ClientSession session, String service, List<Object> identities) throws Exception {
         this.session = session;

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPublicKey.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPublicKey.java b/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPublicKey.java
index 12b334a..70b9426 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPublicKey.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPublicKey.java
@@ -37,17 +37,16 @@ import org.apache.sshd.common.NamedFactory;
 import org.apache.sshd.common.Signature;
 import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.session.AbstractSession;
+import org.apache.sshd.common.util.AbstractLoggingBean;
 import org.apache.sshd.common.util.buffer.Buffer;
 import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * TODO Add javadoc
  *
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
-public class UserAuthPublicKey implements UserAuth {
+public class UserAuthPublicKey extends AbstractLoggingBean implements UserAuth {
 
     public static class UserAuthPublicKeyFactory implements NamedFactory<UserAuth> {
         public static final UserAuthPublicKeyFactory INSTANCE = new UserAuthPublicKeyFactory();
@@ -66,13 +65,16 @@ public class UserAuthPublicKey implements UserAuth {
         }
     }
 
-    protected final Logger log = LoggerFactory.getLogger(getClass());
     private ClientSession session;
     private String service;
     private SshAgent agent;
     private Iterator<PublicKeyIdentity> keys;
     private PublicKeyIdentity current;
 
+    public UserAuthPublicKey() {
+        super();
+    }
+
     @Override
     public void init(ClientSession session, String service, List<Object> identities) throws Exception {
         this.session = session;

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/AcceptAllServerKeyVerifier.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/AcceptAllServerKeyVerifier.java b/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/AcceptAllServerKeyVerifier.java
index 9836618..5732191 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/AcceptAllServerKeyVerifier.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/AcceptAllServerKeyVerifier.java
@@ -23,29 +23,25 @@ import java.security.PublicKey;
 
 import org.apache.sshd.ClientSession;
 import org.apache.sshd.client.ServerKeyVerifier;
+import org.apache.sshd.common.util.AbstractLoggingBean;
 import org.apache.sshd.common.util.KeyUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * A ServerKeyVerifier that accepts all server keys.
  *
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
-public class AcceptAllServerKeyVerifier implements ServerKeyVerifier {
-
-	protected final Logger log = LoggerFactory.getLogger(getClass());
-
+public class AcceptAllServerKeyVerifier extends AbstractLoggingBean implements ServerKeyVerifier {
 	public static final ServerKeyVerifier INSTANCE = new AcceptAllServerKeyVerifier();
 
 	private AcceptAllServerKeyVerifier() {
+	    super();
 	}
 
 	@Override
     public boolean verifyServerKey(ClientSession sshClientSession, SocketAddress remoteAddress, PublicKey serverKey) {
         log.warn("Server at {} presented unverified {} key: {}",
-                new Object[] { remoteAddress, serverKey.getAlgorithm(), KeyUtils.getFingerPrint(serverKey) });
+                 new Object[] { remoteAddress, serverKey.getAlgorithm(), KeyUtils.getFingerPrint(serverKey) });
 		return true;
 	}
-
 }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/DelegatingServerKeyVerifier.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/DelegatingServerKeyVerifier.java b/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/DelegatingServerKeyVerifier.java
index 81b49ec..6bdbdc7 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/DelegatingServerKeyVerifier.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/DelegatingServerKeyVerifier.java
@@ -24,8 +24,7 @@ import java.util.Map;
 
 import org.apache.sshd.ClientSession;
 import org.apache.sshd.client.ServerKeyVerifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.sshd.common.util.AbstractLoggingBean;
 
 /*
  * A ServerKeyVerifier that delegates verification to the ServerKeyVerifier found in the ClientSession metadata
@@ -34,15 +33,19 @@ import org.slf4j.LoggerFactory;
  *
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
-public class DelegatingServerKeyVerifier implements ServerKeyVerifier {
+public class DelegatingServerKeyVerifier extends AbstractLoggingBean implements ServerKeyVerifier {
+    public DelegatingServerKeyVerifier() {
+        super();
+    }
 
-	protected final Logger log = LoggerFactory.getLogger(getClass());
-
-	public boolean verifyServerKey(ClientSession sshClientSession, SocketAddress remoteAddress, PublicKey serverKey) {
+	@Override
+    public boolean verifyServerKey(ClientSession sshClientSession, SocketAddress remoteAddress, PublicKey serverKey) {
 		Map<Object, Object> metadataMap = sshClientSession.getMetadataMap();
 		Object verifier = metadataMap.get(ServerKeyVerifier.class);
 		if (verifier == null) {
-			log.trace("No verifier found in ClientSession metadata; accepting server key");
+		    if (log.isTraceEnabled()) {
+		        log.trace("verifyServerKey(" + remoteAddress + ") No verifier found in ClientSession metadata; accepting server key");
+		    }
 			return true;
 		}
 		// We throw if it's not a ServerKeyVerifier...

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/RequiredServerKeyVerifier.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/RequiredServerKeyVerifier.java b/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/RequiredServerKeyVerifier.java
index 9a29f6d..4543546 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/RequiredServerKeyVerifier.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/RequiredServerKeyVerifier.java
@@ -23,29 +23,31 @@ import java.security.PublicKey;
 
 import org.apache.sshd.ClientSession;
 import org.apache.sshd.client.ServerKeyVerifier;
+import org.apache.sshd.common.util.AbstractLoggingBean;
 import org.apache.sshd.common.util.buffer.BufferUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * A ServerKeyVerifier that accepts one server key (specified in the constructor)
  *
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
-public class RequiredServerKeyVerifier implements ServerKeyVerifier {
-
-	protected final Logger log = LoggerFactory.getLogger(getClass());
-
-	final PublicKey requiredKey;
+public class RequiredServerKeyVerifier extends AbstractLoggingBean implements ServerKeyVerifier {
+	private final PublicKey requiredKey;
 
 	public RequiredServerKeyVerifier(PublicKey requiredKey) {
-		super();
 		this.requiredKey = requiredKey;
 	}
 
-	public boolean verifyServerKey(ClientSession sshClientSession, SocketAddress remoteAddress, PublicKey serverKey) {
+	public final PublicKey getRequiredKey() {
+	    return requiredKey;
+	}
+
+	@Override
+    public boolean verifyServerKey(ClientSession sshClientSession, SocketAddress remoteAddress, PublicKey serverKey) {
 		if (requiredKey.equals(serverKey)) {
-            log.debug("Server at {} presented expected key: {}", remoteAddress, BufferUtils.printHex(serverKey.getEncoded()));
+		    if (log.isDebugEnabled()) {
+		        log.debug("Server at {} presented expected key: {}", remoteAddress, BufferUtils.printHex(serverKey.getEncoded()));
+		    }
 			return true;
 		} else {
             log.error("Server at {} presented wrong key: {}", remoteAddress, BufferUtils.printHex(serverKey.getEncoded()));

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java b/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java
index 51a8a08..7b8c7ef 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java
@@ -68,6 +68,14 @@ public abstract class AbstractChannel extends CloseableUtils.AbstractInnerClosea
     protected final DefaultCloseFuture gracefulFuture = new DefaultCloseFuture(lock);
     protected final List<RequestHandler<Channel>> handlers = new ArrayList<RequestHandler<Channel>>();
 
+    protected AbstractChannel() {
+        super();
+    }
+
+    protected AbstractChannel(String discriminator) {
+        super(discriminator);
+    }
+
     public void addRequestHandler(RequestHandler<Channel> handler) {
         handlers.add(handler);
     }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/common/channel/Window.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/channel/Window.java b/sshd-core/src/main/java/org/apache/sshd/common/channel/Window.java
index cf7534c..d1bce18 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/channel/Window.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/channel/Window.java
@@ -20,8 +20,7 @@ package org.apache.sshd.common.channel;
 
 import java.io.IOException;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.sshd.common.util.AbstractLoggingBean;
 
 /**
  * A Window for a given channel.
@@ -32,10 +31,7 @@ import org.slf4j.LoggerFactory;
  *
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
-public class Window {
-
-    private final static Logger log = LoggerFactory.getLogger(Window.class);
-
+public class Window extends AbstractLoggingBean {
     private final AbstractChannel channel;
     private final Object lock;
     private final String name;

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/common/file/nativefs/NativeFileSystemFactory.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/file/nativefs/NativeFileSystemFactory.java b/sshd-core/src/main/java/org/apache/sshd/common/file/nativefs/NativeFileSystemFactory.java
index 1561dbc..0da3070 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/file/nativefs/NativeFileSystemFactory.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/file/nativefs/NativeFileSystemFactory.java
@@ -25,20 +25,24 @@ import java.nio.file.FileSystems;
 
 import org.apache.sshd.common.Session;
 import org.apache.sshd.common.file.FileSystemFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.sshd.common.util.AbstractLoggingBean;
 
 /**
  * Native file system factory. It uses the OS file system.
  *
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
-public class NativeFileSystemFactory implements FileSystemFactory {
-
-    private final Logger LOG = LoggerFactory.getLogger(NativeFileSystemFactory.class);
-
+public class NativeFileSystemFactory extends AbstractLoggingBean implements FileSystemFactory {
     private boolean createHome;
 
+    public NativeFileSystemFactory() {
+        this(false);
+    }
+    
+    public NativeFileSystemFactory(boolean createHome) {
+        this.createHome = createHome;
+    }
+
     /**
      * Should the home directories be created automatically
      * @return true if the file system will create the home directory if not available
@@ -51,14 +55,11 @@ public class NativeFileSystemFactory implements FileSystemFactory {
      * Set if the home directories be created automatically
      * @param createHome true if the file system will create the home directory if not available
      */
-
     public void setCreateHome(boolean createHome) {
         this.createHome = createHome;
     }
 
-    /**
-     * Create the appropriate user file system view.
-     */
+    @Override
     public FileSystem createFileSystem(Session session) {
         String userName = session.getUsername();
         // create home if does not exist
@@ -66,11 +67,11 @@ public class NativeFileSystemFactory implements FileSystemFactory {
             String homeDirStr = "/home/" + userName;
             File homeDir = new File(homeDirStr);
             if (homeDir.isFile()) {
-                LOG.warn("Not a directory :: " + homeDirStr);
+                log.warn("Not a directory :: " + homeDirStr);
 //                    throw new FtpException("Not a directory :: " + homeDirStr);
             }
             if ((!homeDir.exists()) && (!homeDir.mkdirs())) {
-                LOG.warn("Cannot create user home :: " + homeDirStr);
+                log.warn("Cannot create user home :: " + homeDirStr);
 //                    throw new FtpException("Cannot create user home :: "
 //                            + homeDirStr);
             }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/common/future/DefaultSshFuture.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/future/DefaultSshFuture.java b/sshd-core/src/main/java/org/apache/sshd/common/future/DefaultSshFuture.java
index 2e9b8af..8d263e8 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/future/DefaultSshFuture.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/future/DefaultSshFuture.java
@@ -21,18 +21,14 @@ package org.apache.sshd.common.future;
 import java.lang.reflect.Array;
 import java.util.concurrent.TimeUnit;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.sshd.common.util.AbstractLoggingBean;
 
 /**
  * A default implementation of {@link SshFuture}.
  *
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
-public class DefaultSshFuture<T extends SshFuture> implements SshFuture<T> {
-
-    final Logger logger = LoggerFactory.getLogger(getClass());
-
+public class DefaultSshFuture<T extends SshFuture> extends AbstractLoggingBean implements SshFuture<T> {
     /** A default value to indicate the future has been canceled */
     private static final Object CANCELED = new Object();
     /** A value indicating a null */
@@ -272,7 +268,7 @@ public class DefaultSshFuture<T extends SshFuture> implements SshFuture<T> {
         try {
             l.operationComplete(asT());
         } catch (Throwable t) {
-            logger.warn("Listener threw an exception", t);
+            log.warn("Listener threw an exception", t);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/common/io/AbstractIoServiceFactory.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/io/AbstractIoServiceFactory.java b/sshd-core/src/main/java/org/apache/sshd/common/io/AbstractIoServiceFactory.java
index 6682884..8acf795 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/io/AbstractIoServiceFactory.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/io/AbstractIoServiceFactory.java
@@ -25,21 +25,17 @@ import java.util.concurrent.TimeUnit;
 import org.apache.sshd.common.FactoryManager;
 import org.apache.sshd.common.FactoryManagerUtils;
 import org.apache.sshd.common.util.CloseableUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
 public abstract class AbstractIoServiceFactory extends CloseableUtils.AbstractCloseable implements IoServiceFactory {
 
-    protected final Logger logger;
     private final FactoryManager manager;
     private final ExecutorService executor;
     private final boolean shutdownExecutor;
 
     protected AbstractIoServiceFactory(FactoryManager factoryManager, ExecutorService executorService, boolean shutdownOnExit) {
-        logger = LoggerFactory.getLogger(getClass());
         manager = factoryManager;
         executor = executorService;
         shutdownExecutor = shutdownOnExit;

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/common/io/DefaultIoServiceFactoryFactory.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/io/DefaultIoServiceFactoryFactory.java b/sshd-core/src/main/java/org/apache/sshd/common/io/DefaultIoServiceFactoryFactory.java
index 6cc56a6..f40700c 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/io/DefaultIoServiceFactoryFactory.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/io/DefaultIoServiceFactoryFactory.java
@@ -33,6 +33,7 @@ public class DefaultIoServiceFactoryFactory implements IoServiceFactoryFactory {
 
     private IoServiceFactoryFactory factory;
 
+    @Override
     public IoServiceFactory create(FactoryManager manager) {
         return getFactory().create(manager);
     }
@@ -101,5 +102,4 @@ public class DefaultIoServiceFactoryFactory implements IoServiceFactoryFactory {
         }
         throw new IllegalStateException("Unable to create instance of class " + factory);
     }
-
 }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/common/io/mina/MinaService.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/io/mina/MinaService.java b/sshd-core/src/main/java/org/apache/sshd/common/io/mina/MinaService.java
index 5eefd24..0d0cdc8 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/io/mina/MinaService.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/io/mina/MinaService.java
@@ -34,15 +34,10 @@ import org.apache.sshd.common.Closeable;
 import org.apache.sshd.common.FactoryManager;
 import org.apache.sshd.common.FactoryManagerUtils;
 import org.apache.sshd.common.util.CloseableUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  */
 public abstract class MinaService extends CloseableUtils.AbstractCloseable implements org.apache.sshd.common.io.IoService, IoHandler, Closeable {
-
-    protected final Logger log = LoggerFactory.getLogger(getClass());
-
     protected final FactoryManager manager;
     protected final org.apache.sshd.common.io.IoHandler handler;
     protected final IoProcessor<NioSession> ioProcessor;

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Acceptor.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Acceptor.java b/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Acceptor.java
index 925c966..b38e549 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Acceptor.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Acceptor.java
@@ -54,7 +54,7 @@ public class Nio2Acceptor extends Nio2Service implements IoAcceptor {
     @Override
     public void bind(Collection<? extends SocketAddress> addresses) throws IOException {
         for (SocketAddress address : addresses) {
-            logger.debug("Binding Nio2Acceptor to address {}", address);
+            log.debug("Binding Nio2Acceptor to address {}", address);
             AsynchronousServerSocketChannel socket = AsynchronousServerSocketChannel.open(group);
             setOption(socket, FactoryManager.SOCKET_KEEPALIVE, StandardSocketOptions.SO_KEEPALIVE, null);
             setOption(socket, FactoryManager.SOCKET_LINGER, StandardSocketOptions.SO_LINGER, null);
@@ -76,7 +76,7 @@ public class Nio2Acceptor extends Nio2Service implements IoAcceptor {
 
     @Override
     public void unbind() {
-        logger.debug("Unbinding");
+        log.debug("Unbinding");
         unbind(getBoundAddresses());
     }
 
@@ -116,7 +116,7 @@ public class Nio2Acceptor extends Nio2Service implements IoAcceptor {
             try {
                 channels.get(address).close();
             } catch (IOException e) {
-                logger.debug("Exception caught while closing channel", e);
+                log.debug("Exception caught while closing channel", e);
             }
         }
         super.doCloseImmediately();
@@ -170,10 +170,10 @@ public class Nio2Acceptor extends Nio2Service implements IoAcceptor {
         @Override
         protected void onFailed(final Throwable exc, final SocketAddress address) {
             if (channels.containsKey(address) && !disposing.get()) {
-                logger.warn("Caught " + exc.getClass().getSimpleName()
-                          + " while accepting incoming connection from " + address
-                          + ": " + exc.getMessage(),
-                            exc);
+                log.warn("Caught " + exc.getClass().getSimpleName()
+                       + " while accepting incoming connection from " + address
+                       + ": " + exc.getMessage(),
+                         exc);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Connector.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Connector.java b/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Connector.java
index d544cc8..722f9f5 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Connector.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Connector.java
@@ -41,7 +41,7 @@ public class Nio2Connector extends Nio2Service implements IoConnector {
 
     @Override
     public IoConnectFuture connect(SocketAddress address) {
-        logger.debug("Connecting to {}", address);
+        log.debug("Connecting to {}", address);
         final IoConnectFuture future = new DefaultIoConnectFuture(null);
         try {
             final AsynchronousSocketChannel socket = AsynchronousSocketChannel.open(group);

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Service.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Service.java b/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Service.java
index 7c9af13..a9b23a5 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Service.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Service.java
@@ -35,14 +35,10 @@ import org.apache.sshd.common.io.IoService;
 import org.apache.sshd.common.io.IoSession;
 import org.apache.sshd.common.util.CloseableUtils;
 import org.apache.sshd.common.util.GenericUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  */
 public abstract class Nio2Service extends CloseableUtils.AbstractInnerCloseable implements IoService {
-
-    protected final Logger logger = LoggerFactory.getLogger(getClass());
     protected final FactoryManager manager;
     protected final IoHandler handler;
     protected final Map<Long, IoSession> sessions;
@@ -50,7 +46,7 @@ public abstract class Nio2Service extends CloseableUtils.AbstractInnerCloseable
     protected final AsynchronousChannelGroup group;
 
     protected Nio2Service(FactoryManager manager, IoHandler handler, AsynchronousChannelGroup group) {
-        logger.debug("Creating {}", getClass().getSimpleName());
+        log.debug("Creating {}", getClass().getSimpleName());
         this.manager = manager;
         this.handler = handler;
         this.sessions = new ConcurrentHashMap<Long, IoSession>();
@@ -61,7 +57,7 @@ public abstract class Nio2Service extends CloseableUtils.AbstractInnerCloseable
         try {
             close(true).await();
         } catch (InterruptedException e) {
-            logger.debug("Exception caught while closing", e);
+            log.debug("Exception caught while closing", e);
         }
     }
 
@@ -96,7 +92,7 @@ public abstract class Nio2Service extends CloseableUtils.AbstractInnerCloseable
             try {
                 socket.setOption(option, val);
             } catch (IOException e) {
-                logger.warn("Unable to set socket option " + option + " to " + val, e);
+                log.warn("Unable to set socket option " + option + " to " + val, e);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2ServiceFactory.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2ServiceFactory.java b/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2ServiceFactory.java
index 9f433fe..5b144d8 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2ServiceFactory.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2ServiceFactory.java
@@ -44,15 +44,17 @@ public class Nio2ServiceFactory extends AbstractIoServiceFactory {
         try {
             group = AsynchronousChannelGroup.withThreadPool(ThreadUtils.protectExecutorServiceShutdown(getExecutorService(), isShutdownExecutor()));
         } catch(IOException e) {
-            logger.warn("Failed (" + e.getClass().getSimpleName() + " to start async. channel group: " + e.getMessage(), e);
+            log.warn("Failed (" + e.getClass().getSimpleName() + " to start async. channel group: " + e.getMessage(), e);
             throw new RuntimeSshException(e);
         }
     }
 
+    @Override
     public IoConnector createConnector(IoHandler handler) {
         return new Nio2Connector(getFactoryManager(), handler, group);
     }
 
+    @Override
     public IoAcceptor createAcceptor(IoHandler handler) {
         return new Nio2Acceptor(getFactoryManager(), handler, group);
     }
@@ -61,20 +63,20 @@ public class Nio2ServiceFactory extends AbstractIoServiceFactory {
     protected void doCloseImmediately() {
         try {
             if (!group.isShutdown()) {
-                logger.debug("Shutdown group");
+                log.debug("Shutdown group");
                 group.shutdownNow();
             
                 // if we protect the executor then the await will fail since we didn't really shut it down...
                 if (isShutdownExecutor()) {
                     if (group.awaitTermination(5, TimeUnit.SECONDS)) {
-                        logger.debug("Group successfully shut down");
+                        log.debug("Group successfully shut down");
                     } else {
-                        logger.debug("Not all group tasks terminated");
+                        log.debug("Not all group tasks terminated");
                     }
                 }
             }
         } catch (Exception e) {
-            logger.debug("Exception caught while closing channel group", e);
+            log.debug("Exception caught while closing channel group", e);
         } finally {
             super.doCloseImmediately();
         }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/common/kex/dh/AbstractDHKeyExchange.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/kex/dh/AbstractDHKeyExchange.java b/sshd-core/src/main/java/org/apache/sshd/common/kex/dh/AbstractDHKeyExchange.java
index 17d3a00..0629e8c 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/kex/dh/AbstractDHKeyExchange.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/kex/dh/AbstractDHKeyExchange.java
@@ -22,15 +22,12 @@ package org.apache.sshd.common.kex.dh;
 import org.apache.sshd.common.Digest;
 import org.apache.sshd.common.KeyExchange;
 import org.apache.sshd.common.session.AbstractSession;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.sshd.common.util.AbstractLoggingBean;
 
 /**
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
-public abstract class AbstractDHKeyExchange implements KeyExchange {
-
-    protected final Logger log = LoggerFactory.getLogger(getClass());
+public abstract class AbstractDHKeyExchange extends AbstractLoggingBean implements KeyExchange {
     protected byte[] V_S;
     protected byte[] V_C;
     protected byte[] I_S;

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/common/keyprovider/AbstractKeyPairProvider.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/keyprovider/AbstractKeyPairProvider.java b/sshd-core/src/main/java/org/apache/sshd/common/keyprovider/AbstractKeyPairProvider.java
index c85cd63..c51811f 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/keyprovider/AbstractKeyPairProvider.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/keyprovider/AbstractKeyPairProvider.java
@@ -23,20 +23,17 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.sshd.common.KeyPairProvider;
+import org.apache.sshd.common.util.AbstractLoggingBean;
 import org.apache.sshd.common.util.GenericUtils;
 import org.apache.sshd.common.util.KeyUtils;
 import org.apache.sshd.common.util.ValidateUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * TODO Add javadoc
  *
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
-public abstract class AbstractKeyPairProvider implements KeyPairProvider {
-    protected final Logger log = LoggerFactory.getLogger(getClass());
-
+public abstract class AbstractKeyPairProvider extends AbstractLoggingBean implements KeyPairProvider {
     protected AbstractKeyPairProvider() {
         super();
     }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/common/keyprovider/ResourceKeyPairProvider.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/keyprovider/ResourceKeyPairProvider.java b/sshd-core/src/main/java/org/apache/sshd/common/keyprovider/ResourceKeyPairProvider.java
index 1582702..134416e 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/keyprovider/ResourceKeyPairProvider.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/keyprovider/ResourceKeyPairProvider.java
@@ -34,8 +34,6 @@ import org.bouncycastle.openssl.PEMParser;
 import org.bouncycastle.openssl.PasswordFinder;
 import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
 import org.bouncycastle.openssl.jcajce.JcePEMDecryptorProviderBuilder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * <p>This host key provider loads private keys from the specified resources.</p>
@@ -46,13 +44,6 @@ import org.slf4j.LoggerFactory;
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
 public class ResourceKeyPairProvider extends AbstractKeyPairProvider {
-    // --- Shared ---
-
-    /**
-     * Logger
-     */
-    protected final Logger log = LoggerFactory.getLogger(getClass());
-
     // --- Properties ---
 
     /**

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/common/scp/ScpHelper.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/scp/ScpHelper.java b/sshd-core/src/main/java/org/apache/sshd/common/scp/ScpHelper.java
index f2b69db..d1ee197 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/scp/ScpHelper.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/scp/ScpHelper.java
@@ -42,19 +42,15 @@ import java.util.concurrent.TimeUnit;
 
 import org.apache.sshd.common.SshException;
 import org.apache.sshd.common.scp.ScpTransferEventListener.FileOperation;
+import org.apache.sshd.common.util.AbstractLoggingBean;
 import org.apache.sshd.common.util.DirectoryScanner;
 import org.apache.sshd.common.util.GenericUtils;
 import org.apache.sshd.common.util.IoUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
-public class ScpHelper {
-
-    protected static final Logger log = LoggerFactory.getLogger(ScpHelper.class);
-
+public class ScpHelper extends AbstractLoggingBean {
     public static final int OK = 0;
     public static final int WARNING = 1;
     public static final int ERROR = 2;
@@ -649,7 +645,7 @@ public class ScpHelper {
             }
         }
 
-        return String.format("%04o", pf);
+        return String.format("%04o", Integer.valueOf(pf));
     }
 
     public static Set<PosixFilePermission> setOctalPerms(Path path, String str) throws IOException {

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/common/session/SessionTimeoutListener.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/session/SessionTimeoutListener.java b/sshd-core/src/main/java/org/apache/sshd/common/session/SessionTimeoutListener.java
index 74091ff..60d2d69 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/session/SessionTimeoutListener.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/session/SessionTimeoutListener.java
@@ -18,45 +18,46 @@
  */
 package org.apache.sshd.common.session;
 
-import org.apache.sshd.common.Session;
-import org.apache.sshd.common.SessionListener;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import java.util.Set;
 import java.util.concurrent.CopyOnWriteArraySet;
 
+import org.apache.sshd.common.Session;
+import org.apache.sshd.common.SessionListener;
+import org.apache.sshd.common.util.AbstractLoggingBean;
+
 /**
  * Task that iterates over all currently open {@link AbstractSession}s and checks each of them for timeouts. If
  * the {@link AbstractSession} has timed out (either auth or idle timeout), the session will be disconnected.
  *
  * @see org.apache.sshd.common.session.AbstractSession#checkForTimeouts()
  */
-public class SessionTimeoutListener implements SessionListener, Runnable {
-
-    private final Logger log = LoggerFactory.getLogger(SessionTimeoutListener.class);
-    
+public class SessionTimeoutListener extends AbstractLoggingBean implements SessionListener, Runnable {
     private final Set<AbstractSession> sessions = new CopyOnWriteArraySet<AbstractSession>();
 
+    @Override
     public void sessionCreated(Session session) {
         if (session instanceof AbstractSession && (session.getAuthTimeout() > 0 || session.getIdleTimeout() > 0)) {
             sessions.add((AbstractSession) session);
         }
     }
 
+    @Override
     public void sessionEvent(Session session, Event event) {
+        // ignored
     }
 
+    @Override
     public void sessionClosed(Session s) {
         sessions.remove(s);
     }
 
+    @Override
     public void run() {
         for (AbstractSession session : sessions) {
             try {
                 session.checkForTimeouts();
-            } catch (Exception e) {
-                log.warn("An error occurred while checking session timeouts", e);
+            } catch(Exception e) {
+                log.warn("An error occurred while checking session=" + session + " timeouts", e);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/common/util/AbstractLoggingBean.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/util/AbstractLoggingBean.java b/sshd-core/src/main/java/org/apache/sshd/common/util/AbstractLoggingBean.java
new file mode 100644
index 0000000..39131c8
--- /dev/null
+++ b/sshd-core/src/main/java/org/apache/sshd/common/util/AbstractLoggingBean.java
@@ -0,0 +1,49 @@
+/*
+ * 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.sshd.common.util;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Serves as a common base class for the vast majority of classes that require
+ * some kind of logging. Facilitates quick and easy replacement of the actual used
+ * logger from one framework to another
+ * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
+ */
+public abstract class AbstractLoggingBean {
+    protected final Logger log;
+    
+    /**
+     * Default constructor - creates a logger using the full class name
+     */
+    protected AbstractLoggingBean() {
+        log = LoggerFactory.getLogger(getClass());
+    }
+    
+    /**
+     * Create a logger for instances of the same class for which we might
+     * want to have a &quot;discriminator&quot; for them
+     * @param discriminator The discriminator value
+     */
+    protected AbstractLoggingBean(String discriminator) {
+        log = LoggerFactory.getLogger(getClass().getName() + "[" + discriminator + "]");
+    }
+}

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/common/util/CloseableUtils.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/util/CloseableUtils.java b/sshd-core/src/main/java/org/apache/sshd/common/util/CloseableUtils.java
index 01e02c3..7d4df66 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/util/CloseableUtils.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/util/CloseableUtils.java
@@ -36,8 +36,6 @@ import org.apache.sshd.common.future.DefaultCloseFuture;
 import org.apache.sshd.common.future.DefaultSshFuture;
 import org.apache.sshd.common.future.SshFuture;
 import org.apache.sshd.common.future.SshFutureListener;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Utility class to help with {@link Closeable}s.
@@ -150,14 +148,15 @@ public class CloseableUtils {
 
     }
 
-    public static abstract class IoBaseCloseable implements Closeable {
-        /** Our logger */
-        protected final Logger log = LoggerFactory.getLogger(getClass());
-        
+    public static abstract class IoBaseCloseable extends AbstractLoggingBean implements Closeable {
         protected IoBaseCloseable() {
             super();
         }
         
+        protected IoBaseCloseable(String discriminator) {
+            super(discriminator);
+        }
+
         // TODO once JDK 8+ becomes the minimum for this project, make it a default method instead of this class
         @Override
         public void close() throws IOException {
@@ -309,6 +308,14 @@ public class CloseableUtils {
         /** A future that will be set 'closed' when the object is actually closed */
         protected final CloseFuture closeFuture = new DefaultCloseFuture(lock);
 
+        protected AbstractCloseable() {
+            super();
+        }
+
+        protected AbstractCloseable(String discriminator) {
+            super(discriminator);
+        }
+
         @Override
         public CloseFuture close(boolean immediately) {
             if (immediately) {
@@ -394,6 +401,14 @@ public class CloseableUtils {
 
         protected abstract Closeable getInnerCloseable();
 
+        protected AbstractInnerCloseable() {
+            super();
+        }
+
+        protected AbstractInnerCloseable(String discriminator) {
+            super(discriminator);
+        }
+
         @Override
         protected CloseFuture doCloseGracefully() {
             return getInnerCloseable().close(false);

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/common/util/SecurityUtils.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/util/SecurityUtils.java b/sshd-core/src/main/java/org/apache/sshd/common/util/SecurityUtils.java
index 2b52c5a..30bd0ac 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/util/SecurityUtils.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/util/SecurityUtils.java
@@ -24,6 +24,7 @@ import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.security.NoSuchProviderException;
 import java.security.Signature;
+import java.util.concurrent.Callable;
 
 import javax.crypto.Cipher;
 import javax.crypto.KeyAgreement;
@@ -54,12 +55,12 @@ public class SecurityUtils {
         if (hasEcc == null) {
             try {
                 getKeyPairGenerator("EC");
-                hasEcc = true;
+                hasEcc = Boolean.TRUE;
             } catch (Throwable t) {
-                hasEcc = false;
+                hasEcc = Boolean.TRUE;
             }
         }
-        return hasEcc;
+        return hasEcc.booleanValue();
     }
 
     public static synchronized void setSecurityProvider(String securityProvider) {
@@ -68,7 +69,7 @@ public class SecurityUtils {
     }
 
     public static synchronized void setRegisterBouncyCastle(boolean registerBouncyCastle) {
-        SecurityUtils.registerBouncyCastle = registerBouncyCastle;
+        SecurityUtils.registerBouncyCastle = Boolean.valueOf(registerBouncyCastle);
         registrationDone = false;
     }
 
@@ -86,14 +87,14 @@ public class SecurityUtils {
         if (!registrationDone) {
             if (registerBouncyCastle == null) {
                 String prop = System.getProperty("org.apache.sshd.registerBouncyCastle");
-                if (prop != null) {
-                    registerBouncyCastle = Boolean.parseBoolean(prop);
+                if (!GenericUtils.isEmpty(prop)) {
+                    registerBouncyCastle = Boolean.valueOf(prop);
                 }
             }
-            if (securityProvider == null && (registerBouncyCastle == null || registerBouncyCastle)) {
+            if (securityProvider == null && (registerBouncyCastle == null || registerBouncyCastle.booleanValue())) {
                 // Use an inner class to avoid a strong dependency from SshServer on BouncyCastle
                 try {
-                    new BouncyCastleRegistration().run();
+                    new BouncyCastleRegistration().call();
                 } catch (Throwable t) {
                     if (registerBouncyCastle == null) {
                         LOG.info("BouncyCastle not registered, using the default JCE provider");
@@ -107,8 +108,9 @@ public class SecurityUtils {
         }
     }
 
-    private static class BouncyCastleRegistration {
-        public void run() throws Exception {
+    private static class BouncyCastleRegistration implements Callable<Void> {
+        @Override
+        public Void call() throws Exception {
             if (java.security.Security.getProvider(BOUNCY_CASTLE) == null) {
                 LOG.info("Trying to register BouncyCastle as a JCE provider");
                 java.security.Security.addProvider(new BouncyCastleProvider());
@@ -119,6 +121,7 @@ public class SecurityUtils {
                 LOG.info("BouncyCastle already registered as a JCE provider");
             }
             securityProvider = BOUNCY_CASTLE;
+            return null;
         }
     }
 

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/server/auth/AbstractUserAuth.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/auth/AbstractUserAuth.java b/sshd-core/src/main/java/org/apache/sshd/server/auth/AbstractUserAuth.java
index 7d70939..9293ff2 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/auth/AbstractUserAuth.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/auth/AbstractUserAuth.java
@@ -18,22 +18,19 @@
  */
 package org.apache.sshd.server.auth;
 
+import org.apache.sshd.common.util.AbstractLoggingBean;
 import org.apache.sshd.common.util.buffer.Buffer;
 import org.apache.sshd.server.UserAuth;
 import org.apache.sshd.server.session.ServerSession;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  */
-public abstract class AbstractUserAuth implements UserAuth {
-
-    protected final Logger log = LoggerFactory.getLogger(this.getClass());
-
+public abstract class AbstractUserAuth extends AbstractLoggingBean implements UserAuth {
     protected ServerSession session;
     protected String service;
     protected String username;
 
+    @Override
     public String getUserName() {
         return username;
     }
@@ -42,6 +39,7 @@ public abstract class AbstractUserAuth implements UserAuth {
         return service;
     }
 
+    @Override
     public Boolean auth(ServerSession session, String username, String service, Buffer buffer) throws Exception {
         this.session = session;
         this.username = username;
@@ -49,11 +47,14 @@ public abstract class AbstractUserAuth implements UserAuth {
         return doAuth(buffer, true);
     }
 
+    @Override
     public Boolean next(Buffer buffer) throws Exception {
         return doAuth(buffer, false);
     }
 
+    @Override
     public void destroy() {
+        // ignored
     }
 
     protected abstract Boolean doAuth(Buffer buffer, boolean init) throws Exception;

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/server/channel/AbstractServerChannel.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/channel/AbstractServerChannel.java b/sshd-core/src/main/java/org/apache/sshd/server/channel/AbstractServerChannel.java
index 8f6bb24..43c9f74 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/channel/AbstractServerChannel.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/channel/AbstractServerChannel.java
@@ -35,6 +35,15 @@ public abstract class AbstractServerChannel extends AbstractChannel {
 
     protected boolean exitStatusSent;
 
+    protected AbstractServerChannel() {
+        super();
+    }
+
+    protected AbstractServerChannel(String discriminator) {
+        super(discriminator);
+    }
+
+    @Override
     public OpenFuture open(int recipient, int rwsize, int rmpsize, Buffer buffer) {
         this.recipient = recipient;
         this.remoteWindow.init(rwsize, rmpsize);
@@ -42,10 +51,12 @@ public abstract class AbstractServerChannel extends AbstractChannel {
         return doInit(buffer);
     }
 
+    @Override
     public void handleOpenSuccess(int recipient, int rwsize, int rmpsize, Buffer buffer) throws IOException {
         throw new IllegalStateException();
     }
 
+    @Override
     public void handleOpenFailure(Buffer buffer) {
         throw new IllegalStateException();
     }
@@ -59,7 +70,9 @@ public abstract class AbstractServerChannel extends AbstractChannel {
     protected void sendExitStatus(int v) throws IOException {
         if (!exitStatusSent) {
             exitStatusSent = true;
-            log.debug("Send SSH_MSG_CHANNEL_REQUEST exit-status on channel {}", id);
+            if (log.isDebugEnabled()) {
+                log.debug("Send SSH_MSG_CHANNEL_REQUEST exit-status on channel {}", Integer.valueOf(id));
+            }
             Buffer buffer = session.createBuffer(SshConstants.SSH_MSG_CHANNEL_REQUEST);
             buffer.putInt(recipient);
             buffer.putString("exit-status");

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/server/channel/PipeDataReceiver.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/channel/PipeDataReceiver.java b/sshd-core/src/main/java/org/apache/sshd/server/channel/PipeDataReceiver.java
index 9d21f9e..677ae72 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/channel/PipeDataReceiver.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/channel/PipeDataReceiver.java
@@ -25,9 +25,8 @@ import java.io.OutputStream;
 import org.apache.sshd.common.channel.ChannelPipedInputStream;
 import org.apache.sshd.common.channel.ChannelPipedOutputStream;
 import org.apache.sshd.common.channel.Window;
+import org.apache.sshd.common.util.AbstractLoggingBean;
 import org.apache.sshd.common.util.io.LoggingFilterOutputStream;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * {@link ChannelDataReceiver} that buffers the received data into byte buffer
@@ -35,7 +34,7 @@ import org.slf4j.LoggerFactory;
  *
  * @author Kohsuke Kawaguchi
  */
-public class PipeDataReceiver implements ChannelDataReceiver {
+public class PipeDataReceiver extends AbstractLoggingBean implements ChannelDataReceiver {
     private InputStream in;
     private OutputStream out;
 
@@ -52,14 +51,14 @@ public class PipeDataReceiver implements ChannelDataReceiver {
         return in;
     }
 
+    @Override
     public void close() throws IOException {
         out.close();
     }
 
+    @Override
     public int data(ChannelSession channel, byte[] buf, int start, int len) throws IOException {
         out.write(buf, start, len);
         return 0; // ChannelPipedOutputStream calls consume method on its own, so here we return 0 to make the ends meet.
     }
-
-    protected final Logger log = LoggerFactory.getLogger(getClass());
 }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/server/channel/PuttyRequestHandler.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/channel/PuttyRequestHandler.java b/sshd-core/src/main/java/org/apache/sshd/server/channel/PuttyRequestHandler.java
index 0c43929..6df5ea7 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/channel/PuttyRequestHandler.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/channel/PuttyRequestHandler.java
@@ -20,25 +20,26 @@ package org.apache.sshd.server.channel;
 
 import org.apache.sshd.common.Channel;
 import org.apache.sshd.common.RequestHandler;
+import org.apache.sshd.common.util.AbstractLoggingBean;
 import org.apache.sshd.common.util.buffer.Buffer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Handles Putty specific channel requests as indicated by
  * <A HREF="http://tartarus.org/~simon/putty-snapshots/htmldoc/AppendixF.html">Appendix F: SSH-2 names specified for PuTTY</A>
  */
-public class PuttyRequestHandler implements RequestHandler<Channel> {
-
+public class PuttyRequestHandler extends AbstractLoggingBean implements RequestHandler<Channel> {
     public static final String REQUEST_SUFFIX = "@putty.projects.tartarus.org";
 
-    protected final Logger log = LoggerFactory.getLogger(getClass());
+    public PuttyRequestHandler() {
+        super();
+    }
 
+    @Override
     public Result process(Channel channel, String request, boolean wantReply, Buffer buffer) throws Exception {
         // make sure proper suffix
         if ((request == null)
-                || (request.length() <= REQUEST_SUFFIX.length())
-                || (!request.endsWith(REQUEST_SUFFIX))) {
+         || (request.length() <= REQUEST_SUFFIX.length())
+         || (!request.endsWith(REQUEST_SUFFIX))) {
             return Result.Unsupported;
         }
 
@@ -64,5 +65,4 @@ public class PuttyRequestHandler implements RequestHandler<Channel> {
 
         return Result.ReplyFailure;
     }
-
 }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/server/command/ScpCommand.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/command/ScpCommand.java b/sshd-core/src/main/java/org/apache/sshd/server/command/ScpCommand.java
index f8d3635..593ed43 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/command/ScpCommand.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/command/ScpCommand.java
@@ -30,12 +30,11 @@ import java.util.concurrent.Future;
 import org.apache.sshd.common.file.FileSystemAware;
 import org.apache.sshd.common.scp.ScpHelper;
 import org.apache.sshd.common.scp.ScpTransferEventListener;
+import org.apache.sshd.common.util.AbstractLoggingBean;
 import org.apache.sshd.common.util.ThreadUtils;
 import org.apache.sshd.server.Command;
 import org.apache.sshd.server.Environment;
 import org.apache.sshd.server.ExitCallback;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * This commands provide SCP support on both server and client side.
@@ -44,10 +43,7 @@ import org.slf4j.LoggerFactory;
  *
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
-public class ScpCommand implements Command, Runnable, FileSystemAware {
-
-    protected static final Logger log = LoggerFactory.getLogger(ScpCommand.class);
-
+public class ScpCommand extends AbstractLoggingBean implements Command, Runnable, FileSystemAware {
     protected String name;
     protected boolean optR;
     protected boolean optT;
@@ -107,9 +103,11 @@ public class ScpCommand implements Command, Runnable, FileSystemAware {
         log.debug("Executing command {}", command);
         String[] args = command.split(" ");
         for (int i = 1; i < args.length; i++) {
-            if (args[i].charAt(0) == '-') {
-                for (int j = 1; j < args[i].length(); j++) {
-                    switch (args[i].charAt(j)) {
+            String  argVal=args[i];
+            if (argVal.charAt(0) == '-') {
+                for (int j = 1; j < argVal.length(); j++) {
+                    char    option=argVal.charAt(j);
+                    switch(option) {
                         case 'f':
                             optF = true;
                             break;
@@ -125,13 +123,14 @@ public class ScpCommand implements Command, Runnable, FileSystemAware {
                         case 'd':
                             optD = true;
                             break;
-//                          default:
+                          default:  // ignored
 //                            error = new IOException("Unsupported option: " + args[i].charAt(j));
 //                            return;
                     }
                 }
             } else {
-                path = command.substring(command.indexOf(args[i - 1]) + args[i - 1].length() + 1);
+                String  prevArg=args[i - 1];
+                path = command.substring(command.indexOf(prevArg) + prevArg.length() + 1);
                 if (path.startsWith("\"") && path.endsWith("\"") || path.startsWith("'") && path.endsWith("'")) {
                     path = path.substring(1, path.length() - 1);
                 }
@@ -143,26 +142,32 @@ public class ScpCommand implements Command, Runnable, FileSystemAware {
         }
     }
 
+    @Override
     public void setInputStream(InputStream in) {
         this.in = in;
     }
 
+    @Override
     public void setOutputStream(OutputStream out) {
         this.out = out;
     }
 
+    @Override
     public void setErrorStream(OutputStream err) {
         this.err = err;
     }
 
+    @Override
     public void setExitCallback(ExitCallback callback) {
         this.callback = callback;
     }
 
+    @Override
     public void setFileSystem(FileSystem fs) {
         this.fileSystem = fs;
     }
 
+    @Override
     public void start(Environment env) throws IOException {
         if (error != null) {
             throw error;
@@ -176,6 +181,7 @@ public class ScpCommand implements Command, Runnable, FileSystemAware {
         }
     }
 
+    @Override
     public void destroy() {
         // if thread has not completed, cancel it
         if ((pendingFuture != null) && (!pendingFuture.isDone())) {
@@ -206,6 +212,7 @@ public class ScpCommand implements Command, Runnable, FileSystemAware {
         }
     }
 
+    @Override
     public void run() {
         int exitValue = ScpHelper.OK;
         String exitMessage = null;

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/server/jaas/JaasPasswordAuthenticator.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/jaas/JaasPasswordAuthenticator.java b/sshd-core/src/main/java/org/apache/sshd/server/jaas/JaasPasswordAuthenticator.java
index 218ead7..aba2c5c 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/jaas/JaasPasswordAuthenticator.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/jaas/JaasPasswordAuthenticator.java
@@ -28,6 +28,7 @@ import javax.security.auth.callback.PasswordCallback;
 import javax.security.auth.callback.UnsupportedCallbackException;
 import javax.security.auth.login.LoginContext;
 
+import org.apache.sshd.common.util.AbstractLoggingBean;
 import org.apache.sshd.server.PasswordAuthenticator;
 import org.apache.sshd.server.session.ServerSession;
 import org.slf4j.Logger;
@@ -38,12 +39,18 @@ import org.slf4j.LoggerFactory;
  *
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
-public class JaasPasswordAuthenticator implements PasswordAuthenticator {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(JaasPasswordAuthenticator.class);
+public class JaasPasswordAuthenticator extends AbstractLoggingBean implements PasswordAuthenticator {
 
     private String domain;
 
+    public JaasPasswordAuthenticator() {
+        this(null);
+    }
+    
+    public JaasPasswordAuthenticator(String domain) {
+        this.domain = domain;
+    }
+
     public String getDomain() {
         return domain;
     }
@@ -52,6 +59,7 @@ public class JaasPasswordAuthenticator implements PasswordAuthenticator {
         this.domain = domain;
     }
 
+    @Override
     public boolean authenticate(final String username, final String password, final ServerSession session) {
     	return authenticate(username, password);
     }
@@ -60,6 +68,7 @@ public class JaasPasswordAuthenticator implements PasswordAuthenticator {
         try {
             Subject subject = new Subject();
             LoginContext loginContext = new LoginContext(domain, subject, new CallbackHandler() {
+                @Override
                 public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
                     for (int i = 0; i < callbacks.length; i++) {
                         if (callbacks[i] instanceof NameCallback) {
@@ -76,7 +85,7 @@ public class JaasPasswordAuthenticator implements PasswordAuthenticator {
             loginContext.logout();
             return true;
         } catch (Exception e) {
-            LOGGER.error("Authentication failed with error", e);
+            log.error("Authentication failed with error", e);
             return false;
         }
     }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java b/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java
index d2250b3..f4be035 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java
@@ -80,6 +80,7 @@ import java.util.concurrent.TimeUnit;
 
 import org.apache.sshd.common.FactoryManagerUtils;
 import org.apache.sshd.common.file.FileSystemAware;
+import org.apache.sshd.common.util.AbstractLoggingBean;
 import org.apache.sshd.common.util.GenericUtils;
 import org.apache.sshd.common.util.IoUtils;
 import org.apache.sshd.common.util.OsUtils;
@@ -92,17 +93,13 @@ import org.apache.sshd.server.Environment;
 import org.apache.sshd.server.ExitCallback;
 import org.apache.sshd.server.SessionAware;
 import org.apache.sshd.server.session.ServerSession;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * SFTP subsystem
  *
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
-public class SftpSubsystem implements Command, Runnable, SessionAware, FileSystemAware {
-
-    protected final Logger log = LoggerFactory.getLogger(getClass());
+public class SftpSubsystem extends AbstractLoggingBean implements Command, Runnable, SessionAware, FileSystemAware {
 
     /**
      * Properties key for the maximum of available open handles per session.

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/main/java/org/apache/sshd/server/shell/ProcessShellFactory.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/shell/ProcessShellFactory.java b/sshd-core/src/main/java/org/apache/sshd/server/shell/ProcessShellFactory.java
index 44f2137..0555186 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/shell/ProcessShellFactory.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/shell/ProcessShellFactory.java
@@ -27,11 +27,10 @@ import java.util.EnumSet;
 import java.util.Map;
 
 import org.apache.sshd.common.Factory;
+import org.apache.sshd.common.util.AbstractLoggingBean;
 import org.apache.sshd.common.util.buffer.Buffer;
 import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 import org.apache.sshd.server.Command;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * A {@link Factory} of {@link Command} that will create a new process and bridge
@@ -39,7 +38,7 @@ import org.slf4j.LoggerFactory;
  *
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
-public class ProcessShellFactory implements Factory<Command> {
+public class ProcessShellFactory extends AbstractLoggingBean implements Factory<Command> {
 
     public enum TtyOptions {
         Echo,
@@ -49,8 +48,6 @@ public class ProcessShellFactory implements Factory<Command> {
         OCrNl
     }
 
-    private static final Logger LOG = LoggerFactory.getLogger(ProcessShellFactory.class);
-
     private String[] command;
     private EnumSet<TtyOptions> ttyOptions;
 
@@ -86,6 +83,11 @@ public class ProcessShellFactory implements Factory<Command> {
         private TtyFilterInputStream out;
         private TtyFilterInputStream err;
 
+        public ProcessShell() {
+            super();
+        }
+
+        @SuppressWarnings("synthetic-access")
         @Override
         public void start(Map<String,String> env) throws IOException {
             String[] cmds = new String[command.length];
@@ -101,10 +103,10 @@ public class ProcessShellFactory implements Factory<Command> {
                 try {
                     builder.environment().putAll(env);
                 } catch (Exception e) {
-                    LOG.info("Could not set environment for command", e);
+                    log.info("Could not set environment for command", e);
                 }
             }
-            LOG.info("Starting shell with command: '{}' and env: {}", builder.command(), builder.environment());
+            log.info("Starting shell with command: '{}' and env: {}", builder.command(), builder.environment());
             process = builder.start();
             out = new TtyFilterInputStream(process.getInputStream());
             err = new TtyFilterInputStream(process.getErrorStream());
@@ -169,6 +171,7 @@ public class ProcessShellFactory implements Factory<Command> {
             public int available() throws IOException {
                 return super.available() + buffer.available();
             }
+            @SuppressWarnings("synthetic-access")
             @Override
             public synchronized int read() throws IOException {
                 int c;
@@ -210,6 +213,7 @@ public class ProcessShellFactory implements Factory<Command> {
                 super(out);
                 this.echo = echo;
             }
+            @SuppressWarnings("synthetic-access")
             @Override
             public void write(int c) throws IOException {
                 if (c == '\n' && ttyOptions.contains(TtyOptions.INlCr)) {

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/test/java/org/apache/sshd/deprecated/AbstractUserAuth.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/deprecated/AbstractUserAuth.java b/sshd-core/src/test/java/org/apache/sshd/deprecated/AbstractUserAuth.java
index 0666192..e7ab084 100644
--- a/sshd-core/src/test/java/org/apache/sshd/deprecated/AbstractUserAuth.java
+++ b/sshd-core/src/test/java/org/apache/sshd/deprecated/AbstractUserAuth.java
@@ -19,15 +19,11 @@
 package org.apache.sshd.deprecated;
 
 import org.apache.sshd.client.session.ClientSessionImpl;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.sshd.common.util.AbstractLoggingBean;
 
 /**
  */
-public abstract class AbstractUserAuth implements UserAuth {
-
-    protected final Logger log = LoggerFactory.getLogger(this.getClass());
-
+public abstract class AbstractUserAuth extends AbstractLoggingBean implements UserAuth {
     protected final ClientSessionImpl session;
     protected final String service;
 
@@ -39,5 +35,4 @@ public abstract class AbstractUserAuth implements UserAuth {
     public String getService() {
         return service;
     }
-
 }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/test/java/org/apache/sshd/deprecated/ClientUserAuthServiceOld.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/deprecated/ClientUserAuthServiceOld.java b/sshd-core/src/test/java/org/apache/sshd/deprecated/ClientUserAuthServiceOld.java
index a15a3ab..e752132 100644
--- a/sshd-core/src/test/java/org/apache/sshd/deprecated/ClientUserAuthServiceOld.java
+++ b/sshd-core/src/test/java/org/apache/sshd/deprecated/ClientUserAuthServiceOld.java
@@ -31,8 +31,6 @@ import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.SshException;
 import org.apache.sshd.common.util.CloseableUtils;
 import org.apache.sshd.common.util.buffer.Buffer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Client side <code>ssh-auth</code> service.
@@ -53,10 +51,6 @@ public class ClientUserAuthServiceOld extends CloseableUtils.AbstractCloseable i
             return new ClientUserAuthServiceOld(session);
         }
     }
-
-    /** Our logger */
-    protected final Logger log = LoggerFactory.getLogger(getClass());
-
     /**
      * When !authFuture.isDone() the current authentication
      */

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/test/java/org/apache/sshd/deprecated/UserAuthPassword.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/deprecated/UserAuthPassword.java b/sshd-core/src/test/java/org/apache/sshd/deprecated/UserAuthPassword.java
index 60ac764..3da08b0 100644
--- a/sshd-core/src/test/java/org/apache/sshd/deprecated/UserAuthPassword.java
+++ b/sshd-core/src/test/java/org/apache/sshd/deprecated/UserAuthPassword.java
@@ -23,8 +23,6 @@ import java.io.IOException;
 import org.apache.sshd.client.session.ClientSessionImpl;
 import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.util.buffer.Buffer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * TODO Add javadoc
@@ -32,9 +30,6 @@ import org.slf4j.LoggerFactory;
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
 public class UserAuthPassword extends AbstractUserAuth {
-
-    protected final Logger log = LoggerFactory.getLogger(getClass());
-
     private final String password;
 
     public UserAuthPassword(ClientSessionImpl session, String service, String password) {

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/test/java/org/apache/sshd/deprecated/UserAuthPublicKey.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/deprecated/UserAuthPublicKey.java b/sshd-core/src/test/java/org/apache/sshd/deprecated/UserAuthPublicKey.java
index 73f15bb..a8b7e21 100644
--- a/sshd-core/src/test/java/org/apache/sshd/deprecated/UserAuthPublicKey.java
+++ b/sshd-core/src/test/java/org/apache/sshd/deprecated/UserAuthPublicKey.java
@@ -28,8 +28,6 @@ import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.util.KeyUtils;
 import org.apache.sshd.common.util.buffer.Buffer;
 import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * TODO Add javadoc
@@ -37,9 +35,6 @@ import org.slf4j.LoggerFactory;
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
 public class UserAuthPublicKey extends AbstractUserAuth {
-
-    protected final Logger log = LoggerFactory.getLogger(getClass());
-
     private final KeyPair key;
 
     public UserAuthPublicKey(ClientSessionImpl session, String service, KeyPair key) {

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/60dac4dd/sshd-core/src/test/java/org/apache/sshd/util/JSchLogger.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/util/JSchLogger.java b/sshd-core/src/test/java/org/apache/sshd/util/JSchLogger.java
index a356dbc..a96f756 100644
--- a/sshd-core/src/test/java/org/apache/sshd/util/JSchLogger.java
+++ b/sshd-core/src/test/java/org/apache/sshd/util/JSchLogger.java
@@ -33,6 +33,10 @@ public class JSchLogger implements Logger {
 
     private final org.slf4j.Logger log = LoggerFactory.getLogger("org.jcraft.jsch.JSch");
 
+    public JSchLogger() {
+        super();
+    }
+
     @Override
     public boolean isEnabled(int level) {
         switch (level) {