Пакет Spring устанавливает имя приложения файла log4j из # {jobParameters ['']}

У меня есть эта конфигурация свойства 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 должен писать.

Как я могу сделать?

Спасибо.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
491
1

Ответы 1

Мы можем сделать это, определив слушателя вакансий. Образец ниже. Обязательно удалите существующие приложения, если вы хотите использовать только новое приложение.

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));
                }
            }
    }
}

Другие вопросы по теме