首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Log4j 進階設定:依模組輸出至不同日誌檔案與每日滾動

     編輯:Java 相關知識

需求背景

在企業級應用中,常需將不同業務模組(如註冊、登入、支付)的日誌分離存放,並依日期自動產生新檔案,方便追蹤與維運。本文示範如何透過 log4j.properties 達成「模組隔離」與「每日滾動」兩大目標。

Maven 相依設定

<dependencies>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.6</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.6</version>
    </dependency>
</dependencies>

核心設定檔 log4j.properties

# 根 Logger,輸出至 Console
log4j.rootCategory=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%p:%d{yyyyMMdd HH:mm:ss} %c: %m%n

# 共用日誌目錄
logdir=/var/logs/myapp

# ---------- 註冊模組 ----------
log4j.logger.register=INFO, register
log4j.appender.register=org.apache.log4j.DailyRollingFileAppender
log4j.appender.register.File=${logdir}/register.log
log4j.appender.register.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.register.layout=org.apache.log4j.PatternLayout
log4j.appender.register.layout.ConversionPattern=%d %p [%c %L %l] - %m%n
# additivity=false 表示不向父 Logger (root) 傳遞,避免重複輸出
log4j.additivity.register=false

# ---------- 登入模組 ----------
log4j.logger.login=INFO, login
log4j.appender.login=org.apache.log4j.DailyRollingFileAppender
log4j.appender.login.File=${logdir}/login.log
log4j.appender.login.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.login.layout=org.apache.log4j.PatternLayout
log4j.appender.login.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.additivity.login=false

# ---------- 第三方套件噪音控制 ----------
log4j.logger.org.springframework=ERROR
log4j.logger.com.mchange=ERROR
log4j.logger.org.apache.http=ERROR

關鍵屬性解析

屬性說明
log4j.logger.<模組名>定義該模組的 Logger 名稱與等級,後接自訂 Appender 名稱(如 register)。
log4j.appender.<名稱>.DatePattern控制滾動頻率。'_'yyyy-MM-dd'.log' 表示每天午夜產生 register_2024-05-20.log。
log4j.additivity.<模組名>設為 false 可阻斷日誌向根 Logger 傳遞,實現完全隔離。

Java 端使用範例

import org.apache.log4j.Logger;

public class BizLogger {
    private static final Logger REGISTER_LOG = Logger.getLogger("register");
    private static final Logger LOGIN_LOG = Logger.getLogger("login");

    public static void logRegister(String msg) {
        REGISTER_LOG.info(msg);
    }

    public static void logLogin(String msg) {
        LOGIN_LOG.info(msg);
    }
}

執行效果

  • Console 僅顯示根 Logger 設定的輸出(若有)。
  • /var/logs/myapp/register_2024-05-20.log 僅含註冊業務日誌。
  • /var/logs/myapp/login_2024-05-20.log 僅含登入業務日誌。
  • 隔天自動產生新檔,舊檔保留,無需人工介入。

結語

善用 DailyRollingFileAppender 搭配 additivity=false,即可輕鬆打造模組化、自動分檔的日誌系統,大幅提升問題排查效率。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved