日志
tio-boot
并未与任何特定日志框架绑定,使用的是 slf4j
作为日志门面。
logback
笔者建议在开发 tio-boot
应用时使用 logback
作为日志实现,以下是其使用方法:
1. 引入 logback 依赖
在项目的 pom.xml
文件中添加 logback
依赖:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</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表示日期,%-6level:日志级别从左显示6个字符宽度,%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" />
<!-- show parameters for hibernate sql 专为 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" />
<!--myibatis log configure -->
<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 c.l.t.b.h.h.DefaultHttpRequestHandler.handler:232 - access:GET:/ok
生成的日志文件如下
- log.2024091006.0.log
- log.2024091007.0.log
配置说明:
配置文件是基于 Logback 框架的日志配置,包含了日志的输出格式、日志级别、日志文件的滚动策略以及特定模块的日志级别设置。下面详细解释每个部分的作用:
1. <?xml version="1.0" encoding="UTF-8" ?>
这是 XML 文件的声明,表示这个文件是以 UTF-8 编码的 XML 文档。
2. <configuration>
标签
这是 Logback 配置文件的根元素,包含了所有日志相关的配置。debug="false"
表示禁用调试模式,如果将其设为true
,Logback 将会输出更多的调试信息。
xmlns
和xsi:schemaLocation
定义了 Logback 的 XML 命名空间和模式文件的引用。
3. <property>
标签
<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">
: 定义了一个名称为STDOUT
的控制台日志输出器。<encoder>
: 定义了日志的编码器,这里使用PatternLayoutEncoder
,并引用前面定义的日志格式CONSOLE_LOG_PATTERN
。<pattern>
: 指定日志的输出格式。
5. 文件输出(<appender>
标签)
这个部分定义了日志文件的输出配置,使用了滚动策略:
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
: 定义了一个名称为FILE
的日志输出器,输出日志到文件,并使用滚动策略。<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
: 定义了一个基于文件大小和时间的滚动策略。<fileNamePattern>
: 定义日志文件的命名规则,日志文件的格式为log.日期小时.序号.log
,每小时生成一个新文件。<maxHistory>
: 定义日志文件保留的最大天数,这里为 180 天。<maxFileSize>
: 定义每个日志文件的最大大小,这里为 100MB。
6. Spring
和 Hibernate
特定模块的日志级别设置
这部分专门为 Spring 和 Hibernate 模块定制了日志级别,用于调试 SQL 语句和查询参数。
org.springframework
: 设置 Spring 框架的日志级别为info
。org.hibernate
: 为 Hibernate 的特定日志类设置了不同的日志级别,比如 SQL 语句日志为DEBUG
,查询参数为DEBUG
,SQL 绑定参数为TRACE
等。
7. MyBatis
和 SQL 相关日志配置
这部分为 MyBatis 和 SQL 连接相关类设置了日志级别。
com.apache.ibatis
: MyBatis 框架的日志级别设置为TRACE
。java.sql.Connection
,java.sql.Statement
,java.sql.PreparedStatement
: 对数据库连接和 SQL 语句执行的日志级别设置为DEBUG
,用于调试 SQL 执行的详细信息。
8. <root>
标签
<root>
标签定义了根日志记录器的日志级别和输出目标:
level="info"
: 设置根日志记录器的默认日志级别为info
,即只会输出info
及以上级别的日志(warn
,error
)。<appender-ref ref="STDOUT" />
: 将日志输出到控制台。<appender-ref ref="FILE" />
: 将日志输出到文件。
总结:
- 这个配置文件实现了日志的控制台和文件输出,并根据不同模块(如 Spring、Hibernate、MyBatis)的需要,调整了日志的输出级别。
- 日志文件按小时滚动,每个文件最大为 100MB,日志文件保留 180 天。
- 日志的输出格式通过
CONSOLE_LOG_PATTERN
统一定义,包括了日期、线程、日志级别、类名、方法名、行号和日志内容。