Mina Core 12-日志过滤器

背景

Apache MINA使用一个系统,允许基于MINA的应用程序的开发人员使用他们自己的日志记录系统。

      SLF4J

MINA采用Simple Logging Facade for Java(SLF4J)。您可以在此处找到有关SLF4J的信息。此日志记录实用程序允许实现任意数量的日志记录系统。您可以使用log4j,java.util.logging或其他日志记录系统。关于这一点的好处是,如果您想在开发过程中稍后从java.util.logging更改为log4j,则根本不需要更改源代码。

选择正确的JAR包

SLF4J使用静态绑定。这意味着每个支持的日志记录框架都有一个JAR文件。您可以通过选择调用您静态选择的日志记录框架的JAR文件来使用您喜欢的日志记录框架。以下是使用特定日志记录框架所需的JAR文件表。

日志框架

需要的Jar

Log4J 1.2.x

slf4j-api.jarslf4j-log4j12.jar**

Log4J 1.3.x

slf4j-api.jarslf4j-log4j13.jar

java.util.logging

slf4j-api.jarslf4j-jdk14.jar**

Commons Logging

slf4j-api.jarslf4j-jcl.jar

 

有几点需要注意:

1.slf4j-api.jar通常用于任何实现JAR。

2.重要事项您不应在类路径中放置多个实现JAR文件(例如slf4j-log4j12.jar和slf4j-jdk14.jar);它可能会导致您的应用程序出现意外行为。

3.slf4j-api.jar和slf4j-.jar的版本应该相同。

正确配置后,您可以继续配置您选择的实际日志记录框架(例如,修改log4j.properties)。

 

覆盖Jakarta CommonsLogging

SLF4J还提供了一种方法,可以将使用Jakarta Commons Logging的现有应用程序转换为使用SLF4J,而无需更改应用程序代码。只需从类路径中删除commons-loggong JAR文件,然后将jcl104-over-slf4j.jar添加到类路径中。

log4j例子

对于此示例,我们将使用log4j日志记录系统。我们设置了一个项目,并将以下代码段放入名为log4j.properties的文件中:

# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1
 
# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender
 
# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c{1} %x - %m%n

该文件将放在我们项目的src目录中。如果您使用的是IDE,那么在测试代码时,您基本上希望配置文件位于JVM的类路径中。

虽然这向您展示了如何设置IoAcceptor以使用日志记录,但要了解SLF4J API可以在程序中的任何位置使用,以便生成适合您需要的正确日志记录信息。

接下来,我们将设置一个简单的示例服务器,以生成一些日志。在这里,我们采用了EchoServer示例项目,并在类中添加了日志记录:

public static void main(String[] args) throws Exception {
    IoAcceptor acceptor = new SocketAcceptor();
    DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
 
LoggingFilter loggingFilter = new LoggingFilter();
    chain.addLast("logging", loggingFilter);
 
    acceptor.setLocalAddress(new InetSocketAddress(PORT));
    acceptor.setHandler(new EchoProtocolHandler());
    acceptor.bind();
 
    System.out.println("Listening on port " + PORT);
}

如您所见,我们删除了addLogger方法,并在添加到示例EchoServer的2行中添加了。通过引用LoggingFilter,您可以在此处为与IoAcceptor关联的处理程序中的每个事件类型设置日志记录级别。为了指定触发日志记录的IoHandler事件以及执行日志记录的级别,LoggingFilter中有一个名为setLogLevel(IoEventType,LogLevel)的方法。以下是此方法的选项:

Io事件类型

描述

SESSION_CREATED

在创建新会话时调用

SESSION_OPENED

打开新会话时调用

SESSION_CLOSED

在会话关闭时调用

MESSAGE_RECEIVED

收到数据时调用

MESSAGE_SENT

在发送消息时调用

SESSION_IDLE

在达到会话空闲时间时调用

EXCEPTION_CAUGHT

抛出异常时调用

 

以下是LogLevels的描述:

日志级别

描述

NONE

这将导致无论配置如何都不会创建任何日志事件

TRACE

在日志记录系统中创建TRACE事件

DEBUG

在日志记录系统中生成调试消息

INFO

在日志记录系统中生成Info消息

WARN

在日志记录系统中生成警告消息

ERROR

在日志记录系统中生成错误消息

 

有了这些信息,您应该能够启动并运行基本系统,并能够扩展这个简单的示例,以便为您的系统生成日志信息。

posted @ 2018-11-14 14:14  天蓝隐湘  阅读(541)  评论(0编辑  收藏  举报