• 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

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

     

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

  • 相关阅读:
    SQL 语句优化中间表的使用优化
    SQL 语句优化OR 语句优化案例
    浅谈系统优化设计复杂运算放在逻辑层还是在数据库层?
    linux命令综合
    MySQL常用命令
    PHP知识点积累
    [Git] 生成token解决github remote: Support for password authentication was removed on August 13, 2021.
    [uniapp] GOFLY在线客服系统 uniapp增加播放背景音效或者按钮音效
    [Golang]gorm更新数据update 解决值为0时被忽略
    光阴真的是贱(似箭),一不小心就又过一年了
  • 原文地址:https://www.cnblogs.com/fubinhnust/p/9957710.html
Copyright © 2020-2023  润新知