【问题标题】:How to maintain Multiple log4j.xml configuration file如何维护多个 log4j.xml 配置文件
【发布时间】:2016-08-27 03:40:21
【问题描述】:

如何在一个web应用中维护多个log4j.xml配置文件。

例如:- 在 Servlet 中:-

 public void init(ServletConfig arg0) throws ServletException {
       PropertyConfigurator.configure("/home/madhavib/Desktop/Nar/Raju/log4j.properties");
 }

在 Jsp 中:-

 public void jspInit() {

      DOMConfigurator.configure("/home/madhavib/Desktop/Nar/log4j.xml"); 
}

在另一个 Jsp 中:-

public void jspInit() {

     DOMConfigurator.configure("/home/madhavib/Desktop/Nar/log4j.xml"); 
}




**log4j configuration files (loaded in jsp 1):** 

<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

 <appender name="FileAppender"
  class="org.apache.log4j.FileAppender" >
  <!-- <param name="threshold" value="debug" /> -->
  <param name="File" value="/home/madhavib/apache-tomcat-7.0.42/logs/EntelProject/infojsp333.log" />
  <param name="DatePattern" value="'.'yyyy-MM-dd" />
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern"
    value="%d %-5p [%t] %c{5}- %m%n" />
  </layout>
   <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMin" value="debug" />
            <param name="LevelMax" value="warn" />
            <param name="AcceptOnMatch" value="true" />
        </filter>
  <!-- <MarkerFilter marker="FLOW" onMatch="ACCEPT" onMismatch="DENY"/> -->
 </appender>




<appender name="console" class="org.apache.log4j.ConsoleAppender">
     <layout class="org.apache.log4j.PatternLayout">
  <param name="ConversionPattern" 
    value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
     </layout>
</appender>



 <logger name="org.apache.jsp">
    <appender-ref ref="console"/>
  <appender-ref ref="FileAppender"/>
</logger> 
 <!--<root>

  <appender-ref ref="FileAppender"/>
</root> -->
  <logger name="pe1.com1.nextel1">
   <level value="info"/>
<appender-ref ref="FileAppender"/>


</logger> 

</log4j:configuration>

**log4j confuguration (loaded in jsp 2) :-**

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

<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

 <appender name="FileAppender"
  class="org.apache.log4j.FileAppender" >
  <!-- <param name="threshold" value="debug" /> -->
  <param name="File" value="/home/madhavib/apache-tomcat-7.0.42/logs/EntelProject/examplejsp.log" />
  <param name="DatePattern" value="'.'yyyy-MM-dd" />
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern"
    value="%d %-5p [%t] %c{5}- %m%n" />
  </layout>
   <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMin" value="debug" />
            <param name="LevelMax" value="warn" />
            <param name="AcceptOnMatch" value="true" />
        </filter>
  <!-- <MarkerFilter marker="FLOW" onMatch="ACCEPT" onMismatch="DENY"/> -->
 </appender>




<appender name="console" class="org.apache.log4j.ConsoleAppender">
     <layout class="org.apache.log4j.PatternLayout">
  <param name="ConversionPattern" 
    value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
     </layout>
</appender>



 <logger name="org.apache.jsp">
    <appender-ref ref="console"/>
  <appender-ref ref="FileAppender"/>
</logger> 

  <logger name="pe.com.nextel">
   <level value="info"/>
<appender-ref ref="FileAppender"/>


</logger> 

</log4j:configuration>

**log4jconfiguration file(loaded in servlet) :-**


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

<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

 <appender name="FileAppender"
  class="org.apache.log4j.FileAppender" >
  <!-- <param name="threshold" value="debug" /> -->
  <param name="File" value="/home/madhavib/apache-tomcat-7.0.42/logs/EntelProject/examplejsp.log" />
  <param name="DatePattern" value="'.'yyyy-MM-dd" />
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern"
    value="%d %-5p [%t] %c{5}- %m%n" />
  </layout>
   <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMin" value="debug" />
            <param name="LevelMax" value="warn" />
            <param name="AcceptOnMatch" value="true" />
        </filter>
  <!-- <MarkerFilter marker="FLOW" onMatch="ACCEPT" onMismatch="DENY"/> -->
 </appender>




<appender name="console" class="org.apache.log4j.ConsoleAppender">
     <layout class="org.apache.log4j.PatternLayout">
  <param name="ConversionPattern" 
    value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
     </layout>
</appender>



 <logger name="org.apache.jsp">
    <appender-ref ref="console"/>
  <appender-ref ref="FileAppender"/>
</logger> 

  <logger name="pe.com.nextel">
   <level value="info"/>
<appender-ref ref="FileAppender"/>


</logger> 

</log4j:configuration>

如何在一个web应用中维护多个log4j.xml配置文件。

我已经给出了log4j配置信息文件,请查看并告诉我如何正确开发多个log4j文件。

【问题讨论】:

  • 你能解释一下,为什么你觉得有必要这样做吗?
  • 是的,显然你可以做到,它只是加载 log4j.xml 文件,它不应该改变其他日志记录的行为。但问题是你为什么要这么做?
  • 我想单独维护 jsp 的 log4j 以及 java,但是当我加载 servlet init 方法时它可以工作,但是在加载 jsp init 方法后 log4j.xml 被当前 log4j.xml 覆盖。但问题是当我们去servlet时,servlet中加载的log4j文件不起作用
  • 为什么您需要为 JSP 和 servlet 提供不同的日志记录配置?
  • 在我的应用程序中,我使用 web 服务以及 jsp 页面,当请求来自 web 服务时,只应生成与 java 相关的日志,当请求来自 jsp 页面和相关的 java 文件记录器时,应该生成

标签: java xml log4j


【解决方案1】:

您可以通过某些方式传递多个 log4j 配置文件:

  1. 您可以设置系统属性:

    System.setProperty("log4j2.configurationFile", "log4j2-1.xml,log4j2-2.xml");

  2. 您可以将配置文件作为“log4j2.component.properties”放在资源部分下,并定义系统属性如下:

    log4j2.configurationFile=log4j2-1.xml,log4j2-2.xml

系统属性请查看official documentation

【讨论】:

    猜你喜欢
    • 2015-12-05
    • 2012-12-22
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多