O adaptador JUL não está funcionando para Jersey

Estou tentando usarAdaptador JUL delegar o Java Util Logging para Log4j2. Mais precisamente, qualquer biblioteca de terceiros que use JUL para gerar logs deve ser delegada ao Log4j2.

Como um exercício simples, criei um aplicativo independente que usa uma biblioteca (criei esta biblioteca para fins de teste, ela gera logs usando o JUL) para testar oAdaptador JUL. Quando altero o gerenciador de logs, conforme descritoaqui Eu posso ver os efeitos. E isso funciona bem.

O código dela é:

import org.apache.logging.log4j.LogManager;
import com.ah.loggen.LogGenerator;

public class TestLogging {

    static {
        System.setProperty("java.util.logging.manager", "org.apache.logging.log4j.jul.LogManager");
    }

    private static final org.apache.logging.log4j.Logger LOG4J = LogManager.getLogger();

    public static void main(String[] args) {
        System.out.println("Java Util Logging");
        LogGenerator.generateError("This is an error message.");
        LogGenerator.generateInfo("This is an info message.");
        LogGenerator.generateWarning("This is a warning message.");
        System.out.println("LOG4J");
        LOG4J.info("[LOG4J] This is an info message.");
        LOG4J.error("[LOG4J] This is an error message.");
        LOG4J.warn("[LOG4J] This is a warning message.");
    }
}

Dependências necessárias:

dependencies {
    compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.10.0'
    compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.10.0'
    compile group: 'org.apache.logging.log4j', name: 'log4j-jul', version: '2.10.0'

    compile files('lib/loggen.jar')

    testCompile 'junit:junit:4.12'
}

No entanto, não consigo fazer isso funcionar em um aplicativo da web java que usa Jersey. Jersey usa o JUL e estou tentando fazer uma ponte com o Log4j2.

Aqui está obuild.gradle Arquivo:

apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'eclipse-wtp'
apply from: 'https://raw.github.com/akhikhl/gretty/master/pluginScripts/gretty.plugin'

repositories {
    mavenCentral()
}

task wrapper(type: Wrapper) {
    gradleVersion = '4.4.1'
}

dependencies {
    compile "javax.ws.rs:javax.ws.rs-api:2.1"
    compile "org.glassfish.jersey.core:jersey-server:2.22.1"
    compile "org.glassfish.jersey.containers:jersey-container-servlet:2.22.1"
    compile "org.glassfish.jersey.media:jersey-media-json-jackson:2.22.1" 
    providedCompile "javax.servlet:javax.servlet-api:3.1.0" 

    compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.8'
    compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.8'
    compile group: 'org.apache.logging.log4j', name: 'log4j-web', version: '2.8'
    compile group: 'org.apache.logging.log4j', name: 'log4j-jul', version: '2.8'
}


gretty {
    servletContainer = 'tomcat8'
    httpPort = 8081
}

Eu tentei estas opções:

Alterar o gerenciador de log em uma classe que estendeApplication.

package com.ahoxha.test;

import java.util.HashSet;
import java.util.Set;
import javax.annotation.PostConstruct;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import com.ahoxha.filters.JerseyLoggingFilter;

@ApplicationPath("")
public class HelloApplication extends Application {
    @Override
    public final Set<Class<?>> getClasses() {
        final Set<Class<?>> classes = new HashSet<>();
        classes.add(Hello.class);
        classes.add(MessageResource.class);
        classes.add(JerseyLoggingFilter.class);
        return classes;
    }

    @PostConstruct
    public void init() {
        String cn = "org.apache.logging.log4j.jul.LogManager";
        System.setProperty("java.util.logging.manager", cn);
    }
}

Alterar o gerenciador de log em uma classe que implementaServletContextListener

package com.ahoxha.context;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class ContextInitializer implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("Initializing context.");
        System.setProperty("java.util.logging.manager", "org.apache.logging.log4j.jul.LogManager");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("Context destroyed.");
    }
}

Além das duas opções acima, também tentei definir o gerenciador de logs em umstatic block (para as duas opções 1. e 2.)

Infelizmente, nenhuma dessas opções funcionou para mim. Eu estou querendo saber onde isso deve ser feito. Há algo que estou perdendo?

questionAnswers(3)

yourAnswerToTheQuestion