Я не уверен ни в каком методе, использующем файл свойств в базовом API Log4j, но вы, безусловно, можете попробовать это программно в некотором коде инициализации. Сначала создайте основные определения в XML, как у вас есть:
<appender name="baseModuleAppender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="/var/log/camel/${module}.log" />
<param name="DatePattern" value="'.'yyyy-MM-dd" />
<param name="Append" value="true" />
<param name="Threshold" value="DEBUG" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %p [%c] - %m%n" />
</layout>
</appender>
<logger name="com.package.module.base" additivity="false">
<level value="DEBUG" />
<appender-ref ref="baseModuleAppender" />
</logger>
Затем сделайте это в некотором Java-коде, который вызывается при запуске вашего приложения до того, как ваши модули нуждаются в регистрации:
String[] modules = new String[] {"module1", "module2", "module3"};
Logger baseLogger = Logger.getLogger("com.package.module.base");
DailyRollingFileAppender baseAppender = (DailyRollingFileAppender) baseLogger.getAppender("baseModuleAppender");
for (String module : modules) {
Logger logger = Logger.getLogger("com.package." + module);
logger.setLevel(baseLogger.getLevel());
logger.setAdditivity(baseLogger.getAdditivity());
String filename = baseAppender.getFile().replaceAll("\\$\\{module}", module);
DailyRollingFileAppender appender = new DailyRollingFileAppender(baseAppender.getLayout(), filename, baseAppender.getDatePattern());
appender.setAppend(baseAppender.getAppend());
appender.setThreshold(baseAppender.getThreshold());
logger.addAppender(appender);
}
Вы можете решить, как modules
получать значения, как вам нравится (с помощью отражения, файла свойств и т. Д.) Я не пробовал этот код, но думаю, что стоит попробовать.