簡體   English   中英

如何從JNDI加載log4j2配置文件

[英]How to load log4j2 configuration file from JNDI

我正在將一些Web應用程序從Log4j 1.12遷移到Log4j2。 根據公司政策,我們的log4j.xml文件位置在應用程序服務器中配置為URL,應用程序必須使用JNDI來獲取它們。 我們實現了一個ServletContextListener ,它允許我們以這種方式初始化log4j基礎結構:

public void contextInitialized(ServletContextEvent servletContextEvent) {
    ...
    urlLogConfig = (URL) context.lookup("java:comp/env/"+logLocation);
    ...
    //urlLogConfig -> file:///somepath/log4j.xml
    DOMConfigurator.configureAndWatch(urlLogConfig.getPath());
}
public void contextDestroyed(ServletContextEvent servletContextEvent) {
    ServletContext servletContext = servletContextEvent.getServletContext();
    servletContext.log("Log4jConfigurationListener - Shutting down log4j");
    LogManager.shutdown();
}

但是,使用log4j2 API更改后,將無法再使用它。 Log4j2提供了lo4j2-web.jar模塊,該模塊使用Log4jServletContainerInitializer來初始化庫。 最終調用Log4jWebInitializerImpl.getConfigURI() ,該負責獲取配置文件的URI。

有什么方法可以自定義Log4jWebInitializerImpl的行為,以使其從JNDI名稱解析xml文件?

怎么樣:

...
import org.apache.logging.log4j.core.config.Configurator;
...

    private LoggerContext loggerContext;

    public void contextInitialized(ServletContextEvent servletContextEvent) {
       ...
       urlLogConfig = (URL) context.lookup("java:comp/env/"+logLocation);
       ...
       //urlLogConfig -> file:///somepath/log4j.xml
       ServletContext servletContext = servletContextEvent.getServletContext();
       String contextName = servletContext.getServletContextName();
       Classloader classloader = this.getClass().getClassloader();
       loggerContext = Configurator.initialize(contextName, classloader, urlLogConfig.toURI());
    }

    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        ServletContext servletContext = servletContextEvent.getServletContext();
        servletContext.log("Log4jConfigurationListener - Shutting down log4j");
        if (loggerContext != null) 
             Configurator.shutdown(loggerContext);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM