[英]log4j configuration files and inheritance?
使用多個配置文件時,我很難理解log4j的配置。
我解釋一下我的情況:
因此,我有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>
使用此配置,我不希望在應用程序中看到例如INFO
或DEBUG
級別,因為對於記錄器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.