Log4j的使用教程

来源:互联网 发布:网络线上赌博 编辑:程序博客网 时间:2024/06/07 14:11

关于Log4J日志的配置详细解析请参考:http://blog.csdn.net/qq_32786873/article/details/51801116


一.在java项目中使用Log4j

    1.新建一个Java工程,导入包log4j-1.2.17.jar,整个工程最终目录如下

 

    

    2.src同级创建并设置log4j.properties

    log4j.properties文件配置如下:

log4j.rootLogger=DEBUG, A1 ,R log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss} [%c]-[%p] %m%nlog4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=D:\\Test_Log4j.log log4j.appender.R.MaxFileSize=100KB log4j.appender.R.MaxBackupIndex=1log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss} [%c]-[%p] %m%n

    3、设置日志内容

package Solin;import org.apache.log4j.Logger;import org.apache.log4j.PropertyConfigurator;public class TestLog4J {private static Logger log = Logger.getLogger(TestLog4J.class);public static void main(String[] args) {PropertyConfigurator.configure(".\\src\\log4j.properties");log.debug("This is debug message!");log.info("This is info message!");log.warn("This is warn message!");log.error("This is error message!");}}

    4.输出结果
    (1)首先是控制台的信息


    (2)再来看输出的文件



以下内容来源于:http://www.codeceo.com/article/log4j-usage.html

二.Web项目中使用Log4j实例

    上面代码描述了Log4j的简单应用,其实使用Log4j也就是这样简单方便。当然除了上面的配置方法,还有其它,比如做一个J2EE应用,在J2EE应用中使用Log4j,必须先在启动服务时加载Log4j的配置文件进行初始化,可以在web.xml中进行。

1、web应用的log4j使用基本上都采用:新建一个servlet,这个servlet在init函数中为log4j执行配置。一般就是读入配置文件。所以需要在web.xml中为这个servlet配置,同时设定load-on-startup为1。

2、这个servlet配置log4j就是读出配置文件,然后调用configure函数。这里有两个问题:一、需要知道文件在哪里;二、需要正确的文件类型

3、配置文件位置在web.xml中配置一个param即可,路径一般是相对于web的root目录

4、文件类型一般有两种,一个是Java的property文件,另一种是xml文件

配置文件的大致内容:log4j可以指定输出的log级别的最低等级,以及log的输出配置格式,每个log可以指定多个输出方式


(1)创建Web工程,整个工程最后目录如下


(2)web.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>  <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"      xmlns="http://java.sun.com/xml/ns/javaee"      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"      id="WebApp_ID" version="3.0">      <display-name>TestLog4J</display-name>      <servlet>          <servlet-name>Log4JTestServlet</servlet-name>          <servlet-class>Solin.Log4JTestServlet</servlet-class>      </servlet>      <!--用来启动 log4jConfigLocation的servlet -->      <servlet>          <servlet-name>Log4JInitServlet</servlet-name>          <servlet-class>Solin.Log4JInitServlet</servlet-class>          <init-param>              <param-name>log4j-properties-location</param-name>              <param-value>/WEB-INF/classes/log4j.properties</param-value>          </init-param>          <load-on-startup>1</load-on-startup>      </servlet>      <servlet-mapping>          <servlet-name>Log4JTestServlet</servlet-name>          <url-pattern>/test</url-pattern>      </servlet-mapping>  </web-app>

(3)配置文件log4j.properties

log4j.rootLogger=DEBUG, A1 ,R log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss} [%c]-[%p] %m%nlog4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=D:\\Test_Log4j.log log4j.appender.R.MaxFileSize=100KB log4j.appender.R.MaxBackupIndex=1log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss} [%c]-[%p] %m%n

(4)web容器一来就初始化的servlet

  Log4JInitServlet.java

package Solin;import java.io.File;import java.io.IOException;import javax.servlet.ServletConfig;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.log4j.BasicConfigurator;import org.apache.log4j.PropertyConfigurator;@WebServlet("/Log4JInitServlet") public class Log4JInitServlet extends HttpServlet {private static final long serialVersionUID = -8587938407567965599L;public Log4JInitServlet() {super();}@Overridepublic void init(ServletConfig config) throws ServletException {System.out.println("Log4JInitServlet 正在初始化 log4j日志设置信息");          String log4jLocation = config.getInitParameter("log4j-properties-location");          ServletContext sc = config.getServletContext();          if (log4jLocation == null) {              System.err.println("*** 没有 log4j-properties-location 初始化的文件, 所以使用 BasicConfigurator初始化");              BasicConfigurator.configure();          } else {              String webAppPath = sc.getRealPath("/");              String log4jProp = webAppPath + log4jLocation;              File file = new File(log4jProp);              if (file.exists()) {                  System.out.println("使用: " + log4jProp+"初始化日志设置信息");                  PropertyConfigurator.configure(log4jProp);              } else {                  System.err.println("*** " + log4jProp + " 文件没有找到, 所以使用 BasicConfigurator初始化");                  BasicConfigurator.configure();              }          }          super.init(config);  }@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stub}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stub}}

