¿Cómo personalizar log4j2 RollingFileAppender?

Utilizamos log4j 1.2.x para iniciar sesión en nuestro producto y estamos buscando migrar a log4j 2.x en un futuro próximo. Una de las funciones que hemos implementado es registrar la información del sistema y otros parámetros de importación y hormiga en cada nuevo archivo de registro que se genera. La forma en que implementamos en log4j 1.2.x es que hemos ampliadoRollingFileAppender clase de log4j y han anulado elrollOver() método, a continuación se muestra el fragmento de parte de la implementación

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

}

Ahora, como queremos migrar a log4j2, estamos buscando una nueva solución para lograr la misma funcionalidad. Pero como veo el código fuente de log4j2, es muy diferente del código fuente anterior. losRollingFileAppender la clase no contienerollover() método ya que se ha movido aRollingManagerhelper y se ha establecido enprivate también.

Desarrollar un nuevo paquete completo y extender / implementar algunas clases abstractas / auxiliares de log4j2 es una de las posibles soluciones para nosotros, pero eso requeriría mucha codificación / copia ya que no modificamos quéRollingFileAppender más bien solo necesitamos una pequeña extensión. ¿Hay una solución simple para ello?

ACTUALIZAR

Creé una búsqueda personalizada de acuerdo con la sugerencia en las respuestas y a continuación es cómo la creé;

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

}}

Pero esto no funcionó como se mencionó; esto siempre imprimethis was first call en el encabezado También intenté poner breakoint en el primeroif condición y lo que noté fue que solo se llama una vez. Entonces, lo que temo es que la clase customLookup solo se inicializa en el inicio cuando log4j2 está inicializando sus propiedades desde la configuración xml. No sé cómo podría implementar esta clase de búsqueda personalizada.

ACTUALIZACIÓN 2

Después de la implementación anterior, lo probé de una manera un poco diferente, que es la siguiente;

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

Pero esto también hace lo mismo. log4j2 crea los encabezados en mientras se inicializa desde su archivo de configuración xml y luego usa los encabezados de la memoria. losreturn valor de anuladolookup() El método no se puede cambiar dinámicamente ya que solo se llama durante la inicialización. Cualquier otra ayuda sería muy apreciada.

Respuestas a la pregunta(2)

Su respuesta a la pregunta