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檔案。你可以用你最喜歡的日誌框架通過選擇
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檔案的類路徑(例如slf4j-log4j12。jar和slf4j-jdk14.jar);它可能導致應用程式異常行為。
- slf4j-api.jar的版本和slf4j -.jar應該是相同的。
一旦正確配置後,您可以繼續配置實際的日誌框架你選擇(如修改log4j . properties)。
1.1.1.1.2. 過載Jakarta普通日誌
SLF4J還提供了一種方式可以將現有的應用程式,使用Jakarta Commons Logging SLF4J不改變應用程式程式碼。只是刪除commons-loggong
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 |
在日誌系統生成錯誤訊息 |
根據這些資訊,您應該能夠得到一個基本系統啟動和執行,並能夠擴充套件這個簡單的例子為您的系統產生日誌資訊。