什么是日志框架
日志框架是一套能够实现日志输出的工具包
使用日志框架的好处
- 可以定制日志输出目标
- 可以定制输出格式
- 携带上下文信息
- 运行时能够选择性输出
- 配置灵活
- 性能优异
常见日志框架
简单日志门面
简单日志门面(Simple Logging Facade),是存取日志的标准接口。
常见的有:
- JCL
- SLF4j
- jboss-logging
日志实现
- Log4j
- Log4j2
- Logback
- JUL
为什么选择SLF4j+Logback
日志实现方面去掉功能简陋的JUL,和被Logback取代的Log4j,还剩下Log4j2和Logback。
Log4j2标榜的最大优势是超高性能,日常开发学习过程中几乎碰不到这种场景,Logback的性能其实已经足够优秀了。再加上Log4j2与一些开源框架兼容方面存在问题,所以日志实现部分还是选择使用Logback。
Logback和SLF4j的作者是同一人,更适合搭配使用,不需顾虑兼容方面的问题。
SpringBoot使用的就是SLF4j+Logback组合。
Logback的配置
在application.yml中配置
相对简单,只能配置日志文件的路径和日志的输出格式等一些简单配置。
logging:
pattern:
# 控制台的日志格式,设置为"日期 - 消息内容 换行"
console: "%d - %msg%n"
# 日志的路径
path: D:\tmp\log\tomcat\
# 日志的名字(定义file的话,path就不需要了)
file: D:\tmp\log\tomcat\sell.log
# 日志级别,默认为info
level: debug
# 级别也可以指定类
level:
包名.类名: debug
在logback-spring.xml中配置
可以进行复杂配置,如每天生成一个日志文件、区分error和info日志等,便于更好的定位问题和查找日志。
配置方法
以SpringBoot为例,在项目的resources文件夹中新建logback-spring.xml
文件
贴一下我配置好的xml文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- 配置console输出 -->
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<!-- 输出的格式 "日期 - 信息内容" -->
<pattern>
%d - %msg%n
</pattern>
</layout>
</appender>
<!-- 配置文件输出 -->
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 为了把info和error分开保存,这里需要配置filter标签,过滤器类选择 级别过滤 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 对于error级别,如果匹配到就拒绝接受,如果不是error就收下 -->
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>
%msg%n
</pattern>
</encoder>
<!-- 设置滚动策略为 按日期滚动 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件路径,文件名中加入%d,将日期添加进文件名中 -->
<fileNamePattern>
D:\tmp\log\tomcat\sell\info.%d.log
</fileNamePattern>
</rollingPolicy>
</appender>
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 过滤器级别选择 临界值过滤器,过滤掉低于error级别的日志 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>
ERROR
</level>
</filter>
<encoder>
<pattern>
%msg%n
</pattern>
</encoder>
<!-- 滚动策略也是设置成按日期滚动 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件路径 -->
<fileNamePattern>
D:\tmp\log\tomcat\sell\error.%d.log
</fileNamePattern>
</rollingPolicy>
</appender>
<!-- root即为对整个项目都适用, 输出级别设置为info -->
<root level="info">
<appender-ref ref="consoleLog" />
<appender-ref ref="fileInfoLog" />
<appender-ref ref="fileErrorLog" />
</root>
</configuration>
网友评论