Log4j 中的附加程序

開放

附加程序列表

記錄器允許您一次將數據保存到多個文件中。這樣的輸出數據流被稱為appender(來自append)。有很多標準的 appender,所以我們只介紹最流行的:

附加程序 描述
1個 安慰 將數據打印到控制台
2個 文件 將數據輸出到文件
3個 每日滾動文件 輸出數據到文件,文件被循環覆蓋
4個 異步 允許您將數據異步寫入另一個附加程序
5個 插座 將數據寫入特定套接字
6個 JDBC 使用 JDBC 協議將消息寫入數據庫
7 JPA 使用 JPA 協議將消息寫入數據庫
8個 網址 通過 HTTP 協議將事件發送到遠程服務器
9 郵件傳輸協議 將消息存儲在緩衝區中,然後將它們作為電子郵件發送

所有附加程序的良好文檔都在他們的官方網站上

下面我們將考慮其中最受歡迎和最簡單的。

ConsoleAppender

最簡單的附加程序是ConsoleApender. 正如您可能已經猜到的那樣,他只是將消息寫入控制台。它有幾個對我們來說很有趣的參數:

屬性
1個 姓名 附加程序名稱
2個 篩選 允許您過濾一些消息
3個 佈局 指定輸出時消息的格式
4個 目標 指定寫入位置:SYTEM_OUTSYSTEM_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 將工作
留言
  • 受歡迎
你必須登入才能留言
此頁面尚無留言