2013-08-22 2 views
2

У меня есть файл log4j.properties, где я должен определить ~ 12 разных приложений. Фактически, все эти приставки аналогичны, за исключением имени и атрибута File. у меня есть что-то вроде этого:Как объединить свойства appenders в файле log4j.properties?

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.X и log4j.appender.fileX.File

Есть ли способ, чтобы определить значения по умолчанию для других атрибутов (MaxFileSize, MaxBackupIndex, layout и т.д. .) добавок, что-то вроде «наследования» 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 во время запуска (из-за ошибки: https://bugs.launchpad.net/play/+bug/511955) и я не хочу создавать JAR-библиотеку только для этого. Спасибо, в любом случае :) – romaintaz

Смежные вопросы