1、什么是日志框架
是一套能实现日志输出的工具包,能够描述系统运行状态的所有时间都可以算作日志
2、日志框架的选择
可以定制输出目标(文件)
可以定制输出格式
可以携带上下文信息
运行时选择性输出
灵活的配置
优异的性能
3、有哪些日志框架
JDK自带的日志框架:JUL
Apache的日志框架:JCL
Log4j
Log4j2
Logback
SLF4j
jboss-logging
日志门面 |
---|
JCL |
SLF4j |
jboss-logging |
日志实现 |
---|
Log4j |
Log4j2 |
Logback |
JUL |
选择日志框架,无非就是在门面中选一个,在实现中选一个。我们采用排除法:从日志实现来说,JUL虽说是官方的,但是日志功能上的实现太过于简陋,所以排除,jboss-logging自诞生就不是服务大众。
SLF4j 、 Log4j、Log4j2 、Logback的作者都是同一个人:ceki。
作者说明,Log4j太烂了,所以才写了Logback,所以排除Log4j。Log4j2从设计上来说很优秀,最大的问题就是太先进,很多框架对其支持程度有限,排除。毕竟作者相同,最后 选择SLF4j 和 Logback,这也是springboot用的日志框架。
日志门面 | 日志实现 |
---|---|
SLF4j | Logback |
4、Logback的配置
日志的级别:ERROR、WARN、INFO、DEBUG、TRACE
//org.slf4j.event下的日志级别枚举类
public enum Level{
ERROR(40,"ERROR"),
WARN(30,"WARN),
INFO(20,"INFO),
DEBUG(10,"DEBUG),
TRACE(0,"TRACE);
private int levelInt;
private String levelStr;
//
}
我们配置Logback需要配置两个文件,一个是application.properties,另一个是logback-spring.xml。
我们的需求区别info和error日志,每天产生一个日志文件。在resources目下下创建一个logback-spring.xml,里面可以详细配置我们的日志。
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!-- 写配置项 -->
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
%d - %msg%n
</pattern>
</layout>
</appender>
<!--配置info滚动日志-->
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--文件过滤掉其他日志级别的日志-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<!--<onMathch>DENY</onMathch>-->
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>
%msg%n
</pattern>
</encoder>
<!--按时间滚动-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--配置路径,以时间命名-->
<fileNamePattern>
/log/info.%d.log
</fileNamePattern>
</rollingPolicy>
</appender>
<!--配置error滚动日志-->
<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>
/log/error.%d.log
</fileNamePattern>
</rollingPolicy>
</appender>
<!--引用配置 -->
<root level="info">
<appender-ref ref="consoleLog"/>
<appender-ref ref="fileInfoLog"/>
<appender-ref ref="fileErrorLog"/>
</root>
</configuration>