Logback 和 Log4j 是同一个人开发的,Logback 比 Log4j 的功能更强大,效率更高,但配置几乎一样。
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.2</version>
</dependency>
当系统发现在 classpath 里有 Logback 的 jar 包,就会自动的在 classpath 下查找 logback.xml 文件,如果找到就使用它来配置 Logback,如果没找到就使用默认的 Logback 配置。
(resources 目录里的文件会被自动的复制到 classes 目录,即 classpath 环境下)
<?xml version="1.0"?>
<configuration>
<property name="log.base" value="logs" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss}] [%-5level] [%F-%M:%L] - %msg%n</pattern>
</encoder>
</appender>
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.base}/log.txt</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.base}/log.%d{yyyyMMdd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss}] [%-5level] [%F-%M:%L] - %msg%n</pattern>
</encoder>
</appender>
<root>
<appender-ref ref="STDOUT" />
<appender-ref ref="file" />
</root>
<logger name="org.mybatis" level="off"/>
<logger name="org.springframework" level="debug"/>
</configuration>
通过前面 2 步,logback 就配置好了,接下来就可以在代码里像下面这么使用 logback。
package controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloWorldController {
// 1. 创建 logger 对象
private static Logger logger = LoggerFactory.getLogger(HelloWorldController.class.getName());
@RequestMapping("/logback")
@ResponseBody
public String logback() {
// 2. 和 log4j 一样使用
logger.debug("No params");
// 3. 可以使用 {} 的方式传入参数
logger.debug("With params: time: {}, name: {}", System.nanoTime(), "Bingo");
return "Test logback";
}
}
输出
[2015-04-06 09:08:37] [DEBUG] [HelloWorldController.java-logback:19] - No params
[2015-04-06 09:08:37] [DEBUG] [HelloWorldController.java-logback:22] - With params: time: 88085263980523, name: Bingo
同时在项目的目录下有 logs/log.txt 文件生成(关注选中的文件,其他的文件可以忽略)
由于历史原因,Spring 的日志使用的是 JCL,而现在 SLF4J 更流行,Logback 也是在 SLF4J 的基础上输出的,为了把 JCL 的日志桥接到 SLF4J,即使用 Logback 输出,只需要把下面的依赖添加到 pom.xml 即可,这样 Spring 的日志会自动的使用 Logback 输出。
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.7</version>
</dependency>
参考文档
:http://unmi.cc/jcl-over-slf4j-slf4j/
ALL
: 是最低等级的,用于打开所有日志记录。 DEBUG
: 指出细粒度信息事件对调试应用程序是非常有帮助的。INFO
: 表明消息在粗粒度级别上突出强调应用程序的运行过程。 WARN
: 表明会出现潜在错误的情形。ERROR
: 指出虽然发生错误事件,但仍然不影响系统的继续运行。FATAL
: 指出每个严重的错误事件将会导致应用程序的退出。OFF
: 是最高等级的,用于关闭所有日志记录。优先级
从低到高分别是 ALL、DEBUG、INFO、WARN、ERROR、FATAL、OFF
通过定义级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了 INFO 级别,则应用程序中所有 DEBUG 级别的日志信息将不被打印出来。程序会打印高于或等于所设置级别的日志
,设置的日志等级越高,打印出来的日志就越少。如果设置级别为 INFO,则优先级高于等于 INFO 级别(如:INFO、 WARN、ERROR, FATAL)的日志信息将可以被输出,小于该级别的如 DEBUG 将不会被输出。
Logback 还支持过滤器
,例如将过滤器的日志级别配置为 ERROR,所有 ERROR 级别的日志交给 appender 处理,非 ERROR 级别的日志,被过滤掉。过滤器被添加到 appender 中,为 appender 添加一个或多个过滤器后,可以用任意条件对日志进行过滤。appender 有多个过滤器时,按照配置顺序执行。通过 appender 中的 filter 来严格限制日志的输出级别:
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
在程序调试中,经常出现的情况是:错误只在某一个或者几个类或者包里,所以只需要打开这几个类或者包里的 DEBUG 级别的 log。在以前的项目,使用 Spring 和 Hibernate 时,一旦打开 DEBUG 级别的 log,程序本身的 debug 信息就会被 Spring 和 Hibernate 的大量日志淹没,大大降低了调试的效率。而 logback 让这一切变的简单起来了:
<logger name="org" level="ERROR" />
这一行就将org包下面的所有日志级别设为了ERROR,不会再打扰我们的 DEBUG。
http://blog.csdn.net/mydeman/article/details/6716925
http://www.360doc.com/content/12/0321/13/203871_196275021.shtml