前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot日志详解使用include

SpringBoot日志详解使用include

作者头像
半月无霜
发布2024-02-04 08:03:56
2210
发布2024-02-04 08:03:56
举报
文章被收录于专栏:半月无霜

SpringBoot日志详解使用include

一、介绍

前段时间,公司让我整改SpringBoot日志的配置,我改的老痛苦了。

一共有7个微服务,其中每一个微服务各自都有4个这样logback-spring-{active}.xml文件。

正好我看过SpringBoot中是怎么写的,给大家截图看下

既然如此,我们也可以通过include标签来进行编写。


哦对了,SpringBoot使用的logback日志,里面的含义代表什么,我就不详细讲了。

具体可以看我的这边文章,SpringBoot日志配置详情 | 半月无霜 (banmoon.top)

二、配置

这边创建两份基础文件,分别是

  • banmoon-logback-defined.xml:里面定义了一些参数
  • banmoon-logback-append.xml:里面定义了一些输出
  • banmoon-logback.xml:将上面的两个文件引入整合,并加上了一些日志等级的配置

看看文件所在的目录,都在scr/main/java的包内

image-20240203153406212
image-20240203153406212

1)banmoon-logback-defined.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<included>
    <!-- 获取该应用的名称 -->
    <springProperty scope="context" name="APPLICATION_NAME" source="spring.application.name"/>

    <!-- 定义日志输出的路径 -->
    <springProperty scope="context" name="LOG_PATH_SPRING" source="logging.path"/>
    <if condition='isNull("LOG_PATH_SPRING")'>
        <then>
            <property name="LOG_PATH" value="./logs/${APPLICATION_NAME}"/>
        </then>
        <else>
            <property name="LOG_PATH" value="${LOG_PATH_SPRING}"/>
        </else>
    </if>

    <!-- 定义日志输出格式和颜色 -->
    <property name="LOG_FORMAT_ONE" value="%red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %blue([%-5level]) %cyan(%logger{36}:%line) %msg%n"/>
    <property name="LOG_FORMAT_TWO" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-5level] %logger{36}:%line %msg%n"/>

</included>

2)banmoon-logback-append.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<included>
    <!-- 输出到控制台 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 日志输出编码格式化 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>${LOG_FORMAT_ONE}</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 时间日期滚动日志 -->
    <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 输出的日志远程,当天的日志名称 -->
        <file>${LOG_PATH}/info.log</file>
        <!-- 策略配置 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 保存归纳的日志 -->
            <fileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}/info_%i.log</fileNamePattern>
            <!-- 日志文件最大尺寸 -->
            <maxFileSize>10MB</maxFileSize>
            <!--日志文件保留天数-->
            <MaxHistory>5</MaxHistory>
        </rollingPolicy>
        <!-- 日志输出编码格式化 -->
        <encoder>
            <pattern>${LOG_FORMAT_TWO}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 时间日期滚动日志,只记录error级别的日志 -->
    <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 输出的日志远程,当天的日志名称 -->
        <file>${LOG_PATH}/error.log</file>
        <!-- 策略配置 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 保存归纳的日志 -->
            <fileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}/error_%i.log</fileNamePattern>
            <!-- 日志文件最大尺寸 -->
            <maxFileSize>10MB</maxFileSize>
            <!--日志文件保留天数-->
            <MaxHistory>5</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${LOG_FORMAT_TWO}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- 过滤器,日志级别过滤,仅输出error日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 指定输出的日志等级,root代表工程所有包 -->
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE_INFO"/>
        <appender-ref ref="FILE_ERROR"/>
    </root>

    <!-- 指定输出的日志等级,指定包路径,此包下都以设置的等级输出 -->
    <!-- additivity表示日志是否向上传递,如果为true,日志在root可能会再次打印 -->
    <logger name="com.banmoon.**.mapper" level="DEBUG" additivity="false">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE_INFO"/>
    </logger>

</included>

3)banmoon-logback.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<included>
    <!-- 引入定义参数 -->
    <include resource="com/banmoon/logging/banmoon-logback-defined.xml"/>

    <!-- 引入日志输出定义 -->
    <include resource="com/banmoon/logging/banmoon-logback-append.xml"/>

    <!-- 本地环境,开发环境,测试环境 -->
    <springProfile name="local | dev | test">
        <logger name="com.banmoon" level="DEBUG" additivity="false">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="FILE_INFO"/>
        </logger>
    </springProfile>

    <!-- 生产环境 -->
    <springProfile name="prod">
        <logger name="com.banmoon" level="INFO" additivity="false">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="FILE_INFO"/>
        </logger>
    </springProfile>

</included>

4)还有几点要说明的

由于我放的位置在scr/main/java中,注意maven编译后,文件还存不存在

上面这三份文件的root标签,是included

还没有结束,我们要在SpringBoot项目中用起来,可以这样引入

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds" debug="false">
    <include resource="com/banmoon/logging/banmoon-logback.xml"/>
</configuration>

由于banmoon-logback-defined.xml中使用了if标签,请确保引入了下面这个依赖

代码语言:javascript
复制
<dependency>
    <groupId>org.codehaus.janino</groupId>
    <artifactId>janino</artifactId>
</dependency>

上面的设置好了后,我们就可以正常使用了

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SpringBoot日志详解使用include
    • 一、介绍
      • 二、配置
        • 1)banmoon-logback-defined.xml
        • 2)banmoon-logback-append.xml
        • 3)banmoon-logback.xml
        • 4)还有几点要说明的
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档