tio-boot 整合 Logback
tio-boot
并未绑定任何特定的日志框架,而是使用 slf4j
作为日志门面。本文将介绍如何在开发 tio-boot
应用时集成 Logback
作为日志实现。
Logback
建议在开发 tio-boot
应用时使用 Logback
作为日志实现。以下是集成 Logback
的详细步骤:
1. 引入 Logback 依赖
在项目的 pom.xml
文件中添加 Logback
依赖:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.4.12</version>
</dependency>
2. 配置 logback.xml
在项目的 resources
目录下创建 logback.xml
配置文件,内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<configuration debug="false" xmlns="http://ch.qos.logback/xml/ns/logback" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ch.qos.logback/xml/ns/logback https://raw.githubusercontent.com/enricopulatzo/logback-XSD/master/src/main/xsd/logback.xsd
http://ch.qos.logback/xml/ns/logback ">
<!-- 定义日志文件的存储地址,避免在 Logback 的配置中使用相对路径 -->
<property name="LOG_HOME" value="logs" />
<!-- 格式化输出:%d 表示日期,[%thread] 输出线程名称,%-6level 表示日志级别占6个字符宽度,%logger{1}.%M:%L 表示类名、方法名和行号,%m 表示日志消息,%n 是换行符 -->
<property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-6level %logger{1}.%M:%L - %m%n" />
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 按照每小时生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 日志文件输出的文件名,包含日期和小时 -->
<fileNamePattern>${LOG_HOME}/log.%d{yyyyMMddHH}.%i.log</fileNamePattern>
<!-- 日志文件保留天数 -->
<maxHistory>180</maxHistory>
<!-- 每个日志文件的最大大小 -->
<maxFileSize>100MB</maxFileSize>
</rollingPolicy>
</appender>
<!-- Spring 框架日志级别设置 -->
<logger name="org.springframework" level="info" />
<!-- Hibernate 日志级别设置,显示 SQL 语句和绑定参数 -->
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" />
<logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" />
<logger name="org.hibernate.SQL" level="DEBUG" />
<logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
<logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />
<!-- MyBatis 和 SQL 相关日志配置 -->
<logger name="com.apache.ibatis" level="TRACE" />
<logger name="java.sql.Connection" level="DEBUG" />
<logger name="java.sql.Statement" level="DEBUG" />
<logger name="java.sql.PreparedStatement" level="DEBUG" />
<!-- 根日志记录器的日志级别和输出目标 -->
<root level="info">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
日志输出示例
控制台输出的日志示例如下:
2024-09-10 05:47:00.022 [tio-group-76] INFO DefaultHttpRequestHandler.handler:232 - access:GET:/ok
生成的日志文件名称示例:
log.2024091006.0.log
log.2024091007.0.log
配置说明
该配置文件基于 Logback 框架,包含了日志的输出格式、日志级别、日志文件的滚动策略以及特定模块的日志级别设置。以下是各部分的详细说明:
1. XML 声明
<?xml version="1.0" encoding="UTF-8" ?>
表示这是一个使用 UTF-8 编码的 XML 文档。
2. <configuration>
标签
这是 Logback 配置文件的根元素,包含所有日志相关的配置。
debug="false"
:禁用调试模式。如果设为true
,Logback 将输出更多调试信息。xmlns
和xsi:schemaLocation
:定义 Logback 的 XML 命名空间和模式文件的位置。
3. <property>
标签
用于定义可复用的变量,便于配置管理和维护。
LOG_HOME
:定义日志文件的存储目录为logs
目录。CONSOLE_LOG_PATTERN
:定义日志的输出格式,主要用于控制台和文件输出。%d{yyyy-MM-dd HH:mm:ss.SSS}
:日志的日期时间,精确到毫秒。[%thread]
:输出当前线程的名称。%-6level
:日志级别,左对齐,占 6 个字符宽度。%logger{1}
:输出日志发出者的名字,通常是类名,{1}
表示只显示最后一级包名或类名。%M
:输出日志方法的名称。%L
:输出日志所在的行号。%m
:输出日志内容。%n
:换行符。
4. 控制台输出 (<appender>
标签)
定义了控制台日志输出的配置:
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
name="STDOUT"
:日志输出器的名称。class="ch.qos.logback.core.ConsoleAppender"
:指定为控制台输出器。<encoder>
:定义日志的编码器,使用PatternLayoutEncoder
并应用前面定义的日志格式。
5. 文件输出 (<appender>
标签)
定义了日志文件的输出配置,使用滚动策略:
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/log.%d{yyyyMMddHH}.%i.log</fileNamePattern>
<maxHistory>180</maxHistory>
<maxFileSize>100MB</maxFileSize>
</rollingPolicy>
</appender>
name="FILE"
:日志输出器的名称。class="ch.qos.logback.core.rolling.RollingFileAppender"
:指定为文件输出器,并使用滚动策略。<rollingPolicy>
:定义基于时间和文件大小的滚动策略。fileNamePattern
:日志文件的命名规则,格式为log.日期小时.序号.log
,每小时生成一个新文件。maxHistory
:日志文件保留的最大天数,此处为 180 天。maxFileSize
:每个日志文件的最大大小,此处为 100MB。
6. Spring 和 Hibernate 特定模块的日志级别设置
针对特定模块调整日志级别,便于调试:
Spring 框架:
<logger name="org.springframework" level="info" />
设置 Spring 框架的日志级别为
info
。Hibernate:
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" /> <logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" /> <logger name="org.hibernate.SQL" level="DEBUG" /> <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" /> <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />
设置 Hibernate 的特定日志类的日志级别,用于显示 SQL 语句和查询参数。
7. MyBatis 和 SQL 相关日志配置
针对 MyBatis 和 SQL 连接相关类设置日志级别:
<logger name="com.apache.ibatis" level="TRACE" />
<logger name="java.sql.Connection" level="DEBUG" />
<logger name="java.sql.Statement" level="DEBUG" />
<logger name="java.sql.PreparedStatement" level="DEBUG" />
com.apache.ibatis
:MyBatis 框架的日志级别设置为TRACE
。java.sql.Connection
、java.sql.Statement
、java.sql.PreparedStatement
:数据库连接和 SQL 语句执行的日志级别设置为DEBUG
,用于调试 SQL 执行的详细信息。
8. 根日志记录器 (<root>
标签)
定义根日志记录器的日志级别和输出目标:
<root level="info">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
level="info"
:设置根日志记录器的默认日志级别为info
,即只输出info
及以上级别的日志(如warn
、error
)。<appender-ref ref="STDOUT" />
:将日志输出到控制台。<appender-ref ref="FILE" />
:将日志输出到文件。
总结
- 输出方式:该配置实现了日志的控制台和文件双重输出。
- 滚动策略:日志文件按小时滚动,每个文件最大为 100MB,日志文件保留 180 天。
- 输出格式:通过
CONSOLE_LOG_PATTERN
统一定义日志输出格式,包括日期、线程、日志级别、类名、方法名、行号和日志内容。 - 模块级别设置:针对 Spring、Hibernate、MyBatis 等特定模块,调整了日志输出级别,以便更好地调试和监控应用。
通过上述配置,tio-boot
应用能够高效、灵活地管理日志输出,满足开发和运维的需求。