Made the logging filters private classes that inherit from AbstractIoFilter
diff --git a/examples/src/main/java/org/apache/mina/examples/udpecho/NioUdpEchoServer.java b/examples/src/main/java/org/apache/mina/examples/udpecho/NioUdpEchoServer.java
index 145a800..384b643 100644
--- a/examples/src/main/java/org/apache/mina/examples/udpecho/NioUdpEchoServer.java
+++ b/examples/src/main/java/org/apache/mina/examples/udpecho/NioUdpEchoServer.java
@@ -23,9 +23,9 @@
 import java.net.SocketAddress;
 import java.nio.ByteBuffer;
 
+import org.apache.mina.api.AbstractIoFilter;
 import org.apache.mina.api.AbstractIoHandler;
 import org.apache.mina.api.IdleStatus;
-import org.apache.mina.api.IoFilter;
 import org.apache.mina.api.IoSession;
 import org.apache.mina.filter.logging.LoggingFilter;
 import org.apache.mina.filterchain.ReadFilterChainController;
@@ -40,54 +40,59 @@
  * 
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
-public class NioUdpEchoServer {
+public class NioUdpEchoServer extends NioUdpServer {
     static final Logger LOG = LoggerFactory.getLogger(NioUdpEchoServer.class);
 
+    /** The server logger filter */
+    public final class UdpEchoFilter extends AbstractIoFilter {
+        @Override
+        public void sessionOpened(final IoSession session) {
+            LOG.info("session {} opened", session);
+            super.sessionOpened(session);
+        }
+
+        @Override
+        public void sessionIdle(IoSession session, IdleStatus status) {
+            LOG.info("session {} idle", session);
+            super.sessionIdle(session, status);
+        }
+
+        @Override
+        public void sessionClosed(IoSession session) {
+            LOG.info("session {} closed", session);
+            super.sessionClosed(session);
+        }
+
+        @Override
+        public void messageWriting(IoSession session, WriteRequest message, WriteFilterChainController controller) {
+            // we just push the message in the chain
+            super.messageWriting(session, message, controller);
+        }
+
+        @Override
+        public void messageReceived(IoSession session, Object message, ReadFilterChainController controller) {
+            if (message instanceof ByteBuffer) {
+                LOG.info("echoing");
+                session.write(message);
+            }
+
+            super.messageReceived(session, message, controller);
+        }
+
+        @Override
+        public void messageSent(IoSession session, Object message) {
+            LOG.info("message {} sent", message);
+            super.messageSent(session, message);
+        }
+    }
+
     public static void main(final String[] args) {
         LOG.info("starting echo server");
 
-        final NioUdpServer server = new NioUdpServer();
+        final NioUdpServer server = new NioUdpEchoServer();
 
         // create the filter chain for this service
-        server.setFilters(new LoggingFilter("LoggingFilter1"), new IoFilter() {
-
-            @Override
-            public void sessionOpened(final IoSession session) {
-                LOG.info("session {} open", session);
-            }
-
-            @Override
-            public void sessionIdle(final IoSession session, final IdleStatus status) {
-                LOG.info("session {} idle", session);
-            }
-
-            @Override
-            public void sessionClosed(final IoSession session) {
-                LOG.info("session {} open", session);
-            }
-
-            @Override
-            public void messageWriting(final IoSession session, WriteRequest message,
-                    final WriteFilterChainController controller) {
-                // we just push the message in the chain
-                controller.callWriteNextFilter(message);
-            }
-
-            @Override
-            public void messageReceived(final IoSession session, final Object message,
-                    final ReadFilterChainController controller) {
-
-                if (message instanceof ByteBuffer) {
-                    LOG.info("echoing");
-                    session.write(message);
-                }
-            }
-
-            @Override
-            public void messageSent(final IoSession session, final Object message) {
-                LOG.info("message {} sent", message);
-            }
-        });
+        server.setFilters(new LoggingFilter("LoggingFilter1"), ((NioUdpEchoServer) server).new UdpEchoFilter());
 
         server.setIoHandler(new AbstractIoHandler() {
             @Override
diff --git a/monitoring/src/test/java/org/apache/mina/monitoring/NioTcpEchoServerWithMonitoring.java b/monitoring/src/test/java/org/apache/mina/monitoring/NioTcpEchoServerWithMonitoring.java
index 6b9c431..d987bcb 100644
--- a/monitoring/src/test/java/org/apache/mina/monitoring/NioTcpEchoServerWithMonitoring.java
+++ b/monitoring/src/test/java/org/apache/mina/monitoring/NioTcpEchoServerWithMonitoring.java
@@ -20,11 +20,13 @@
 
 package org.apache.mina.monitoring;
 
-import com.codahale.metrics.JmxReporter;
-import com.codahale.metrics.MetricRegistry;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.nio.ByteBuffer;
+
+import org.apache.mina.api.AbstractIoFilter;
 import org.apache.mina.api.AbstractIoHandler;
 import org.apache.mina.api.IdleStatus;
-import org.apache.mina.api.IoFilter;
 import org.apache.mina.api.IoSession;
 import org.apache.mina.filter.logging.LoggingFilter;
 import org.apache.mina.filterchain.ReadFilterChainController;
@@ -34,67 +36,72 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-import java.nio.ByteBuffer;
+import com.codahale.metrics.JmxReporter;
+import com.codahale.metrics.MetricRegistry;
 
 /**
  *
  */
-public class NioTcpEchoServerWithMonitoring {
-
+public class NioTcpEchoServerWithMonitoring extends NioTcpServer {
     static final Logger LOG = LoggerFactory.getLogger(NioTcpEchoServerWithMonitoring.class);
 
-    public static void main(final String[] args) {
+    /** The server logger filter */
+    public final class TcpEchoFilter extends AbstractIoFilter {
+        @Override
+        public void sessionOpened(final IoSession session) {
+            LOG.info("session {} opened", session);
+            super.sessionOpened(session);
+        }
+
+        @Override
+        public void sessionIdle(IoSession session, IdleStatus status) {
+            LOG.info("session {} idle", session);
+            super.sessionIdle(session, status);
+        }
+
+        @Override
+        public void sessionClosed(IoSession session) {
+            LOG.info("session {} closed", session);
+            super.sessionClosed(session);
+        }
+
+        @Override
+        public void messageWriting(IoSession session, WriteRequest message, WriteFilterChainController controller) {
+            // we just push the message in the chain
+            super.messageWriting(session, message, controller);
+        }
+
+        @Override
+        public void messageReceived(IoSession session, Object message, ReadFilterChainController controller) {
+
+            if (message instanceof ByteBuffer) {
+                LOG.info("echoing");
+                session.write(message);
+            }
+
+            super.messageReceived(session, message, controller);
+        }
+
+        @Override
+        public void messageSent(IoSession session, Object message) {
+            LOG.info("message {} sent", message);
+            super.messageSent(session, message);
+        }
+    }
+
+    public static void main(String[] args) {
         LOG.info("starting echo server");
 
-        final NioTcpServer server = new NioTcpServer();
-        final MetricRegistry metrics = new MetricRegistry();
-        final JmxReporter reporter = JmxReporter.forRegistry(metrics).build();
+        NioTcpServer server = new NioTcpServer();
+        MetricRegistry metrics = new MetricRegistry();
+        JmxReporter reporter = JmxReporter.forRegistry(metrics).build();
         reporter.start();
-        server.getSessionConfig().setIdleTimeInMillis(IdleStatus.READ_IDLE, 60*600*1000);
-        server.getSessionConfig().setIdleTimeInMillis(IdleStatus.WRITE_IDLE, 60*600*1000);
+        server.getSessionConfig().setIdleTimeInMillis(IdleStatus.READ_IDLE, 60 * 600 * 1000);
+        server.getSessionConfig().setIdleTimeInMillis(IdleStatus.WRITE_IDLE, 60 * 600 * 1000);
 
         // create the filter chain for this service
-        server.setFilters(new MonitoringFilter(metrics), new LoggingFilter("LoggingFilter1"), new IoFilter() {
-
-            @Override
-            public void sessionOpened(final IoSession session) {
-                LOG.info("session {} open", session);
-            }
-
-            @Override
-            public void sessionIdle(final IoSession session, final IdleStatus status) {
-                LOG.info("session {} idle", session);
-            }
-
-            @Override
-            public void sessionClosed(final IoSession session) {
-                LOG.info("session {} open", session);
-            }
-
-            @Override
-            public void messageWriting(final IoSession session, WriteRequest message,
-                                       final WriteFilterChainController controller) {
-                // we just push the message in the chain
-                controller.callWriteNextFilter(message);
-            }
-
-            @Override
-            public void messageReceived(final IoSession session, final Object message,
-                                        final ReadFilterChainController controller) {
-
-                if (message instanceof ByteBuffer) {
-                    LOG.info("echoing");
-                    session.write(message);
-                }
-            }
-
-            @Override
-            public void messageSent(final IoSession session, final Object message) {
-                LOG.info("message {} sent", message);
-            }
-        });
+        server.setFilters(new MonitoringFilter(metrics), new LoggingFilter("LoggingFilter1"),
+                ((NioTcpEchoServerWithMonitoring) server).new TcpEchoFilter());
         server.setIoHandler(new AbstractIoHandler() {
             @Override
             public void sessionOpened(final IoSession session) {