1. logback介绍
Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。
- logback-core是其它两个模块的基础模块。
- logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。
- logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。
要引入logback,由于Logback-classic依赖slf4j-api.jar和logback-core.jar,所以要把slf4j-api.jar、logback-core.jar、logback-classic.jar,添加到要引入Logback日志管理的项目的class path中.
2. maven依赖
org.slf4j
slf4j-api
1.7.20
ch.qos.logback
logback-classic
1.2.3
ch.qos.logback
logback-core
1.2.3
配置和使用
日志使用
一定要使用slf4j的jar包,不要使用apache commons的jar。否则滚动生成文件不生效,不滚动的时候却生效~~
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
使用:
@Controller
@RequestMapping("/test")
public class TestController {
protected final Logger logger = LoggerFactory.getLogger(TestController .getClass());
@RequestMapping("/hello")
public void hello(HttpServletResponse response) throws IOException {
logger.debug("DEBUG TEST 这个地方输出DEBUG级别的日志");
logger.info("INFO test 这个地方输出INFO级别的日志");
logger.error("ERROR test 这个地方输出ERROR级别的日志");
}
}
2.Logback的默认配置
logback的配置文件都放在/src/main/resource/文件夹下的logback.xml文件中。其中logback.xml文件就是logback的配置文件。只要将这个文件放置好了之后,系统会自动找到这个配置文件。
如果配置文件 logback-test.xml 和 logback.xml 都不存在,那么 logback 默认地会调用BasicConfigurator ,创建一个最小化配置。最小化配置由一个关联到根 logger 的ConsoleAppender组成。输出用模式为%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 的PatternLayoutEncoder 进行格式化。rootlogger 默认级别是 DEBUG。
logback配置文件
Logback 配置文件的语法非常灵活。正因为灵活,所以无法用 DTD 或 XML schema 进行定义。尽管如此,可以这样描述配置文件的基本结构:以
Logback默认配置的采用的步骤
- 尝试在 classpath 下查找文件 logback-test.xml;
- 如果文件不存在,则查找文件 logback.xml;
- 如果两个文件都不存在,logback 用 Bas icConfigurator 自动对自己进行配置,这会导致记录输出到控制台。
假设配置文件 logback-test.xml 和 logback.xml 都不存在,那么 logback 默认地会调用BasicConfigurator ,创建一个最小化配置。最小化配置由一个关联到根 logger 的ConsoleAppender组成。输出用模式为%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 的PatternLayoutEncoder 进行格式化。还有,根 logger 默认级别是 DEBUG。
3. 在控制台输出特定级别的日志
输出特定的ERROR级别的日志:
[%-5level] %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n
结果只在控制台输出ERROR级别的日志。
4. 设置输出多个级别的日志
[%-5level] %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n
5. 设置文件日志
这是一个比较简单的配置,没有不同级别的日志分别输出。
[%-5level] %d{HH:mm:ss.SSS} [%thread] %logger{36} %line: %msg%n
${LOG_HOME}/${appName}.log
[%-5level] %d{yyyy-MM-dd HH:mm:ss} [%thread] %logger{36} : %n %msg %n
UTF-8
${LOG_HOME}/${appName}-%d{yyyy-MM-dd}-%i.log
10
5MB
6. 精确设置每个包下面的日志
我经常用上面定义的 appender 关联到我们的项目 ,当然也可以设置其他包的日志,例如 ,org.springframework
最后有几点需要注意:
1、logger 的日志级别若没显示定义,则继承最近的祖先logger(该logger需显示定义level,直到rootLogger)的日志级别。
logger的父子关系,由logger的名称决定,例如有三个logger,分别为:java.lang.util 、 java.lang 、java,
则java是java.lang的父logger, 是java.lang.util的祖先logger. 而同时java.lang是java.lang.util的父logger
2、logger的appender默认具有累加性(默认日志输出到当前logger的appender和所有祖先logger的appender中),可通过配置 “additivity”属性修改默认行为
详细的配置可以参考官方文档:http://logback.qos.ch/manual/configuration.html
7.配置sevlet,通过网页查看logback内部运行状态
对于web项目,我们可以配置sevlet,然后通过网页查看logback内部运行状态
当然也加入相应的依赖
ch.qos.logback
logback-access
1.2.3
在web.xml添加
ViewStatusMessages
ch.qos.logback.classic.ViewStatusMessagesServlet
ViewStatusMessages
/lbClassicStatus
8.分级别打印日志
对大项目来说,最好是分级别来打印日志
[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] --%mdc{client} %msg%n
UTF-8
${LOG_HOME}/trace.log
logs/trace.%d{yyyy-MM-dd}.log
[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] --%mdc{client} %msg%n
UTF-8
${LOG_HOME}/info.log
logs/info.%d{yyyy-MM-dd}.log
[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] --%mdc{client} %msg%n
INFO
ACCEPT
DENY
UTF-8
${LOG_HOME}/debug.log
logs/debug.%d{yyyy-MM-dd}.log
[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] --%mdc{client} %msg%n
DEBUG
ACCEPT
DENY
UTF-8
${LOG_HOME}/warn.log
logs/warn.%d{yyyy-MM-dd}.log
[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] --%mdc{client} %msg%n
WARN
ACCEPT
DENY
UTF-8
${LOG_HOME}/error.log
logs/error.%d{yyyy-MM-dd}.log
[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] --%mdc{client} %msg%n
ERROR
ACCEPT
DENY
分别记录上面trace, info, debug, warn, error 的日志。
参考文章
http://blog.csdn.net/initphp/article/details/40891821
http://blog.csdn.net/kittaaron/article/details/9151103
http://blog.csdn.net/zhangliao613/article/details/53007184