2013-08-22 62 views
2

我有一個log4j.properties文件,我必須定義~12個不同的appender。實際上,除了名稱和File屬性外,所有這些appender都是類似的。 我有類似的東西:如何在log4j.properties文件中共享appender屬性?

log4j.logger.FOO=DEBUG, fileFOO 
log4j.appender.fileFOO=org.apache.log4j.RollingFileAppender 
log4j.appender.fileFOO.File=/some/path/file-FOO.log 
log4j.appender.fileFOO.MaxFileSize=5MB 
log4j.appender.fileFOO.MaxBackupIndex=20 
log4j.appender.fileFOO.layout=org.apache.log4j.PatternLayout 
log4j.appender.fileFOO.layout.ConversionPattern=%d %-5p ~ %m%n 

log4j.logger.BAR=DEBUG, fileBAR 
log4j.appender.fileBAR=org.apache.log4j.RollingFileAppender 
log4j.appender.fileBAR.File=/some/path/file-BAR.log 
log4j.appender.fileBAR.MaxFileSize=5MB 
log4j.appender.fileBAR.MaxBackupIndex=20 
log4j.appender.fileBAR.layout=org.apache.log4j.PatternLayout 
log4j.appender.fileBAR.layout.ConversionPattern=%d %-5p ~ %m%n 

正如你可以看到,所有的線條都相同,除了log4j.logger.Xlog4j.appender.fileX.File

有沒有辦法定義默認值等屬性(MaxFileSizeMaxBackupIndexlayout等)的appender,有點像appender的「繼承」?

感謝

回答

1

試圖實現您的自定義默認Appender,然後用它代替RollingFileAppender

log4j.logger.FOO=DEBUG, fileFOO 
log4j.appender.fileFOO=me.project.MyRollingFileAppender 
log4j.appender.fileFOO.File=/some/path/file-FOO.log 

public class MyRollingFileAppender extends RollingFileAppender { 

    public MyRollingFileAppender() { 
    super(); 
    init(); 
    } 

    public MyRollingFileAppender(Layout layout, String filename) throws IOException { 
    super(layout, filename); 
    init(); 
    } 

    public MyRollingFileAppender(Layout layout, String filename, boolean append) 
     throws IOException { 
    super(layout, filename, append); 
    init(); 
    } 

    private void init() { 
    this.setMaxFileSize("5MB"); 
    this.setMaxBackupIndex(20); 
    this.setLayout(new PatternLayout("%d %-5p ~ %m%n")); 
    } 
} 
+1

謝謝您的回答,那將是我的首選解決方案。但是,我正在使用Play Framework v1,似乎我無法在啓動期間通過log4j加載自己的類(由於bug:https://bugs.launchpad.net/play/+bug/511955)我不想爲此創建JAR庫。不管怎麼說,還是要謝謝你 :) – romaintaz