日志框架
1. 概述
是一套能实现日志输出的工具包 ;
System.out ?
1). 代码侵入性高, 一旦编写的输出语句 , 该语句会一直输出 , 直到被删除/注释 ;
2). 输出的信息不详细 , 传递什么内容, 就输出什么内容 ;
3). 功能单一 , 只能是往控制台输出 ;
2. 主流日志框架
日志框架具有的能力 :
1). 定制输出目标
2). 运行时选择性输出
3). 定制输出格式
4). 灵活的配置
5). 携带上下文信息
日志门面 |
日志实现 |
JCL(apache commons-logging) |
Log4j |
jboss-logging |
Log4j2 |
SLF4J |
Logback |
|
JUL(java.util.logging) |
日志门面 :
slf4j是对所有日志框架制定的一种规范、标准、接口,并不是一个框架的具体的实现,因为接口并不能独立使用,需要和具体的日志框架实现配合使用(如 log4j、logback);
日志实现 :
1). log4j是apache实现的一个开源日志组件 ;
2). logback同样是由log4j的作者设计完成的,拥有更好的特性,用来取代log4j的一个日志框架,是slf4j的原生实现 ;
3). Log4j2是log4j 1.x和logback的改进版,据说采用了一些新技术(无锁异步、等等),使得日志的吞吐量、性能比log4j 1.x提高10倍,并解决了一些死锁的bug,而且配置更加简单灵活 ;
为什么需要日志接口,直接使用具体的实现不就行了吗?
接口用于定制规范,可以有多个实现,使用时是面向接口的,即直接和接口交互,不直接使用实现,所以可以任意的更换实现而不用更改代码中的日志相关代码。
3. 配置使用
3.1 slf4j - log4j
3.1.1 pom. xml
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.6</version>
</dependency>
3.1.2 log4j.properties
log4j.rootLogger=info,A2
log4j.appender.A2=org.apache.log4j.ConsoleAppender
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
#for file
log4j.appender.files.layout=org.apache.log4j.PatternLayout
log4j.appender.files.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.appender.files=org.apache.log4j.RollingFileAppender
log4j.appender.files.File=D:/example.log
log4j.appender.files.MaxFileSize=100KB
#for file every day
log4j.appender.everyday=org.apache.log4j.DailyRollingFileAppender
log4j.appender.everyday.layout=org.apache.log4j.PatternLayout
log4j.appender.everyday.File=myloggers.log
log4j.appender.everyday.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.everyday.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
lo