1 添加maven依赖
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
<scope>runtime</scope>
</dependency>
2 配置log4j.xml(也可以使用properties方式)
Log4j中有三个主要组成部分:
loggers: 负责捕获记录信息。
appenders : 负责发布日志信息,以不同的首选目的地。(可以使控制台或者文件)
layouts: 负责格式化不同风格的日志信息。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
<!-- 可以配置多个appender来对应不同的输出,如文件输出,控制台输出等 -->
<!-- 不同的输出类型对应着不同的calss,如控制台输出class对应着 org.apache.log4j.ConsoleAppender,文件输出可以使用class
org.apache.log4j.RollingFileAppender -->
<!--配置appender为文件-->
<appender name="rollingFile" class="org.apache.log4j.RollingFileAppender">
<param name="file" value="$${webapp.root}/logs/test.log"/>
<param name="append" value="true" />
<param name="maxFileSize" value="512MB"/>
<param name="maxBackupIndex" value="2"/>
<layout class="org.apache.log4j.EnhancedPatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5p](%-35c{1.}:%-3L) %m%n" />
</layout>
</appender>
<!--配置appender为控制台-->
<appender name="console" class="org.apache.log4j.ConsoleAppender"> <!-- name给logger或者root调用 -->
<layout class="org.apache.log4j.EnhancedPatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5p](%-35c{1.}:%-3L) %m%n" />
</layout>
<!--filter过滤器设置输出的级别:ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF
所有下面输出的是debug到warn,不会有fatal
-->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="info" />
<param name="levelMax" value="warn" />
<param name="AcceptOnMatch" value="true" />
</filter>
</appender>
<!--配置包的日志级别,additivity为是否继承root的日志级别-->
<!--level 配置日志的级别,value="INFO",debug级别的日志不会打印-->
<logger name="com.controller" additivity="false">
<level value="INFO"/>
<!--<appender-ref ref="console"/>-->
<appender-ref ref="rollingFile"/>
</logger>
<!-- Root Logger -->
<!-- 所有logger的父类,记录所有的日志。 -->
<root>
<level value="INFO"/>
<!--<appender-ref ref="console" />-->
<appender-ref ref="rollingFile"/>
</root>
</log4j:configuration>
3 配置web.xml
在web.xml中添加以下配置
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
4 测试
写一个controller类来进行测试下
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class LogController {
private static Logger logger = LoggerFactory.getLogger(LogController.class);
@RequestMapping("/log")
@ResponseBody
public String log(){
logger.info("info");
logger.debug("debug");
logger.warn("warn");
logger.error("error")
return "log";
}
}
启动tomcat,打开http://localhost:8080/log
控制台输出
2018-03-22 10:55:27 [INFO ](c.l.c.LogController :16 ) info
2018-03-22 10:55:27 [WARN ](c.l.c.LogController :18 ) warn
如果想输出error日志,可以更改log4j.xml中的filter配置,
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="info" />
<param name="levelMax" value="error" />
<param name="AcceptOnMatch" value="true" />
</filter>
也可以不配置filter。
若更改
<logger name="com.controller" additivity="false">
<level value="INFO"/>
<!--<appender-ref ref="console"/>-->
<appender-ref ref="rollingFile"/>
</logger>
中的level value="debug",则debug级别的日志可以打印
控制台输出
2018-03-22 10:55:27 [INFO ](c.l.c.LogController :16 ) info
2018-03-22 10:55:27 [INFO ](c.l.c.LogController :17 ) debug
2018-03-22 10:55:27 [WARN ](c.l.c.LogController :18 ) warn
2018-03-22 10:55:27 [INFO ](c.l.c.LogController :19 ) error