Como personalizar o log4j2 RollingFileAppender?

Usamos o log4j 1.2.x para efetuar logon em nosso produto e pretendemos migrar para o log4j 2.x em um futuro próximo. Uma das funcionalidades que implementamos é registrar as informações do sistema e outros parâmetros de importação e ant em cada novo arquivo de log de rollover que é gerado. A maneira como implementamos no log4j 1.2.x é que estendemosRollingFileAppender classe de log4j e substituíram orollOver() método, abaixo está o trecho da parte da implementação

@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.
    //

}

Agora, como queremos migrar para o log4j2, estamos procurando uma nova solução para obter a mesma funcionalidade. Mas, como vejo o código fonte do log4j2, é muito diferente do código fonte mais antigo. oRollingFileAppender classe não contémrollover() método como foi movido paraRollingManagerhelper e foi definido comoprivate também.

Desenvolver um novo pacote completo e estender / implementar algumas classes abstract / helper do log4j2 é uma das soluções possíveis para nós, mas isso exigiria muita codificação / cópia, pois não modificamos o queRollingFileAppender ao contrário, precisamos apenas de uma pequena extensão. Existe uma solução simples para isso?

ATUALIZAR

Eu criei uma pesquisa personalizada de acordo com a sugestão nas respostas e abaixo é como eu a criei;

@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";

}}

Mas isso não funcionou como mencionado; isso sempre imprimethis was first call no cabeçalho. Eu também tentei colocar breakoint no primeiroif condição e o que notei foi que ele só é chamado uma vez. Então, o que eu temo é que a classe customLookup seja inicializada apenas na inicialização quando o log4j2 estiver inicializando suas propriedades a partir da configuração xml. Não sei de que outra forma eu poderia implementar essa classe de pesquisa personalizada.

ATUALIZAÇÃO 2

Após a implementação acima, tentei de maneira um pouco diferente, como abaixo;

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

Mas isso faz a mesma coisa também. O log4j2 cria os cabeçalhos durante a inicialização do arquivo de configuração xml e, em seguida, usa os cabeçalhos da memória. oreturn valor de substituídolookup() O método não pode ser alterado dinamicamente, pois é chamado apenas durante a inicialização. Mais alguma ajuda seria muito apreciada.

questionAnswers(2)

yourAnswerToTheQuestion