java 日志输出 Log4j配置

非原创。只是对网上的资料做了补充。

通过以下配置可以配置将某级别范围的日志信息写入到指定文件中。
可以配置输出日志的级别优先级。

分为三部分:
1 日志输出文件log4j.xml的配置。
2 加载日志配置文件的servlet类。
2 web.xml配置

当然,还要加载必要的jar包。

1
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="infoChannel"
  class="org.apache.log4j.RollingFileAppender">
  <!-- 设置通道file和输出方式:org.apache.log4j.RollingFileAppender -->
  <param name="File" value="${catalina.home}/logs/test.log" /><!-- 设置File参数:日志输出文件名 -->
  <param name="Append" value="true" /><!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
  <param name="MaxBackupIndex" value="10" />
  <param name="MaxFileSize" value="10KB"/>
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n" /><!-- 设置输出文件项目和格式 -->
  </layout>
  <filter class="org.apache.log4j.varia.LevelRangeFilter">
      <param name="LevelMin" value="INFO" /><!--设置将INFO级别的日志通过该通道输出-->
	  <param name="LevelMax" value="INFO" />
  </filter>
</appender>
<appender name="debugChannel"
  class="org.apache.log4j.RollingFileAppender">
  <!-- 设置通道file和输出方式:org.apache.log4j.RollingFileAppender -->
  <param name="File" value="${catalina.home}/logs/testdebug.log" /><!-- 设置File参数:日志输出文件名 -->
  <param name="Append" value="true" /><!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
  <param name="MaxBackupIndex" value="10" />
  <param name="MaxFileSize" value="10KB"/>
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n" /><!-- 设置输出文件项目和格式 -->
  </layout>
  <filter class="org.apache.log4j.varia.LevelRangeFilter">
      <param name="LevelMin" value="DEBUG" />
	  <param name="LevelMax" value="DEBUG" />
  </filter>
</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>
  <!--设置输出的级别大于等于DEGUG priority value="DEBUG" / -->
  <!--设置输出的级别-->
  <priority value="INFO" />
  <!-- 设置接收所有输出的通道 -->
  <appender-ref ref="debugChannel" />
  <appender-ref ref="infoChannel" /><!-- 与前面的通道id相对应 -->
  <appender-ref ref="STDOUT" />
</root>

</log4j:configuration> 





package com.test.log;

import javax.servlet.ServletException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.xml.DOMConfigurator;
import javax.servlet.http.HttpServlet;;

/**
 * 
 * 加载log4j日志配置文件
 *
 */
public class ExtendedActionServlet extends HttpServlet {
        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();//此方法不能省,ActionServlet覆盖了的此方法中有很多重要操作
        }
} 



3  web.xml文件中增加servlet配置
<servlet> 
	    <servlet-name>log4j-init</servlet-name> 
	    <servlet-class> 
	      com.test.log.ExtendedActionServlet 
	    </servlet-class> 
	    <init-param> 
	      <param-name>log4j</param-name> 
	      <!-- 这里标出了位置 --> 
	      <param-value>/WEB-INF/log4j.xml</param-value> 
	    </init-param> 
	    <load-on-startup>1</load-on-startup> 
    </servlet>



你可能感兴趣的:(java,apache,xml,log4j,servlet)