1. 程式人生 > >Mina Logging Filter日誌過濾器知識介紹

Mina Logging Filter日誌過濾器知識介紹

1.1.1. 背景

Apache MINA使用一個允許基於MINA應用程式的開發人員使用他們自己的日誌系統。

1.1.1.1. SLF4J

Mina使用簡單的Java日誌Facade(SLF4J)。你可以在這裡找到SLF4J資訊。這個日誌記錄工具允許任意數量的日誌系統的實現。你可以使用log4j,java.util.logging或其他日誌系統。好的部分是,如果你想改變java.util.logging記錄log4j後來在開發過程中你不需要改變你的源代碼。

1.1.1.1.1. 選擇正確的JARS

SLF4J使用靜態繫結。這意味著有一個為每個支援的日誌框架JAR檔案。你可以用你最喜歡的日誌框架通過選擇

JAR檔案呼叫靜態日誌框架你選擇。下面是所需的JAR檔案的表使用一個特定的日誌框架。

Logging framework

Required JARs

Log4J 1.2.x

slf4j-api.jar, slf4j-log4j12.jar**

Log4J 1.3.x

slf4j-api.jar, slf4j-log4j13.jar

java.util.logging

slf4j-api.jar, slf4j-jdk14.jar**

Commons Logging

slf4j-api.jar, slf4j-jcl.jar

這裡有幾件事要記住:

  • slf4j-api
    .jar通常被使用在任何實現jar
  • 重要的是:你不應該把多個實現的JAR檔案的類路徑(例如slf4j-log4j12jarslf4j-jdk14.jar);它可能導致應用程式異常行為。  
  • slf4j-api.jar的版本slf4j -.jar應該是相同的。

一旦正確配置後,您可以繼續配置實際的日誌框架你選擇(如修改log4j . properties)

1.1.1.1.2. 過載Jakarta普通日誌

SLF4J還提供了一種方式可以將現有的應用程式,使用Jakarta Commons Logging SLF4J不改變應用程式程式碼。只是刪除commons-loggong JAR檔案的類路徑

,並新增jcl104-over-slf4j.jar的類路徑。

1.1.1.2. Log4j例子

對於這個示例,我們將使用log4j日誌記錄系統。我們建立了一個專案,並將以下程式碼片段為一個名為log4j . properties的檔案:

<span style="font-size:12px;"># 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.PatternLayoutlog4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c{1} %x - %m%n</span>

這個檔案將被放置在我們的專案的src目錄。如果您正在使用一個IDE當你測試你的程式碼時,您基本上希望配置檔案在JVM的類路徑中。

雖然這向您展示瞭如何建立一個IoAcceptor使用日誌,瞭解SLF4J API可以使用在你的程式以生成適當的日誌資訊以適合您的需要。

接下來我們將設定一個簡單的示例伺服器為了生成一些日誌。這裡我們有了EchoServer示例專案和日誌記錄新增到類:

<span style="font-size:12px;">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);}</span>

正如你所看到的我們移除addLogger方法和新增兩行新增到EchoServer示例。LoggingFilter的引用,您可以設定日誌級別/事件型別與IoAcceptor相關聯的處理程式。為了指定IoHandler觸發的事件日誌和日誌執行級別,有一個方法LoggingFilter呼叫setLogLevel(IoEventType LogLevel)。下面是這個方法的選項:

IoEventType

Description

SESSION_CREATED

當建立了一個新的會話時被呼叫

SESSION_OPENED

一個新的會話已被開啟被呼叫

SESSION_CLOSED

當一個會話已經關閉被呼叫

MESSAGE_RECEIVED

資料已經收到被呼叫

MESSAGE_SENT

當一個訊息被髮送被呼叫

SESSION_IDLE

當一個會話空閒時被呼叫

EXCEPTION_CAUGHT

當異常被丟擲被呼叫

這裡是日誌級別的描述:

LogLevel

Description

NONE

這將導致沒有日誌事件無論建立配置

TRACE

建立一個跟蹤事件的日誌系統

DEBUG

生成日誌記錄系統的除錯訊息

INFO

生成日誌系統的資訊訊息

WARN

生成日誌系統的警告訊息

ERROR

在日誌系統生成錯誤訊息

根據這些資訊,您應該能夠得到一個基本系統啟動和執行,並能夠擴充套件這個簡單的例子為您的系統產生日誌資訊。