在 Java (Spring Boot)应用中, 经常使用 LogBack 日志框架来记录日志,也可以配合 Lombok 中的 @Slf4j 注解来简化代码。 为定制日志的输出,通常会在项目中配置一个名为: logback.xml 的配置文件。

pom.xml 文件

最基本的情况,需要一个依赖库

1
2
3
4
5
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.2</version>
</dependency>

如果配合 lombok 一起使用,则可以定义两个依赖库

1
2
3
4
5
6
7
8
9
10
11
12
<!-- Lombok and Log -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.14</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.2</version>
</dependency>
<!-- End: Lombok and Log -->

logback.xml 配置文件

在 maven 项目中,通常将 logback.xml 文件放置于项目的 src/main/resources 目录中。下面展示一些基本的内容,以便于大家快速的构建自己的项目日志配置

最基础的配置:

1
2
3
4
5
6
7
8
9
10
11
<configuration>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
</layout>
</appender>
<root>
<level value="debug"/>
<appender-ref ref="stdout"/>
</root>
</configuration>

在最基础的配置中,我们简单的将日志输出到屏幕上。

如果我们需要把日志记录在本地文件中,通常需要加上如下的配置信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<substitutionProperty name="logbase" value="#123;user.dir}/logs/ "/>
<!-- 文件输出日志 (文件大小策略进行文件输出,超过指定大小对文件备份) -->
<appender name="logfile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<Encoding>UTF-8</Encoding>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<File>#123;logbase}%d{yyyy-MM-dd}.log</File>
<FileNamePattern>#123;logbase}.%d{yyyy-MM-dd}.log.zip
</FileNamePattern>
</rollingPolicy>
<triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>2MB</MaxFileSize>
</triggeringPolicy>
<layout class="ch.qos.logback.classic.html.HTMLLayout">
<pattern>%date%level%thread%10logger%file%line%msg</pattern>
</layout>
</appender>

提上配置中,首先声明了一个名为 logbase 的变量,指明日志文件存放的目录。为了防止单个日志文件太大,声明了日志文件的滚动方式。

加上文件配置后,完整的 logback.xml 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<configuration>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
</layout>
</appender>

<substitutionProperty name="logbase" value="#123;user.dir}/logs/ "/>
<!-- 文件输出日志 (文件大小策略进行文件输出,超过指定大小对文件备份) -->
<appender name="logfile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<Encoding>UTF-8</Encoding>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<File>#123;logbase}%d{yyyy-MM-dd}.log</File>
<FileNamePattern>#123;logbase}.%d{yyyy-MM-dd}.log.zip
</FileNamePattern>
</rollingPolicy>
<triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>2MB</MaxFileSize>
</triggeringPolicy>
<layout class="ch.qos.logback.classic.html.HTMLLayout">
<pattern>%date%level%thread%10logger%file%line%msg</pattern>
</layout>
</appender>

<root>
<level value="debug"/>
<appender-ref ref="stdout"/>
<appender-ref ref="logfile"/>
</root>
</configuration>

当然,我们也可以配置把日志写到数据库中,以下展示以 MySQL 数据库为日志存储时的配置:

1
2
3
4
5
6
7
8
<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
<driverClass>com.mysql.jdbc.Driver</driverClass>
<url>jdbc:mysql://localhost:3306/logs</url>
<user>logUser</user>
<password>123456</password>
</connectionSource>
</appender>
TAGS