簡體   English   中英

log4j的配置文件和繼承?

[英]log4j configuration files and inheritance?

使用多個配置文件時,我很難理解log4j的配置。

我解釋一下我的情況:

  • 我有一個帶有模塊(Web,ejb,jpa)的簡單Java EE應用程序
  • 我還有自定義服務器身份驗證模塊(SAM)來處理Glassfish的安全性,我沒有在我的應用程序中直接使用領域。

因此,我有2個xml配置文件,因為我的SAM(JAR文件)存儲在GF_HOME\\glassfish\\lib而我的EAR文件存儲在GF_HOME\\glassfish\\domains\\domain1 JAR和EAR都包含log4j.xml文件。

我的log4j庫位於GF_HOME\\glassfish\\domains\\domain1\\lib目錄中。

我想使用2 log4j.xml文件處理配置。

因此,在我的SAM的log4j.xml文件中,我有以下內容:

<?xml version="1.0" encoding="UTF-8" ?>

<appender name="FILE" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="${catalina.home}/logs/sim.log" />
    <param name="Threshold" value="DEBUG" />
    <param name="Append" value="true" />
    <param name="MaxFileSize" value="1MB" />
    <param name="MaxBackupIndex" value="1" />

    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d %-5p %X{service} %X{user} [%c] %m%n" />
    </layout>
</appender>

<root>
    <priority value="DEBUG" />
    <appender-ref ref="FILE" />
</root>

在我的應用程序的log4j.xml中:

<?xml version="1.0" encoding="UTF-8" ?>

 <appender name="FILE" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="${catalina.home}/logs/sim.log"/>
    <param name="Threshold" value="DEBUG"/>
    <param name="Append" value="true"/>
    <param name="MaxFileSize" value="1MB"/>
    <param name="MaxBackupIndex" value="1"/>

    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d %-5p %X{service} %X{user} [%c] %m%n"/>
    </layout>             
</appender>

<logger name="com.sim" additivity="true">
    <level value="FATAL" />     
</logger>

<root>
    <priority value="DEBUG" />
    <appender-ref ref="FILE" />
</root>

使用此配置,我不希望在應用程序中看到例如INFODEBUG級別,因為對於記錄器com.sim級別為FATAL但是我收到所有日志,因為它似乎應用了SAM log4j.xml的配置。 確實,當我刪除此文件時,我收到了應用程序日志,級別為FATAL

似乎glassfish“混合”或“合並”了所有找到的log4j.xml文件。 我不太了解這個原理。

我只想用1個log4j.xml管理我的SAM,並用另一個獨立的 log4j.xml管理我的應用程序。

我怎樣才能做到這一點?

回答我的帖子:

請記住,我的EAR的lib目錄中的JAR內有EAR文件和log4j.xml文件。

要應用新的log4j配置,我創建了在啟動時啟動的新servlet,並使用了DOMConfigurator.configure() (請注意,如果使用屬性文件,則必須使用PropertyConfigurator.configure()而不是DOMConfigurator.configure() )。

這是我的servlet:

public class Log4jInit implements Servlet {

@Override
public void destroy() {}

@Override
public ServletConfig getServletConfig() {return null;}

@Override
public String getServletInfo() {return null;}

@Override
public void init(ServletConfig arg0) throws ServletException {

    try{        
        DOMConfigurator.configure(getClass().getClassLoader().getResource("log4j.xml"));            
    }catch(Exception e){
        System.out.println("Log4jInit Exception : " + e);
    }

}

@Override
public void service(ServletRequest arg0, ServletResponse arg1)  throws ServletException, IOException {}

}

另外,不要忘記修改您的web.xml文件:

<servlet>
    <servlet-name>Log4j Servlet</servlet-name>
    <servlet-class>your.package.Log4jInit</servlet-class>
    <load-on-startup> 1 </load-on-startup>
</servlet>

就這樣。

如果要添加/覆蓋以前的log4j配置,請保留此代碼。

如果要重置以前的配置,請添加LogManager.resetConfiguration(); LogManager.resetConfiguration(...);之前LogManager.resetConfiguration(...);

暫無
暫無

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

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