SpringBoot默认配置日志文件
Spring Boot默认使用Logback,但你也可以选择使用Log4j2。
1. 使用Logback(默认配置)
Logback是一个高效、可扩展的日志框架,广泛应用于Java应用程序中,特别是Spring Boot项目。它由log4j的创始人设计,提供了更为强大的功能和更好的性能。下面详细探讨Logback的一些高级配置选项,包括但不限于设置日志等级、日志颜色以及自定义日志格式。
Spring Boot默认使用Logback作为日志框架,其配置文件为logback-spring.xml
,放置在src/main/resources
目录下。
1.1 基础配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 定义日志输出格式 -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 文件输出 -->
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>logs/app.log</file>
<append>true</append>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 全局日志级别设置 -->
<root level="INFO">
<appender-ref ref="STDOUT"/> <!-- 控制台 -->
<appender-ref ref="FILE"/> <!-- 文件 -->
</root>
<!-- 特定包或类的日志级别定制 -->
<logger name=" com.houry.top" level="DEBUG">
<appender-ref ref="FILE"/> <!-- 只输出到文件 -->
</logger>
</configuration>
运行项目之后可以在目录中看到一个logs的文件夹,里面包含了自己设置的app.log的文件:
1.2 配置颜色
引入Maven配置文件:
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.4</version>
</dependency>
这个配置中,我们用LogstashEncoder
替换了原本的PatternLayoutEncoder
,并添加了<colorScheme>
元素来启用颜色输出,使用的是ClassicColorScheme
,这是最常用的方案,它会给不同级别的日志分配不同的颜色。这样,控制台输出就会带有颜色了,有助于更直观地识别日志级别。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 定义日志输出格式 -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
<!-- 控制台输出,使用LogstashEncoder并开启颜色 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<!-- 开启颜色输出 -->
<colorScheme class="net.logstash.logback.color_scheme.ClassicColorScheme"/>
</encoder>
</appender>
<!-- 文件输出保持不变 -->
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>logs/app.log</file>
<append>true</append>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 全局日志级别设置 -->
<root level="INFO">
<appender-ref ref="STDOUT"/> <!-- 控制台 -->
<appender-ref ref="FILE"/> <!-- 文件 -->
</root>
<!-- 特定包或类的日志级别定制 -->
<logger name="com.houry.top" level="DEBUG">
<appender-ref ref="FILE"/> <!-- 只输出到文件 -->
</logger>
</configuration>
1.3 自定义格式示例
在您的配置中,您已经定义了一个自定义的日志格式LOG_PATTERN
并应用于文件日志输出,同时也使用了LogstashEncoder
来格式化控制台输出。如果您希望进一步自定义控制台输出的格式,或者在文件输出中也采用类似的自定义格式,可以通过调整或直接在<encoder>
内定义相应的模式来实现。不过,请注意,LogstashEncoder
主要用于生成JSON格式的日志,与传统的模式化字符串不同。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 控制台输出,使用LogstashEncoder并开启颜色 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<!-- 添加自定义字段 -->
<customFields>{"output":"console", "environment":"dev"}</customFields>
<!-- 开启颜色输出 -->
<colorScheme class="net.logstash.logback.color_scheme.ClassicColorScheme"/>
</encoder>
</appender>
<!-- 文件输出,同样使用LogstashEncoder -->
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>logs/app.log</file>
<append>true</append>
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<!-- 添加自定义字段 -->
<customFields>{"output":"file", "environment":"dev"}</customFields>
</encoder>
</appender>
<!-- 全局日志级别设置 -->
<root level="INFO">
<appender-ref ref="STDOUT"/> <!-- 控制台 -->
<appender-ref ref="FILE"/> <!-- 文件 -->
</root>
<!-- 特定包或类的日志级别定制 -->
<logger name="com.houry.top" level="DEBUG">
<appender-ref ref="FILE"/> <!-- 输出到文件 -->
</logger>
</configuration>
1.4 设置日志滚动策略
使用RollingFileAppender
替换原有的FileAppender
,这允许您根据时间、文件大小或两者来自动滚动日志文件。下面是一个示例,展示了如何添加基于时间和文件大小的日志滚动策略:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 控制台输出,使用LogstashEncoder并开启颜色 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<!-- 添加自定义字段 -->
<customFields>{"output":"console", "environment":"dev"}</customFields>
<!-- 开启颜色输出 -->
<colorScheme class="net.logstash.logback.color_scheme.ClassicColorScheme"/>
</encoder>
</appender>
<!-- 文件输出,增加滚动策略 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按天滚动,保留30天的日志 -->
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 全局日志级别设置 -->
<root level="INFO">
<appender-ref ref="STDOUT"/> <!-- 控制台 -->
<appender-ref ref="FILE"/> <!-- 文件 -->
</root>
<!-- 特定包或类的日志级别定制 -->
<logger name="com.houry.top" level="DEBUG">
<appender-ref ref="FILE"/> <!-- 输出到文件 -->
</logger>
</configuration>