業務日誌按模塊分離:註冊日誌 → register.log、登陸日誌 → login.log,支持按天滾動(register-2024-01-15.log)。
<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>
# 根 Logger
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=/Users/zhengcanrui/WORK/test/logs
# register 模塊
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
log4j.additivity.register=true
# login 模塊
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 # 不向父 Logger 傳遞
log4j.additivity.<logger名>=false:禁止子 Logger 向父 Logger 傳遞,實現隔離DailyRollingFileAppender + DatePattern:按天自動滾動log4j.appender.<模塊名>.屬性private static final Logger register = Logger.getLogger("register");
private static final Logger login = Logger.getLogger("login");
public static void registerInfo() { register.info("[register] 用戶註冊"); }
public static void loginInfo() { login.info("[login] 用戶登陸"); }



控制台僅輸出 root 配置的內容,文件按模塊獨立記錄,滾動命名正確。