2012-03-11 7 views
61

Tôi không thể tìm ra cách cấu hình log4j để debugLog và báo cáo của tôiLog tách biệt với nhau (không phải phụ gia). Tại sao, trong cấu hình bên dưới, reportLog luôn trống?Làm cách nào để tạo 2 tệp nhật ký riêng biệt với một tệp cấu hình log4j?

log4j.rootLogger=TRACE, stdout, debugLog 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n 

log4j.appender.debugLog=org.apache.log4j.FileAppender 
log4j.appender.debugLog.File=logs/debug.log 
log4j.appender.debugLog.layout=org.apache.log4j.PatternLayout 
log4j.appender.debugLog.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n 

log4j.reportsLog=DEBUG,reportsLog 
log4j.appender.reportsLog=org.apache.log4j.FileAppender 
log4j.appender.reportsLog.File=logs/reports.log 
log4j.appender.reportsLog.layout=org.apache.log4j.PatternLayout 
log4j.appender.reportsLog.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n 

Và đây là mã Java của tôi:

package test; 

import org.apache.log4j.Logger; 
import org.apache.log4j.PropertyConfigurator; 

public class HelloLogger { 

    static final Logger debugLog = Logger.getLogger("debugLog"); 
    static final Logger resultLog = Logger.getLogger("reportsLog"); 

    public static void main(String[] args) { 
     PropertyConfigurator.configure("log4j.properties"); 
     debugLog.debug("Hello debugLog message"); 
     resultLog.debug("Hello reportsLog message"); 
    } 
} 

Trả lời

123

Thử cấu hình sau:

log4j.rootLogger=TRACE, stdout 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n 

log4j.appender.debugLog=org.apache.log4j.FileAppender 
log4j.appender.debugLog.File=logs/debug.log 
log4j.appender.debugLog.layout=org.apache.log4j.PatternLayout 
log4j.appender.debugLog.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n 

log4j.appender.reportsLog=org.apache.log4j.FileAppender 
log4j.appender.reportsLog.File=logs/reports.log 
log4j.appender.reportsLog.layout=org.apache.log4j.PatternLayout 
log4j.appender.reportsLog.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n 

log4j.category.debugLogger=TRACE, debugLog 
log4j.additivity.debugLogger=false 

log4j.category.reportsLogger=DEBUG, reportsLog 
log4j.additivity.reportsLogger=false 

Sau đó cấu hình các logger trong mã Java cho phù hợp:

static final Logger debugLog = Logger.getLogger("debugLogger"); 
static final Logger resultLog = Logger.getLogger("reportsLogger"); 

Bạn có muốn đầu ra để đi đến stdout? Nếu không, thay đổi dòng đầu tiên của log4j.properties tới:

log4j.rootLogger=OFF 

và thoát khỏi các stdout dòng.

+0

Cảm ơn bạn! Tôi đã lùng sục Internet trong nhiều giờ và không thể tìm thấy một ví dụ như thế này. Cảm ơn! Tôi đã thử nó và nó hoạt động hoàn hảo. – djangofan

+0

công việc tốt! nhưng additivty là additiv [i] ty :) – Wei

4

Sửa log4j.properties tập tin của bạn cho phù hợp:

log4j.rootLogger=TRACE,stdout 
... 
log4j.logger.debugLog=TRACE,debugLog 
log4j.logger.reportsLog=DEBUG,reportsLog 

Thay đổi mức log cho mỗi logger tùy thuộc yêu cầu của bạn.