最近在搭建一个开发环境的时候使用到了 log4j,所以就记录下使用方法以便以后查阅。

1.引入log4j的相关jar包

jar包的引入非常简单,只需要在pom.xml中加入以下的log4j关联就行。

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.9</version>
</dependency>

2.创建并使用log4j.properties文件

在/WEB-INF/文件夹下创建一个log4j.properties文件,在其中添加如下的内容:

### 设置###
log4j.rootLogger = debug,stdout,D,E

### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 输出DEBUG 级别以上的日志到 logs/log.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = ${webapp.root}/WEB-INF/logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 输出ERROR 级别以上的日志到 logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = ${webapp.root}/WEB-INF/logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m

然后在web.xml中添加以下内容以完成对log4j.properties的调用:

<!-- log4j.properties文件 -->
<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/log4j.properties</param-value>
</context-param>

<!-- Spring的log4j监听器 -->
<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

3.添加log文件,用来保存log信息

在/WEB-INF/logs文件夹下创建log.log文件和error.log文件,那么在log4j.properties中所定义的相关log信息就会被写入到对应的.log文件中。

我在这里被一个问题困扰了好久,就是无论我怎么设置,程序相关的log信息都是能在控制台打印出来的,但是我却怎么也无法在.log文件看到本应该有的相关log信息,所有的.log文件都一直是空的,也就是没有任何信息被写入进去。后来我发现我自己犯了一个愚蠢错误,因为实际上真正在运行的程序是/target文件夹下的,也就是说我应该去/target文件夹下的对应的logs文件夹中查看相应的文件,然不是在/src文件夹下看对应的log文件,之后我去/target文件夹也即是运行程序的文件夹下查看了对应的.log文件,果然日志信息已经被写进去了。

4.测试日志的产生

package com.duoka.test;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * Created on 2015/12/24 22:49.
 */
@Controller
public class Test {

    Logger logger = Logger.getLogger(Test.class);

    @RequestMapping("/test")
    public String test() {
        logger.error("start server");
        logger.info("asdsd");
        logger.debug("asdsadas");
        logger.warn("sadasdsad");
        return "test";
    }
}

书写一个如上的测试程序,发现在控制台和.log文件中均可以可以产生相关的日志文件,log4j的使用环境搭建成功。

关于如何配置 log4j.properties 文件,可以参阅log4j.properties 文件的配置