程序启动的时候首先启动web.xml中的servlet中log4j-init文件,这个文件的位置是com.et.bean.servlet.Log4jInit <init-param>是里面含有的参数,这个参数是WEB-INF/log.xml。
1.在web.xml文件中加入,
<servlet>
<servlet-name>log4j-init</servlet-name>
<servlet-class>com.et.bean.servlet.Log4jInit</servlet-class>
<init-param>
<param-name>log4j-init-file</param-name>
<param-value>WEB-INF/log.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
与之对应的
<servlet-mapping>
<servlet-name>ServletTest</servlet-name>
<url-pattern>/servlet</url-pattern>
</servlet-mapping>
这段如果不写的话也可以正常执行log4j的功能。
2.把log4j.xml文件copy到WEB-INF 文件夹内
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- 配置通道名称:console和输出方式:org.apache.log4j.RollingFileAppender
其中输出方式appender有5种,分别为
org.apache.log4j.ConsoleAppender (控制台)
org.apache.log4j.FileAppender (文档)
org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文档)
org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)-->
<!--Threshold是个全局的过滤器,他将把低于所配置的level的信息过滤不显示出来-->
<!--level:是日记记录的优先级,优先级由高到低分为
OFF ,FATAL ,ERROR ,WARN ,INFO ,DEBUG ,ALL。
Log4j建议只使用FATAL ,ERROR ,WARN ,INFO ,DEBUG这四个级别。-->
<!-- 输出端的layout是哪种类型,可以是
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息) -->
<!-- 如果使用pattern布局就要指定的打印信息的具体格式ConversionPattern,打印参数如下:
%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
[QC]是log信息的开头,可以为任意字符,一般为项目简称。 -->
<!--输出方式:输出到控制台-->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<param name="Threshold" value="INFO"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %l%n[%p] %m%n" />
</layout>
</appender>
<!--输出方式:输出到文件,每日-->
<appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
<param name="File" value="E:\\qc.log"/> <!-- 文件路径 -->
<param name="Append" value="false"/> <!--Append是配置是否在重新启动服务时,在原有日志的基础添加新日志 -->
<param name="DatePattern" value="'.'yyyy-MM-dd"/> <!-- 日期形式输出文件 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
</layout>
</appender>
<!--输出方式:输出到文件-->
<appender name="comm" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="E:\\log4j.log" />
<param name="Append" value="true" />
<param name="MaxFileSize" value="5000KB" /> <!-- 文件最大的容量 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %l%n[%p] %m%n"/>
</layout>
</appender>
<!-- 输出方式:输出到文件 -->
<appender name="local" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="E:\\qc.log" />
<param name="Append" value="true" />
<param name="MaxFileSize" value="5000KB" />
<layout class="org.apache.log4j.PatternLayout"> <!-- 文件的布局 -->
<param name="ConversionPattern" value="%d [%t] %l%n[%p] %m%n" /> <!-- 文件的输出格式 -->
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter"> <!-- 过滤等级-->
<param name="levelMin" value="warn" />
<param name="levelMax" value="warn" />
<param name="AcceptOnMatch" value="true" />
</filter>
</appender>
<!-- category是指定我们的项目下的具体包下的所有类的等级(priority)为DEBUG,info,warn,error等 ,输出方式(appender)是.. -->
<category name="com.et.dao.impl">
<priority value="DEBUG" />
<appender-ref ref="console" />
<appender-ref ref="comm" />
</category>
</log4j:configuration>
3.建立个 servlet 包,把Log4jInit 文件放入到文件夹下面
package com.et.bean.servlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.PropertyConfigurator;
public class Log4jInit extends HttpServlet {
public void init() {
String prefix = getServletContext().getRealPath("/");
String file = getInitParameter("log4j-init-file");
// if the log4j-init-file is not set, then no point in trying
if(file != null) {
PropertyConfigurator.configure(prefix+file);
System.out.println("Init Log4j success!");
}
}
public void doGet(HttpServletRequest req, HttpServletResponse res) {
}
}
4.在需要的生成日志的地方加入static Logger logger = Logger.getLogger(TousuDAO.class);
public class TousuDAO extends BaseDAO {
static Logger logger = Logger.getLogger(TousuDAO.class);
其中Logger.getLogger(TousuDAO.class); 与public class TousuDAO 的DAO要一致,传说中的反射机制。
在执行这个工程的时候就会在相应的目录下生成日志文件,内容类似
2008-08-22 09:34:54,234 [http-8080-2] com.et.dao.impl.WorkInfoDAO.getWorkInfoList(WorkInfoDAO.java:32)
[INFO] 1afafewefwe,
2008-08-22 09:34:54,250 [http-8080-2] com.et.dao.impl.WorkInfoDAO.getWorkInfoList(WorkInfoDAO.java:34)
[DEBUG] abcder
2008-08-22 09:34:58,296 [http-8080-2]
1.在web.xml文件中加入,
<servlet>
<servlet-name>log4j-init</servlet-name>
<servlet-class>com.et.bean.servlet.Log4jInit</servlet-class>
<init-param>
<param-name>log4j-init-file</param-name>
<param-value>WEB-INF/log.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
与之对应的
<servlet-mapping>
<servlet-name>ServletTest</servlet-name>
<url-pattern>/servlet</url-pattern>
</servlet-mapping>
这段如果不写的话也可以正常执行log4j的功能。
2.把log4j.xml文件copy到WEB-INF 文件夹内
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- 配置通道名称:console和输出方式:org.apache.log4j.RollingFileAppender
其中输出方式appender有5种,分别为
org.apache.log4j.ConsoleAppender (控制台)
org.apache.log4j.FileAppender (文档)
org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文档)
org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)-->
<!--Threshold是个全局的过滤器,他将把低于所配置的level的信息过滤不显示出来-->
<!--level:是日记记录的优先级,优先级由高到低分为
OFF ,FATAL ,ERROR ,WARN ,INFO ,DEBUG ,ALL。
Log4j建议只使用FATAL ,ERROR ,WARN ,INFO ,DEBUG这四个级别。-->
<!-- 输出端的layout是哪种类型,可以是
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息) -->
<!-- 如果使用pattern布局就要指定的打印信息的具体格式ConversionPattern,打印参数如下:
%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
[QC]是log信息的开头,可以为任意字符,一般为项目简称。 -->
<!--输出方式:输出到控制台-->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<param name="Threshold" value="INFO"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %l%n[%p] %m%n" />
</layout>
</appender>
<!--输出方式:输出到文件,每日-->
<appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
<param name="File" value="E:\\qc.log"/> <!-- 文件路径 -->
<param name="Append" value="false"/> <!--Append是配置是否在重新启动服务时,在原有日志的基础添加新日志 -->
<param name="DatePattern" value="'.'yyyy-MM-dd"/> <!-- 日期形式输出文件 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
</layout>
</appender>
<!--输出方式:输出到文件-->
<appender name="comm" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="E:\\log4j.log" />
<param name="Append" value="true" />
<param name="MaxFileSize" value="5000KB" /> <!-- 文件最大的容量 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %l%n[%p] %m%n"/>
</layout>
</appender>
<!-- 输出方式:输出到文件 -->
<appender name="local" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="E:\\qc.log" />
<param name="Append" value="true" />
<param name="MaxFileSize" value="5000KB" />
<layout class="org.apache.log4j.PatternLayout"> <!-- 文件的布局 -->
<param name="ConversionPattern" value="%d [%t] %l%n[%p] %m%n" /> <!-- 文件的输出格式 -->
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter"> <!-- 过滤等级-->
<param name="levelMin" value="warn" />
<param name="levelMax" value="warn" />
<param name="AcceptOnMatch" value="true" />
</filter>
</appender>
<!-- category是指定我们的项目下的具体包下的所有类的等级(priority)为DEBUG,info,warn,error等 ,输出方式(appender)是.. -->
<category name="com.et.dao.impl">
<priority value="DEBUG" />
<appender-ref ref="console" />
<appender-ref ref="comm" />
</category>
</log4j:configuration>
3.建立个 servlet 包,把Log4jInit 文件放入到文件夹下面
package com.et.bean.servlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.PropertyConfigurator;
public class Log4jInit extends HttpServlet {
public void init() {
String prefix = getServletContext().getRealPath("/");
String file = getInitParameter("log4j-init-file");
// if the log4j-init-file is not set, then no point in trying
if(file != null) {
PropertyConfigurator.configure(prefix+file);
System.out.println("Init Log4j success!");
}
}
public void doGet(HttpServletRequest req, HttpServletResponse res) {
}
}
4.在需要的生成日志的地方加入static Logger logger = Logger.getLogger(TousuDAO.class);
public class TousuDAO extends BaseDAO {
static Logger logger = Logger.getLogger(TousuDAO.class);
其中Logger.getLogger(TousuDAO.class); 与public class TousuDAO 的DAO要一致,传说中的反射机制。
在执行这个工程的时候就会在相应的目录下生成日志文件,内容类似
2008-08-22 09:34:54,234 [http-8080-2] com.et.dao.impl.WorkInfoDAO.getWorkInfoList(WorkInfoDAO.java:32)
[INFO] 1afafewefwe,
2008-08-22 09:34:54,250 [http-8080-2] com.et.dao.impl.WorkInfoDAO.getWorkInfoList(WorkInfoDAO.java:34)
[DEBUG] abcder
2008-08-22 09:34:58,296 [http-8080-2]