У меня есть эта конфигурация свойства log4j:
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=${logfilepath}
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
У меня также есть этот #{jobParameters['logfilepath']}, который содержит путь к файлу, в котором я хочу, чтобы log4j записал журнал моей партии.
Как передать это значение в файл log4j.properties?
Я хочу указать с помощью аргумента командной строки путь к файлу журнала, в который log4j должен писать.
Как я могу сделать?
Спасибо.




Мы можем сделать это, определив слушателя вакансий. Образец ниже. Обязательно удалите существующие приложения, если вы хотите использовать только новое приложение.
public class CommonLoggerListener implements JobExecutionListener{
@Value("#{jobParameters['LOG_FILE_NAME']}")
String fileName;
@Override
public void beforeJob(JobExecution jobExecution) {
Logger logger = LoggerFactory.getLogger("com.demo");
Class loggerIntrospected = logger.getClass();
Field fields[] = loggerIntrospected.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
String fieldName = fields[i].getName();
if (fieldName.equals("logger")) {
fields[i].setAccessible(true);
org.apache.log4j.Logger loggerImpl = (org.apache.log4j.Logger) fields[i].get(logger);
loggerImpl.addAppender(new RollingFileAppender(<layout>, fileName));
}
}
}
}