禁用 Logback 中特定類的日誌記錄

banq發表於2024-05-19

日誌記錄是任何應用程式的關鍵組成部分,可提供對其行為和執行狀況的洞察。但是,過多的日誌記錄可能會使輸出混亂並掩蓋有用的資訊,尤其是當詳細日誌來自特定類時。

在本教程中,我們將探討如何禁用 Logback 中特定類的日誌記錄。

為什麼要禁用日誌記錄?
禁用特定類的日誌記錄在多種情況下可能會有好處:

  • 減少日誌量:減少日誌量可以幫助我們專注於相關資訊,降低儲存/處理成本。
  • 安全性:有些類可能會無意中記錄敏感資訊;讓他們沉默可以減輕這種風險。
  • 效能:過多的日誌記錄會影響效能;禁用詳細記錄器有助於保持最佳應用程式效能。

瞭解Logback配置
首先,Logback配置透過 XML 檔案進行管理,通常名為logback.xml。該檔案定義了記錄器、附加器及其格式,允許開發人員控制記錄的內容和位置。

一種典型的配置包括一個或多個附加程式和一個根記錄器。 Appender 定義輸出目的地,例如控制檯或檔案。

這是一個簡單的例子:

<configuration>
    <appender name=<font>"console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg %n</pattern>
        </encoder>
    </appender>
    <root level=
"INFO">
        <appender-ref ref=
"console"/>
    </root>
</configuration>

此配置將INFO級別(及更高階別)日誌定向到控制檯,格式為日期、執行緒名稱、日誌級別和日誌訊息。

禁用特定類的日誌記錄
要禁用 Logback 中特定類的日誌記錄,我們可以為該類定義一個記錄器,並將級別設定為OFF。這將使來自類的所有日誌記錄呼叫靜音。

1.我們的詳細類
讓我們建立示例VerboseClass來說明本教程:

public class VerboseClass {
    private static final Logger logger = LoggerFactory.getLogger(VerboseClass.class);
    public void process() {
        logger.info(<font>"Processing data in VerboseClass...");
    }
    public static void main(String[] args) {
        VerboseClass instance = new VerboseClass();
        instance.process();
        logger.info(
"Main method completed in VerboseClass");
    }
}

然後我們可以執行它來檢視日誌輸出:

17:49:53.901 [main] INFO  c.b.l.disableclass.VerboseClass - Processing data in VerboseClass... 
17:49:53.902 [main] INFO  c.b.l.disableclass.VerboseClass - Main method completed in VerboseClass 

2.禁用VerboseClass的日誌記錄
要禁用其日誌,請在logback.xml中新增記錄器條目:

<logger name=<font>"com.baeldung.logback.disableclass.VerboseClass" level="OFF"/>

新增此記錄器後,logback.xml的外觀如下:

<configuration>
    <appender name=<font>"console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg %n</pattern>
        </encoder>
    </appender>
    <logger name=
"com.baeldung.logback.disableclass.VerboseClass" level="OFF"/>
    <root level=
"INFO">
        <appender-ref ref=
"console"/>
    </root>
</configuration>

透過此配置,VerboseClass將不再輸出日誌,而其他類將繼續在INFO級別或以上級別記錄日誌。

最後我們可以再次執行這個類,可以看到沒有日誌顯示了。

相關文章