Spring Boot2 开启系统日志(3)- 在Logback中配置日志
Logback的配置文件通常命名为logback.xml,它控制了日志记录方式、级别和输出目标。在Spring Boot项目中,可以将logback.xml文件放置在src/main/resources目录下。
1. Logback 配置文件的基本结构
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property />
<contextName> </contextName>
<appender> </appender>
<logger> </logger>
<root> </root>
</configuration>
2. Logback 配置文件标签含义
2.1. configuration 根节点
包含以下属性:
- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 其他配置省略-->
</configuration>
2.2. property
设置一个变量。属性有name和value,name变量的名称,value变量的值。定义变量之后,后面配置中可以使用${变量name}来获取。
2.3. contextName
标识一个上下文名称,默认为default,一般用不到
2.4. appender
格式化日志输出,可以配置为文件、数据库、邮件等不同的输出目标。有两个属性name和class,class用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。
这个节点很重要,通常的日志文件需要定义三个appender,分别是控制台输出,常规日志文件输出,异常日志文件输出。
appender有四种类型:
- ConsoleAppender(控制台日志)
- FileAppender(文件日志): 将日志写入一个指定的文件中,当文件达到一定大小或时间点时,它会被新的日志文件所替代。需要指定日志文件的最大大小和文件数量等参数。
- RollingFileAppender(滚动文件日志): 在日志文件达到指定大小时,创建新的日志文件继续写入,新创建的日志文件的名称会加上一个时间戳或索引号,以便区分。需要指定日志文件的最大大小和保留数量,当超过这个数量时,最早创建的日志文件会被自动删除。还可以生成一个索引文件,用于记录所有滚动日志文件的名称和位置信息。这样可以在需要查看历史日志时,快速定位到需要的日志文件。
- AsyncAppender(异步日志):通过线程池异步处理写入磁盘的日志。异步输出的原理是:先写入到缓冲区,当缓冲区满了或者达到一定时间,再把缓冲区的数据一次性写入磁盘,这样可以减少磁盘IO操作,提高性能。
appender内的有一个子标签encoder,有两个作用,一是把日志信息转换成字节数组,二是把字节数组写入到输出流,可以用于定义输出日志内容的编码格式、日志格式;其中endcoder内的子标签charset用于定义输出日志内容的编码格式,子标签pattern用于定义输出日志的具体格式;
- %date:表示日期
- %thread:表示线程名
- %-5level:表示级别从左显示 5 个字符宽度
- %logger{36}:表示 Logger 名字最长 36 个字符
- %msg:表示日志消息
- %n:换行符
- %line:表示当前日志事件的行号
<!-- 控制台的标准输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<charset>UTF-8</charset>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
2.5. logger
可选节点,用来指明具体的包或类的日志输出级别,它将会覆盖root的输出级别。 该节点有几个重要的属性如下:
- name:必写属性,指定具体包或类,被指定的包或类中的日志输出将遵从该logger规定配置;
- level:可选,指定日志输出级别,该级别将覆盖root配置的输出级别;
- addtivity:可选,默认为true,将此logger的信息向上级传递,将有root节点定义日志打印。如果设置为false,将不会上传,此时需要定义一个appender-ref 节点才会输出。
- appender-ref:引用的appender,引用后将实现appender中定义的行为。一个logger可以有多个引用,互不影响。
2.6. root
这是一个必须节点,用来指定基础的日志级别,只有一个level属性,默认值是DEBUG。
3. Logback 配置实例
以下是一个基本的logback.xml配置示例:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 设置根日志级别为INFO,继承给所有logger -->
<root level="INFO">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
- appender: 定义使用控制台输出。
- encoder: 定义了日志的输出格式,上述示例显示了时间戳、线程、日志级别、Logger名称和消息。
- root: 定义了日志级别是INFO,表示只记录INFO级别及以上的日志消息。
pattern 配置的编码中,对应符号的含义如下
- %d{HH:mm:ss.SSS}——日志输出时间
- %thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用
- %-5level——日志级别,并且使用5个字符靠左对齐
- %logger ——日志输出者的名字
- %msg——日志消息
- %n——平台的换行符
配置日志级别
Logback允许您为不同的Logger定义不同的日志级别。例如,如果您想记录某个包下的日志级别为DEBUG级别及以上的日志消息,可以采用以下方式配置:
<logger name="com.example.myapp" level="DEBUG" />
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具