常见的日志框架有log4j、logback和log4j2。三者作者都是Ceki Gülcü。slf4j是The Simple Logging Facade for Java的简称,是log4j、logback和log4j2的统一开发接口封装,作为日志门面,很大程度上提高了易用性和可维护性。最早为log4j(Log for Java),再后来基于log4j开发出一套统一的接口slf4j。并在log4j和slf4j的基础上开发了logback,在性能上也做了优化。log4j2虽然与log4j有很大的相似性,但是log4j2有极大地提升了性能,并有更高的并发性,并支持异步log。
所以,无论在性能上还是并发性上,log4j2都是目前最优的日志框架。
org.springframework.boot spring-boot-starter-log4j2
springboot默认使用的日志框架为logback,要想使用log4j2,需要从spring-boot-starter-web中排除对spring-boot-starter-logging依赖。
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-logging
然后,再引入log4j2的依赖,内部依赖了slf4j、log4j。
org.springframework.boot spring-boot-starter-log4j2
./logs ./logs/history 100MB 30 %d{yyyy-MM-dd HH:mm:ss.SSS} => [%thread] => %-5level %logger{50}:(%line) - %msg%n
要想使log4j2配置生效,需要在resources目录下新建log4j2.xml,springboot会自动找到配置文件,并加载。
log4j2共分8个日志级别,按从低到高排列为:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF:
设置应用程序的日志级别后,将输出该级别及以上的日志。如,设置日志级别为INFO,那么程序会输出INFO、WARN、ERROR及FATAL日志。
监视配置文件变化间隔时间。如设置为30,表示每隔30s,程序会自动检测配置文件是否修改,如果修改,就更新配置文件。
定义属性,方便在配置文件中引用。我们在这配置了logDir、historyLogDir、splitSize、fileCount及logPattern属性。
定义一系列的日志输出,可输出至控制台或者文件中。主要有三种日志输出方式:
三种方式有共同的子节点。
定义日志输出等级。
如果想输出某个等级及其以上的日志,可做如下配置:
以上配置过滤INFO级别及其以上的日志。
如果想单独输出某个等级的日志,可做如下配置:
以上配置只过滤DEBUG日志,INFO及其以上等级的日志将被拒绝。
定义日志输出至控制台。主要属性有name、target、filters和PatternLayout。
定义日志输出至文件。示例配置如下:
主要属性和子节点有name、fileName、append、filters和PatternLayout。
也是定义日志输出至文件,不同的是RollingFile可以定义日志文件存档策略。比如按照时间存档,每天备份一次,最大存档30天等等。
主要属性和子节点有name、fileName、filePattern、filters、PatternLayout、Policies、TimeBasedTriggeringPolicy、SizeBasedTriggeringPolicy和DefaultRolloverStrategy。
定义日志输出至数据库或者其它日志管理系统,如elk等。
以上定义日志输出至127.0.0.1:4560服务器,也就是我本地创建的elk日志管理系统。elk的搭建将在下一章讲解。
所有在appenders里定义的appender都需要在logger下引用,否则appender的配置就不会生效。
如果要过滤掉一些debug信息,可以在logger中屏蔽掉,如下屏蔽掉org.springframework中error级别以下的日志:
设置项目中的日志输出至指定的文件,并且不再在控制台中输出,配置如下:
root节点为兜底操作,所有在appenders中配置的,但没有在其它logger中输出的,都会在root的logger中输出。