logback和sleuth的配置和使用(SpringBoot)

本文介绍了如何在SpringBoot应用中整合Logback和Sleuth,实现日志管理和分布式追踪。首先,通过添加相关依赖引入Logback和Sleuth。接着,在`application.yml`中配置日志级别和路径。然后,详细展示了`logging.xml`配置文件的设置,包括控制台输出、文件滚动策略以及不同级别的日志记录。此外,还特别提到了针对SQL操作的日志记录和不同环境(测试、生产)的日志输出策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

Logback是SpringBoot内置的日志处理框架
sleuth 可以解决分布式系统的追踪问题


使用步骤

1.引入库

代码如下(示例):


		<!--logback配置-->
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-core</artifactId>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
		</dependency>

		<!--引入sleuth日志链路追踪系统-->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-sleuth</artifactId>
			<version>${spring-cloud-alibaba.version}</version>
		</dependency>

2.application.yml 中的配置:

logging:
  level:
    root: info
  config: classpath:logging.xml
  file:
    path: ./logs/core1/
    name: coreApplication.log

3.xml配置文件

在resource文件夹下新建logging.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration>

<configuration debug="false">
    <!--1.从yml中获取配置信息
    logging.path:日志路径
    logging.level:日志级别
    spring.application.name:应用名称
    logging.filename:日志名称
    -->
    <springProperty scope="context" name="path" source="logging.file.path"/>
    <springProperty scope="context" name="level" source="logging.level"/>
    <springProperty scope="context" name="spring.application.name" source="spring.application.name"
                    defaultValue="loan-mgmt"/>
    <springProperty scope="context" name="filename" source="logging.file.name"/>


    <jmxConfigurator/>

    <conversionRule conversionWord="short" converterClass="com.asd.logging.ShortLoggerConverter"/>
    <conversionRule conversionWord="count" converterClass="com.asd.logging.CountingConverter"/>
    <!-- 2.操作系统标准输出,再用java -jar启动时指定>> 输出到某一位置 -->
    <!-- 2.1 其中TraceId为某一请求在分布式系统中的唯一Id,SpanId为在分布式中某一节点的唯一Id-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} %5level - [%X{X-B3-TraceId:-},%X{X-B3-SpanId:-}]
                - [%thread] %logger{50}#%M - %msg%n
            </pattern>
        </layout>
    </appender>

    <!-- 3.全日志记录.按月份文件夹将日志分离,大于200M时进行切割压缩-->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${path}/${filename}-now.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${path}/%d{yyyyMM,aux}/${filename}-now-%d{yyyyMMdd}_%i.zip</fileNamePattern>
            <!-- each file should be at most 200MB, keep 183 days worth of history, but at most 50GB -->
            <maxFileSize>200MB</maxFileSize>
            <maxHistory>183</maxHistory>
            <totalSizeCap>50GB</totalSizeCap>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} %5level -[%X{X-B3-TraceId:-},%X{X-B3-SpanId:-}]
                - [%thread] %logger{50}#%M - %msg%n
            </pattern>
            <charset>utf-8</charset>
        </encoder>
    </appender>

    <!--4.error错误级别日志记录-->
    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${path}/${filename}-error-now.log</file>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <!--滚动策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--路径-->
            <fileNamePattern>${path}/%d{yyyyMM,aux}/${filename}-error-%d{yyyyMMdd}_%i.zip
            </fileNamePattern>
            <maxFileSize>100MB</maxFileSize>
            <maxHistory>183</maxHistory>
            <totalSizeCap>50GB</totalSizeCap>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} %5level - [%X{X-B3-TraceId:-},%X{X-B3-SpanId:-}]
                - [%thread] %logger{50}#%M - %msg%n
            </pattern>
            <charset>utf-8</charset>
        </encoder>
    </appender>

    <!--5.其他sql操作日志记录-->
    <appender name="bizAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${path}/${filename}-Biz.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${path}/%d{yyyyMM,aux}/${filename}-Biz-%d{yyyyMMdd}_%i.zip</fileNamePattern>
            <maxFileSize>100MB</maxFileSize>
            <maxHistory>183</maxHistory>
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} %5level - [%X{X-B3-TraceId:-},%X{X-B3-SpanId:-}]
                - [%thread] %logger{50}#%M - %msg%n
            </pattern>
        </encoder>
    </appender>

    <!--7.logger有一个配置addtivity="true" 默认就是true(root标签设置为info级别也会打印debugger日志),
    标识向上级传递日志(INFO是DEBUG的上级)。只有显示指定为false时,才不会向上级输出(才不会追加到"FILE"中去)。-->

    <!--针对sql 输出debugger日志-->
    <logger name="com.asd.common.internet.mapper" additivity="false">
        <level value="debug"/>
        <appender-ref ref="bizAppender"/>
    </logger>

    <!--9.1测试环境输出到console-->
    <springProfile name="default,bridge-dev,dev,test,uat,sit,bat,ops,sit2,sit3,dev-old">
        <root level="${level}">
<!--        <root level="${level}">-->
        <appender-ref ref="CONSOLE"/>
            <appender-ref ref="FILE"/>
            <appender-ref ref="fileErrorLog"/>
        </root>
    </springProfile>
    <!--9.2生产环境不输出到console-->
    <springProfile name="pre,prd,prod">
        <root level="${level}">
            <appender-ref ref="FILE"/>
            <appender-ref ref="fileErrorLog"/>
        </root>
    </springProfile>

</configuration>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值