附加程序列表
記錄器允許您一次將數據保存到多個文件中。這樣的輸出數據流被稱為appender(來自append)。有很多標準的 appender,所以我們只介紹最流行的:
附加程序 | 描述 | |
---|---|---|
1個 | 安慰 | 將數據打印到控制台 |
2個 | 文件 | 將數據輸出到文件 |
3個 | 每日滾動文件 | 輸出數據到文件,文件被循環覆蓋 |
4個 | 異步 | 允許您將數據異步寫入另一個附加程序 |
5個 | 插座 | 將數據寫入特定套接字 |
6個 | JDBC | 使用 JDBC 協議將消息寫入數據庫 |
7 | JPA | 使用 JPA 協議將消息寫入數據庫 |
8個 | 網址 | 通過 HTTP 協議將事件發送到遠程服務器 |
9 | 郵件傳輸協議 | 將消息存儲在緩衝區中,然後將它們作為電子郵件發送 |
所有附加程序的良好文檔都在他們的官方網站上
下面我們將考慮其中最受歡迎和最簡單的。
ConsoleAppender
最簡單的附加程序是ConsoleApender
. 正如您可能已經猜到的那樣,他只是將消息寫入控制台。它有幾個對我們來說很有趣的參數:
屬性 | ||
---|---|---|
1個 | 姓名 | 附加程序名稱 |
2個 | 篩選 | 允許您過濾一些消息 |
3個 | 佈局 | 指定輸出時消息的格式 |
4個 | 目標 | 指定寫入位置:SYTEM_OUT 或SYSTEM_ERR |
配置它非常容易:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%m%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
文件追加器
最有用的附加程序是FileAppender
. ConsoleAppender
與他將消息寫入文件不同。當您的應用程序在服務器上的某處運行時,這非常有用。它有很多參數,因為 它必須能夠在不同的操作系統上寫入文件。
但我們只會考慮其中最受歡迎的。
1個 | 姓名 | 指定附加程序的名稱 |
2個 | 篩選 | 允許您過濾一些消息 |
3個 | 佈局 | 指定輸出時消息的格式 |
4個 | 文件名 | 指定寫入消息的文件名 |
5個 | 附加 | 如果true ,則消息將添加到舊日誌中,如果false - 每次啟動應用程序時都會重新創建日誌文件。 |
6個 | 緩衝區大小 | 以字節為單位設置緩衝區大小 |
7 | 立即沖洗 | 如果true ,則每條消息實際上都立即寫入磁盤(沒有緩衝區)。日誌開始工作緩慢,但這可以避免您在程序崩潰時丟失數據。 |
您已經知道如何很好地處理文件,因此這些設置對您來說並不是什麼新鮮事。配置這樣的記錄器比控制台記錄器更容易:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<File name="MyFile" fileName="logs/app.log">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="MyFile"/>
</Root>
</Loggers>
</Configuration>
RollingFileAppender
最流行的附加程序是RollingFileAppender
. 與它不同的是FileAppender
,它允許您將日誌拆分成許多小文件。這對於大型日誌非常重要。此外,它還允許您設置在新文件開始寫入後如何處理舊文件的規則。
這個 appender 有近百種不同的設置。您可以在鏈接中找到更多關於它們的信息。
考慮這個 appender 最流行的屬性:
屬性 | ||
---|---|---|
1個 | 姓名 | 指定附加程序的名稱 |
2個 | 篩選 | 允許您過濾一些消息 |
3個 | 佈局 | 指定輸出時消息的格式 |
4個 | 文件名 | 指定寫入消息的文件名 |
5個 | 文件模式 | 指定不再寫入的存檔文件的命名模式 |
6個 | 政策 | 指定文件應該開始被覆蓋的條件 |
7 | 戰略 | 描述如何處理舊文件:存檔、保留多少天的歷史等。 |
這是一個很好的例子:
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="250 MB"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
該參數filePattern
指定舊日誌歸檔的模板。還有兩種,當觸發時,會寫入一個新的文件:
TimeBasedTriggeringPolicy
– 如果新的一天開始(當前日期更改),將工作SizeBasedTriggeringPolicy
- 如果文件大小達到 250MB 將工作
GO TO FULL VERSION