Spring Boot 整合 logback 实现不同环境配置不同的日志级别

  《IDEA 创建简单的 SpringBoot 工程(含设置 HTTP Proxy 网络代理)》一文中介绍了 Idea 创建 Spring Boot 工程的步骤。Spring Boot 对各类日志组件进行了集成,使用起来非常便捷。实际在项目配置日志输出时,有些参数需要根据不同的部署环境来设置不同的取值,例如,生产环境日志输出级别为 INFO,开发环境日志输出级别为 DEBUG。本文以 logback 为例,举例说明如何配置实现不同的环境配置不同的参数。

方法一、读取 spring 配置文件中的值

  《Spring Boot 使用 spring.profiles.active 来区分不同环境配置》一文中,介绍了 Spring Boot 配置不同环境参数的方法,本文可以将不同环境的日志级别设置到不同环境的配置文件中,然后用 spring.profiles.active 来指定使用哪种环境的参数。
  logback.xml 早于 application.yml 加载,logback-spring.xml 晚于 application.yml 加载,如果 logback 配置需要使用 application.yml 中的属性,需要命名为 logback-spring.xml。
  本文中采用 logback-spring.xml 文件来读取配置文件 application-${profile}.properties 中的属性值。logback 需要使用 <springProperty> 标签才可使用 application.properties 中的属性,当配置文件中不存在属性值时,也可以设置默认值,示例如下所示。

<!-- 读取 application.properties 中的 log.level 属性,如果没有配置,默认 INFO -->
<springProperty name="LOG_LEVEL" source="log.level" defaultValue="INFO"/>

<logger name="com.test.svc" level="${LOG_LEVEL}" additivity="false">
        <appender-ref ref="ASYNC"/>
        <appender-ref ref="STDOUT"/>
    </logger>
方法二、加载指定的配置模块

  如下配置中,<springProfile name=“dev”> 中的 name,读取的是 spring.profiles.active 配置项的值,不设置默认为 default。
  如下两条的意思是,当 spring.profiles.active 配置为 dev 的时候,包裹在其中的部分配置被加载。当 spring.profiles.active 没有配置,或者配置为 default 的时候,包裹在其中的日志设置内容被加载。如果有其他环境 test、prod、release 等,仿照如此配置即可。name 后面还可以跟表达式。

<springProfile name="dev">
        <!-- 开发环境时激活 -->
        <logger name="com.test.svc" level="DEBUG" additivity="false">
            <appender-ref ref="ASYNC"/>
            <appender-ref ref="STDOUT"/>
        </logger>
</springProfile>
<springProfile name="default">
        <!-- 默认环境时激活 -->
        <logger name="com.test.svc" level="INFO" additivity="false">
            <appender-ref ref="ASYNC"/>
            <appender-ref ref="STDOUT"/>
        </logger>
</springProfile>
附录:附上一份较为完善的 logback-spring.xml 配置文件。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <springProperty name="log_dir" source="log_dir" defaultValue="D:/logs"/>
    <springProperty name="maxHistory" source="maxHistory" defaultValue="50"/>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 按天回滚 daily -->
            <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/debug.%i.log.zip</fileNamePattern>
            <!--文件达到最大 128MB 时会被切割和压缩 -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>128MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- 历史日志最大保留 50 天 -->
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %X{req.remoteHost} %X{req.requestURI} %X{req.queryString} [%X{logId}] %-5level %logger{36} - %msg%n
            </pattern>
        </encoder>
    </appender>
    <!-- 异步输出 -->
    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志,默认的,如果队列的 80% 已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能,默认值为256 -->
        <queueSize>256</queueSize>
        <!-- 添加附加的appender,最多只能添加一个 -->
        <appender-ref ref="FILE"/>
    </appender>
    <!-- 日志打印到控制台 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <springProfile name="dev">
        <!-- 开发环境时激活 -->
        <logger name="com.test.svc" level="DEBUG" additivity="false">
            <appender-ref ref="ASYNC"/>
            <appender-ref ref="STDOUT"/>
        </logger>
    </springProfile>
    <springProfile name="test">
        <!-- 测试环境时激活 -->
        <logger name="com.test.svc" level="INFO" additivity="false">
            <appender-ref ref="ASYNC"/>
            <appender-ref ref="STDOUT"/>
        </logger>
    </springProfile>

    <logger name="root" level="ERROR">
        <appender-ref ref="ASYNC"/>
    </logger>
</configuration>
参考文档:
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot中使用logback打印日志非常简单,只需要以下几个步骤: 1. 添加依赖 在pom.xml文件中添加logback的依赖 ```xml <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </dependency> ``` 2. 配置logback.xml 在src/main/resources下新建logback.xml文件,配置logback日志输出格式和输出位置等信息。 例如,以下是一个简单的logback.xml配置文件: ```xml <configuration> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <logger name="com.example" level="DEBUG"/> <root level="INFO"> <appender-ref ref="CONSOLE"/> </root> </configuration> ``` 其中,`appender`定义了日志输出的方式,这里使用的是`ConsoleAppender`,即输出到控制台;`encoder`定义了日志的输出格式;`logger`定义了日志输出的级别,这里设置为DEBUG级别;`root`定义了日志输出的根级别,这里设置为INFO级别。 3. 在应用程序中使用logback 在需要打印日志的类中使用logback即可,例如: ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MyService { private static final Logger logger = LoggerFactory.getLogger(MyService.class); public void doSomething() { logger.debug("Debug log"); logger.info("Info log"); logger.warn("Warn log"); logger.error("Error log"); } } ``` 这里使用了`LoggerFactory.getLogger()`方法获取Logger对象,然后使用`debug()`、`info()`、`warn()`和`error()`等方法输出不同级别日志信息。 以上就是在Spring Boot中使用logback打印日志的基本步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值