log4j自己的一个实例

程序启动的时候首先启动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]

你可能感兴趣的:(DAO,apache,log4j,bean,servlet)