# logback-study
**Repository Path**: ChengSongyun/logback-study
## Basic Information
- **Project Name**: logback-study
- **Description**: 关于logback日志的课堂学习
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-09-18
- **Last Updated**: 2025-09-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# log日志
> 在java中有许多log日志框架,如logging、log、log4j、log4j2、logback
>
> 目前主流的是log4j2和logback
>
> 由于log日志框架太多,过于杂乱,所以出现了Slf4j来统一日志 API,解耦业务代码与日志实现
>
> - 为什么需要log日志:
> 因为System.out在控制台大量的输出时,会拖慢系统性能、无法持久保存等,log日志很好的解决了这些问题,它可以将日志输出到控制台、文件、数据库。log日志框架是可管控、可追溯、高性能、可拓展的日志系统
## logback日志
> logback日志框架的性能要高于大部分的日志框架
引入依赖
```xml
ch.qos.logback
logback-classic
1.5.18
```
### 一、xml配置文件配置logback并使用
#### logback.xml的初始模版
> 初始模版的配置文件是输出日志到控制台中
>
> 如果没有初始模版,可Setting -> Editor -> File and Code Templates添加模版,设置name为logback,Extension为xml,并将一下代码复制到其中
```xml
%d{yyyy-MM-dd HH:mm:ss} [%t] %p %C - %m%n
```
##### configuration标签
> 这个标签包含三个属性(直接使用默认值即可,不需要配置):
>
> - scan:值为true时,配置文件如果发生改变,将会自动重新加载(默认为true)
> - scanPeriod:设置监听配置文件的间隔时间,默认为60秒(注意:值要给单位)
> - debug:当设置为true时,将打印logback框架内部的日志信息,便于查看logback的运行状态*(默认为false)
```xml
...
```
##### appender标签
> 用于指定日志输出的目的地或者叫做输出类型
>
> 可以输出到控制台、文件、数据库,也可以同时输出到多个地方
>
> 这个标签包含两个属性(默认是输出到控制台):
>
> - name:指定标签的name,任意值,以便后面引用
> - class:指定包名+类名,用来指定输出目的地
> - ch.qos.logback.core.ConsoleAppender:指定输出目的地为控制台
> - ch.qos.logback.core.FileAppender:指定输出目的地为文件
> - ch.qos.logback.core.rolling.RollingFileAppender:输出目的地为文件,并为滚动日志
```xml
...
```
##### encoder标签
> 在该标签内设置日志的编码和输出格式
>
> 默认就是UTF-8编码
##### pattern标签
> 在该标签中指定日志的输出格式
>
> - %d:指定日志输出的日期格式
> - %t:显示当前执行日志输出的线程名称
> - %p:显示日志级别
> - %C:输出日志所在的类的完整类名
> - %m:日志消息内容
> - %n:换行符
```xml
%d{yyyy-MM-dd HH:mm:ss} [%t] %p %C - %m%n
```
##### root标签
> 配置logger的根,并指定输出的级别
>
> 输出级别(从小到大):
>
> - TRACE:最详细的日志级别,用于追踪程序的每一步细节,包括方法调用、参数传递、内部状态变化等
> - DEBUG:用于输出程序调试信息,帮助开发者定位问题,通常包含关键变量的值等
> - INFO:一般用于记录对数据库的操作,如:删除数据、添加数据,一般在应用上线使用
> - WARN:表示程序出现了 “不影响核心功能,但需要注意的异常情况”,可能是潜在问题的前兆
> - ERROR:表示程序发生了 “影响功能正常执行的错误”,通常是未处理的异常或关键流程失败
>
> 注意:在日志输出时,只会输出当前级别以及大于该级别的日志
> 小于该级别的日志将会被屏蔽(例如:当前级别为debug,那么trace级别的日志将会被屏蔽)
```xml
```
#### 日志输出到文件+控制台中
> 将日志输出到控制台中,当我们关闭程序后重新启动,之前的日志都会被清空,以便我们查看,我们可以将日志输出到文件中
```xml
%d{yyyy-MM-dd HH:mm:ss} [%t] %p %C - %m%n
ch02/logs/test.log
true
%d{yyyy-MM-dd HH:mm:ss} [%t] %p %C - %m%n
```
> 当我需要输出到多个目的地时,我们可以配置多一个appender,并在root中进行绑定
##### appender标签
> 当我们需要指定目的地为文件时,我们需要将appender标签的**class属性修改为ch.qos.logback.core.FileAppender**,并修改合适的name
```xml
...
```
##### file标签
> 该标签用来指定日志的路径和文件名,可以是相对路径,也可以是绝对路径
>
> 当指定路径的文件不存在时将会自动创建
```xml
ch02/logs/test.log
```
##### append标签
> 改标签支持两个值(一般使用true):
>
> - true:当值设置为true表示每次有新日志将追加到日志文件末尾
> - false:当值设置为false表示先清空原有的日志信息,只保留最新的日志
```xml
true
```
#### 文件的滚动日志
> 当我们一直往一个日志文件中追加新日志时,过多的日志信息会使我们阅读不易,等问题
>
> 滚动日志就是设置滚动策略,达到某种条件时创建一个新的日志文件存储日志
>
> 根据日期每天创建一个新的日志文件或限制文件大小来创建新的日志文件
```xml
%d{yyyy-MM-dd HH:mm:ss} [%t] %p %C - %m%n
ch03/logs/%d{yyyy-MM-dd}.log
30
true
%d{yyyy-MM-dd HH:mm:ss} [%t] %p %C - %m%n
```
##### appender标签
> 使用滚动日志,我们需要修改class值为ch.qos.logback.core.rolling.RollingFileAppender
```xml
```
##### rollingPolicy标签
> 用于配置滚动策略
>
> class属性为ch.qos.logback.core.rolling.TimeBasedRollingPolicy表示按照日期每天创建一个日志文件
```xml
...
```
##### fileNamePattern标签
> 用于指定滚动生成的文件名,这里以日期作为文件名
```xml
ch03/logs/%d{yyyy-MM-dd].log
```
##### maxHistory标签
> 指定保留归档文件的最大数量,这里只保留最近30天的日志文件
```xml
30
```
#### 使用logback
##### 方式一
> 创建一个Slf4j的Logger对象
```java
public class Main{
private final static Logger log = LoggerFactory.getLogger(Main.class)
public static void main(String[] args) {
log.trace("trace");
log.debug("debug");
log.info("info");
log.warn("warn");
log.error("error");
}
}
```
##### 方式二
> 当创建Slf4j对象过于麻烦时,我们可以引入lombok依赖并在类上使用@Slf4j注解
```java
@Slf4j
public class Main {
public static void main(String[] args) {
log.trace("trace");
log.debug("debug");
log.info("info");
log.warn("warn");
log.error("error");
}
}
```
### 二、springboot直接使用logback
#### 使用日志
> 在创建springboot项目时勾选lombok,直接在需要使用logback的类上添加@Slf4j注解即可
```java
@SpringBootApplication
@Slf4j
public class Ch02Application {
// private final static Logger log = LoggerFactory.getLogger(Ch02Application.class);
public static void main(String[] args) {
SpringApplication.run(Ch02Application.class, args);
for (Integer i = 0; i < 10; i++) {
log.info("hello.......");
}
}
}
```
> 注意:可以能会有版本问题,可以给lombok添加版本号
#### 配置日志
> 我们可以在application.properties配置文件中配置logback的相关配置
```properties
spring.application.name=ch02
#日志相关配置
#设置控制台的日志输出格式
#logging.pattern.console = %d{yyyy-MM-dd HH:mm:ss} [%t] %p %C - %m%n
#设置文件的日志输出格式
#logging.pattern.file = %d{yyyy-MM-dd HH:mm:ss} [%t] %p %C - %m%n
#设置日志文件的输出位置和文件名(路径+文件名)
logging.file.name=ch02/logs/test.log
#设置全局日志的输出级别
logging.level.root = info
#配置滚动日志
#配置文件名
logging.logback.rollingpolicy.file-name-pattern=${LOG_FILE}.%d{yyyy-MM-dd}.%i.log
#当日志达到10MB时将新建一个日志文件
logging.logback.rollingpolicy.max-file-size=10MB
#保留最近7天的日志文件
logging.logback.rollingpolicy.max-history=7
#一直保持彩色日志的输出(单元测试生效)
spring.output.ansi.enabled=always
```