`

log4j.xmlde两种配置方式

阅读更多
log4j 有两种配置方法,大家熟知的是properties文件但是最近的项目实施中,每次去用户那里装系统,都要苦恼于log文件放在不同位置,要改property文件就要重打jar包,麻烦的紧。而如果采用 xml配置的方法,直接放在WEB-INFO下,要修改路径,很方便。查了些资料,终于把系统的log4j改成在xml中配置啦。
记一下记一下……嘿嘿
log4i.xml 文件

    <?xml version="1.0" encoding="GB2312" ?>  
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">  
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">  
     <appender name="FILE"  
      class="org.apache.log4j.RollingFileAppender">  
      <!-- 设置通道file和输出方式:org.apache.log4j.RollingFileAppender -->  
      <param name="File" value="D:/zhaotj/all.output.log" /><!-- 设置File参数:日志输出文件名 -->  
      <param name="Append" value="true" /><!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->  
      <param name="MaxBackupIndex" value="10" />  
      <layout class="org.apache.log4j.PatternLayout">  
       <param name="ConversionPattern" value="%p (%c:%L)- %m%n" /><!-- 设置输出文件项目和格式 -->  
      </layout>  
     </appender>  
      
     <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">  
                    <!-- 设置监视器输出方式 -->  
      <layout class="org.apache.log4j.PatternLayout">  
       <param name="ConversionPattern"  
        value="%-4r [%t] %-5p %c %x - %m%n" />  
      </layout>  
                    <!--滤镜设置输出的级别-->  
      <filter class="org.apache.log4j.varia.LevelRangeFilter">  
       <param name="levelMin" value="info" />  
       <param name="levelMax" value="info" />  
       <param name="AcceptOnMatch" value="true" />  
      </filter>  
     </appender>  
      
     <root><!-- 设置接收所有输出的通道 -->  
      <priority value="info" />  
      <appender-ref ref="FILE" /><!-- 与前面的通道id相对应 -->  
      <appender-ref ref="STDOUT" />  
     </root>  
      
    </log4j:configuration>  
      

建好xml文件后 要写一个servlet类继承actionservlet,当工程初始化时自动加载xml配置文件

    package com.asiainfo;   
    import javax.servlet.ServletException;   
    import org.apache.commons.logging.Log;   
    import org.apache.commons.logging.LogFactory;   
    import org.apache.log4j.xml.DOMConfigurator;   
    import org.apache.struts.action.ActionServlet;   
      
    public class ExtendedActionServlet extends ActionServlet {   
            private Log log = LogFactory.getLog(this.getClass().getName());   
      
            public ExtendedActionServlet() {}   
      
            public void init() throws ServletException {   
                log.info(   
                        "Initializing, My MyActionServlet init this System's Const Variable");   
                String prefix = this.getServletConfig().getServletContext().getRealPath(   
                        "/");//读取项目的路径   
                String file = this.getServletConfig().getInitParameter("log4j");   
                           //读取log4j相对路径   
                String filePath = prefix + file;    
                DOMConfigurator.configure(filePath);//加载.xml文件          
                log.info("Initializing, end My Init");   
                super.init();//应用了struts,此方法不能省,ActionServlet覆盖了的此方法中有很多重要操作   
            }   
    }   
      

我们可以看到 在此类中 用了相对路径来加载xml的方法,首先通过prefix 读取了项目的路径 然后再通过读取web.xml中的log4j变量,获得log4j.xml的相对路径 两者结合 就是他的绝对路径拉
最后在web.xml中配置action信息 就可以实现加载啦
web.xml 

        <servlet>  
     <servlet-name>action</servlet-name>  
     <servlet-class>  
      com.asiainfo.ExtendedActionServlet   
     </servlet-class>  
     <init-param>  
      <param-name>config</param-name>  
      <param-value>/WEB-INF/struts-config.xml</param-value>  
     </init-param>  
      
     <!-- tsExtend  -->  
     <init-param>  
      <param-name>config/tsextend</param-name><!--设备检测子模块-->  
      <param-value>  
       /WEB-INF/tsextend/struts-config.xml   
      </param-value>  
     </init-param>  
                   <init-param>  
      <param-name>log4j</param-name><!--log4j.xml的路径-->  
      <param-value>  
       /WEB-INF/log4j.xml   
      </param-value>  
     </init-param>  
     <init-param>  
      <param-name>info</param-name>  
      <param-value>3</param-value>  
     </init-param>  
     <init-param>  
      <param-name>detail</param-name>  
      <param-value>3</param-value>  
     </init-param>  
     <load-on-startup>0</load-on-startup><!--设置当工程初始时便执行-->  
    </servlet>  
      
    <servlet-mapping>  
     <servlet-name>action</servlet-name>  
     <url-pattern>*.do</url-pattern>  
    </servlet-mapping>

================================================================================
log4j.properties
# This is the configuring for logging displayed in the Application Server
log4j.rootCategory=INFO, stdout,logfile

#stdout configure
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= %d %p [%c] - <%m>%n

#logfile configure
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.File=/role.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern= %d %p [%c] - <%m>%n

# Control logging for other open source packages
# Changing the log level to DEBUG when debug
log4j.logger.org.springframework=WARN
# Changing the log level to DEBUG will display SQL Hibernate generated
log4j.logger.org.hibernate=WARN
log4j.logger.org.hibernate.SQL=ERROR
log4j.logger.org.hibernate.cache=ERROR
log4j.logger.net.sf.ehcache=ERROR

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics