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>

image-20240623172337808

运行项目之后可以在目录中看到一个logs的文件夹,里面包含了自己设置的app.log的文件:

image-20240623174408704

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>

image-20240623182658763

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>