非原创。只是对网上的资料做了补充。
通过以下配置可以配置将某级别范围的日志信息写入到指定文件中。
可以配置输出日志的级别优先级。
分为三部分:
1 日志输出文件log4j.xml的配置。
2 加载日志配置文件的servlet类。
2 web.xml配置
当然,还要加载必要的jar包。
1
2
3 web.xml文件中增加servlet配置
通过以下配置可以配置将某级别范围的日志信息写入到指定文件中。
可以配置输出日志的级别优先级。
分为三部分:
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>
2
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>