(5)调用日志Log4JTestServlet.java

package Solin;import java.io.IOException;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.log4j.Logger;@WebServlet("/Log4JTestServlet")  public class Log4JTestServlet extends HttpServlet {private static final long serialVersionUID = 6357686651026518299L;private static Logger log = Logger.getLogger(Log4JTestServlet.class);public Log4JTestServlet() {super();}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 记录debug级别的信息            log.debug("This is debug message!");            // 记录info级别的信息            log.info("This is info message!");         // 记录warn级别的信息            log.warn("This is warn message!");        // 记录error级别的信息            log.error("This is error message!"); }@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req,resp);}@Overridepublic void init(ServletConfig config) throws ServletException {// TODO Auto-generated method stub}}

(6)控制台信息:


(7)输出结果:



三、Spring中使用Log4j

这里要实现web项目中利用Spring来使用Log4j


(1)接上面的工程,然后再导入Spring的包
(2)web.xml增加

<!-- 设置根目录 -->     <context-param>           <param-name>webAppRootKey</param-name>           <param-value>webapp.root</param-value>       </context-param>       <context-param>      <param-name>log4jConfigLocation</param-name>      <param-value>/WEB-INF/classes/log4j.properties</param-value>  </context-param>  <!-- 3000表示 开一条watchdog线程每60秒扫描一下配置文件的变化;这样便于日志存放位置的改变 -->  <context-param>            <param-name>log4jRefreshInterval</param-name>            <param-value>3000</param-value>       </context-param>   <listener>      <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>  </listener>

   整个内容如下:

<?xml version="1.0" encoding="UTF-8"?>  <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"      xmlns="http://java.sun.com/xml/ns/javaee"      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"      id="WebApp_ID" version="3.0">      <display-name>TestLog4J</display-name>      <servlet>          <servlet-name>Log4JTestServlet</servlet-name>          <servlet-class>com.mucfc.Log4JTestServlet</servlet-class>      </servlet>      <!--用来启动 log4jConfigLocation的servlet -->  <!--     <servlet>          <servlet-name>Log4JInitServlet</servlet-name>          <servlet-class>com.mucfc.Log4JInitServlet</servlet-class>          <init-param>              <param-name>log4j-properties-location</param-name>              <param-value>/WEB-INF/classes/log4j.properties</param-value>          </init-param>          <load-on-startup>1</load-on-startup>      </servlet>-->      <servlet-mapping>          <servlet-name>Log4JTestServlet</servlet-name>          <url-pattern>/test</url-pattern>      </servlet-mapping>       <!-- Spring 容器加载 -->      <listener>          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>      </listener>      <context-param>          <param-name>contextConfigLocation</param-name>          <param-value>classpath:applicationContext.xml</param-value>      </context-param>       <!-- 设置根目录 -->      <context-param>            <param-name>webAppRootKey</param-name>            <param-value>webapp.root</param-value>        </context-param>        <context-param>          <param-name>log4jConfigLocation</param-name>          <param-value>/WEB-INF/classes/log4j.properties</param-value>      </context-param>      <!-- 3000表示 开一条watchdog线程每60秒扫描一下配置文件的变化;这样便于日志存放位置的改变 -->      <context-param>             <param-name>log4jRefreshInterval</param-name>             <param-value>3000</param-value>        </context-param>       <listener>          <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>      </listener>   </web-app>

 这里Log4JInitServlet.java就相当于没用到了


(3)applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>  <beans xmlns="http://www.springframework.org/schema/beans"      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"      xmlns:aop="http://www.springframework.org/schema/aop"      xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.2.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.2.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.2.xsd">  </beans>

(4)这样日志就跟随Spring窗口启动而启动了
  程序一运行,就会自动把日志打印


Test_Log4j.log



浏览器输入http://localhost:8080/TestLog4J/test


1 0
原创粉丝点击