1 日志框架
(1) slf4j
一种日志框架规范、标准和接口,不是具体实现。用户通过slf4j作为代理,间接使用具体的日志框架。可以在不更改项目代码的前提下,更换具体日志框架。
(2) log4j2、log4j和logback
具体的日志框架,可以与slf4j搭配使用。
其中,log4j2相比log4j具有更好的吞吐量和性能,解决了一些死锁bug,并新增了无锁异步等技术。
2 Spring Boot项目配置
以下适用于版本2.2.2
(1)依赖处理
1 | <dependency> |
(2) 配置
示例如下:
1 | <?xml version="1.0" encoding="UTF-8"?> |
日志滚动策略
容量计算公式
1 | 日志空间需求=日志滚动阈值(例如500M)+日志留存个数*日志滚动阈值*1/压缩比(对于gz压缩比一般会是几十,具体根据应用日志压缩后计算) |
3 日志调优
- 在Configuration中添加monitorInterval,以支持动态刷新
- 使用异步日志,而不是同步日志,可以是混合异步也可以是全局异步
- 不推荐配置AsyncAppender,如果需要混合异步,使用AsyncLogger
- PatternLayout不要使用%L、%C、%method等含有“位置信息”的配置项,非常影响性能。同时logger配置中需要加上inclueLocation=”false”,这样即使配置了位置信息也会被忽略
- 使用RollingRandomAccessFile做为appender
- 基于大小和时间的双重文件滚动策略,并配合压缩
4 踩坑指南
(1) 输出日志格式不对
- 确认配置文件是否生效,否则移动位置或将当前位置加入到资源路径中。
- 检查是否将spring boot库中的所有logback屏蔽
(2) NoClassDefFoundError: com/lmax/disruptor/EventFactory
1 | <!-- 异步日志必须 --> |
(3) 不同的日志输出到不同的文件
检查<Loggers>
是否正确
(4) IDE更新
IDE更新后需要安装Lombok支持
参考资料
日志框架比较(slf4j、log4j、logback、log4j2 )
SpringBoot中集成Log4j2以及Log4j2的xml配置
SpringBoot中集成Log4j2以及Log4j2的xml配置
示例
1 | <?xml version="1.0" encoding="UTF-8"?> |