Как настроить log4j2 RollingFileAppender?

Мы используем log4j 1.2.x для входа в наш продукт и планируем перейти на log4j 2.x в ближайшем будущем. Одна из реализованных нами функциональных возможностей заключается в том, чтобы регистрировать системную информацию и другие важные параметры в каждом новом генерируемом лог-файле пролонгации. В log4j 1.2.x мы реализовали то, что мы расширилиRollingFileAppender класс log4j и переопределилrollOver() ниже приведен фрагмент кода реализации

@Override
public void rollOver() {

    super.rollOver(); //We are not modifying it's default functionality but as soon as rollOver happens we apply our logic 

    // 
    // Logic to log required system properties and important parameters.
    //

}

Теперь, когда мы хотим перейти на log4j2, мы ищем новое решение для достижения той же функциональности. Но, как я вижу исходный код для log4j2, он сильно отличается от старого исходного кода.RollingFileAppender класс не содержитrollover() метод, как он был перемещен вRollingManagerhelper и было установленоprivate также.

Разработка полного нового пакета и расширение / реализация некоторых абстрактных / вспомогательных классов из log4j2 является одним из возможных решений для нас, но это потребует большого количества кодирования / копирования, поскольку мы не изменяем то, чтоRollingFileAppender скорее нам нужно только небольшое расширение к нему. Есть ли простое решение для этого?

ОБНОВИТЬ

Я создал пользовательский поиск в соответствии с предложением в ответах и ​​ниже, как я его создал;

@Plugin(name = "property", category = StrLookup.CATEGORY)
public class CustomLookup extends AbstractLookup {

private static AtomicLong aLong = new AtomicLong(0);

@Override
public String lookup(LogEvent event, String key) {

    if (aLong.getAndIncrement() == 0) {
        return "this was first call";
    }
    if (key.equalsIgnoreCase("customKey")) {
        return getCustomHeader();
    } else {
        return "non existing key";
    }
}

private static String getCustomHeader() {

    // Implementation of custom header
    return "custom header string";

}}

Но это не сработало, как упоминалось; это всегда печатаетthis was first call в шапке. Я также попытался поставить перерыв на первомif и что я заметил, так это то, что он вызывается только один раз. Так что я боюсь, что класс customLookup инициализируется только при запуске, когда log4j2 инициализирует свои свойства из конфигурации xml. Я не знаю, как еще я мог реализовать этот пользовательский класс поиска.

ОБНОВЛЕНИЕ 2

После вышеупомянутой реализации я попробовал это немного по-другому, как показано ниже;

private static AtomicLong aLong = new AtomicLong(0);

@Override
public String lookup(LogEvent event, String key) {
    return getCustomHeader(key);
}

private static String getCustomHeader(final String key) {

    if (aLong.getAndIncrement() == 0) {
        return "this was first call";
    }
    if (key.equalsIgnoreCase("customKey")) {
        // Implementation for customKey
        return "This is custom header";
    } else {
        return "non existing key";
    }
}

Но это делает то же самое, что и хорошо. log4j2 создает заголовки при инициализации из своего конфигурационного файла xml, а затем использует заголовки из памяти.return значение переопределеноlookup() метод не может быть изменен динамически, так как он вызывается только во время инициализации. Любая дополнительная помощь будет высоко ценится.

Ответы на вопрос(2)

Ваш ответ на вопрос