# logback 介绍
Logback是由log4j创始人设计的一个开源日志组件。LogBack被分为3个组件,logback-core, logback-classic 和 logback-access。
```
1. logback-core:提供了LogBack的核心功能,是另外两个组件的基础。
2. logback-classic:实现了Slf4j的API,所以当想配合Slf4j使用时,需要引入logback-classic。
3. logback-access:为了集成Servlet环境而准备的,可提供HTTP-access的日志接口。
Slf4j:简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。
在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统。
```
编译期间,完成slf4j的绑定已经logback配置文件的加载。slf4j会在classpath中寻找org/slf4j/impl/StaticLoggerBinder.class(会在具体的日志框架如log4j、logback等中存在),找到并完成绑定;同时,logback也会在classpath中寻找配置文件,先找logback.configurationFile、没有则找logback.groovy,若logback.groovy也没有,则找logback-test.xml,若logback-test.xml还是没有,则找logback.xml,若连logback.xml也没有,那么说明没有配置logback的配置文件,那么logback则会启用默认的配置(日志信息只会打印在控制台)。
# logback 使用步骤
1.引入slf4j、logback相关依赖
```
org.slf4j
slf4j-api
${slf4j.version}
ch.qos.logback
logback-core
${logback.version}
ch.qos.logback
logback-classic
${logback.version}
ch.qos.logback
logback-access
${logback.version}
```
2. 添加配置文件 [logback.xml](logback.xml)
```
System.out
${pattern}
${LOG_DIR}/sql_info.log
${LOG_DIR}/sql_info_%d{yyyy-MM-dd}.log.%i.gz
20MB
10
${pattern}
INFO
ACCEPT
DENY
${LOG_DIR}/sql_error.log
${LOG_DIR}/sql_error_%d{yyyy-MM-dd}.log.%i.gz
20MB
10
${pattern}
ERROR
ACCEPT
DENY
${LOG_DIR}/info.log
${LOG_DIR}/info.%d{yyyy-MM-dd}.log
[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%thread] [%logger:%line]--%mdc{client} %msg%n
INFO
ACCEPT
DENY
%d{yyyyMMdd:HH:mm:ss.SSS}%thread%-5level%F{32}%M%L%msg
${LOG_DIR}/test.html
info
```
# 其他
logback以下优点总结:
- 内核重写、测试充分、初始化内存加载更小,这一切让logback性能和log4j相比有诸多倍的提升
- logback非常自然地直接实现了slf4j,这个严格来说算不上优点,只是这样,再理解- slf4j的前提下会很容易理解logback,也同时很容易用其他日志框架替换logbac
- logback有比较齐全的200多页的文档
- logback当配置文件修改了,支持自动重新加载配置文件,扫描过程快且安全,它并不需要另外创建一个扫描线程
- 支持自动去除旧的日志文件,可以控制已经产生日志文件的最大数量
# 参考
1. logback最佳实践 . https://jianshu.com/p/b3dedb8fb61e
2. logback官网 . https://logback.qos.ch/
3. slf4j 官网 . https://www.slf4j.org/