微服务(九)—— 日志管理

本文介绍了SpringBoot中日志配置的详细步骤,包括日志输出格式的定义、依赖导入及日志级别的设置等。通过配置logback-spring.xml文件实现了不同环境的日志记录需求。

上一篇: 微服务(八)—— 订单模块(backend-order).

1.介绍

SpringBoot默认就是使用slf4j作为日志门面,logback作为日志实现来记录日志,默认级别是info级别。
首先在application.yml配置文件配置日志配置文件的路径

 # 记录日志
 logging:
   config: classpath:logback-spring.xml

一般是放在类路径的resources目录下;
在这里插入图片描述

(1)日志的输出格式

%d{yyyy-MM-dd HH:mm:ss.sss} 日期格式
%c 当前类全限定名
%M 当前执行日志的方法
%L 行号
%thread 线程名称
%m 或者 %msg 信息
%n 换行

(2)导入依赖
<!--日志门面-->
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-nop</artifactId>
  <version>1.7.2</version>
</dependency>
<!-- logback 日志依赖-->
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.1.2</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-core</artifactId>
  <version>1.1.2</version>
</dependency>
(3)日志级别划分
trace: 日志追踪信息
debug: 日志详细信息(默认)
info: 日志的关键信息
warn: 日志的警告信息
error: 日志的错误信息

下面看一下logback-spring.xml文件具体的配置信息

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>

    <!--定义日志文件的存储地址-->
    <property name="LOG_HOME" value="F:/Work/logs"/>
    <!--定义日志文件的输出样式-->
    <property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"/>

    <!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名 -->
    <appender name="STDOUT_APPENDER" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--格式化输出:%d:表示日期   %thread:表示线程名  %-5level:级别从左显示5个字符宽度  %msg:日志消息   %n:是换行符-->
            <pattern>1-%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <!--高于level中设置的级别,则打印日志-->
            <onMatch>ACCEPT</onMatch>
            <!--低于level中设置的级别,则屏蔽日志-->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 按照每天生成日志文件 -->
    <appender name="ACCESS_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/access_%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
            <!--日志文件最大的大小-->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!--按照文件大小来进行拆分-->
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>${PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    
    <appender name="ERROR_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${LOG_HOME}/errors_%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <MaxHistory>30</MaxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    
    <!--自定义 log -->
    <logger name="org.springframework.web" level="ERROR"/>
    <logger name="org.springboot.sample" level="ERROR"/>
    <logger name="com.aiun" level="DEBUG"/>

    <!--配置异步日志-->
    <appender name="ASYNC_APPENDER" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="ERROR_APPENDER"/>
    </appender>

    <!-- 开发、测试环境 -->
    <springProfile name="dev,test">
        <root level="DEBUG">
			<appender-ref ref="ACCESS_APPENDER" />
		</root>
    </springProfile>
    
	<!-- 所有环境都要记录错误日志 -->
    <root level="ERROR">
        <appender-ref ref="ASYNC_APPENDER"/>
    </root>

</configuration>

配置项里面有具体的说明

2.使用

做完配置后,在类里面这样引用:

@Service("iCategoryService")
public class CategoryServiceImpl implements ICategoryService {
    private Logger logger = LoggerFactory.getLogger(CategoryServiceImpl.class);
}

然后通过logger对象调用对应的日志级别方法
例如:

@Override
public ServerResponse<List<Category>> getChildrenParallelCategory(Integer categoryId) {
    List<Category> categoryList = categoryMapper.selectCategoryChildrenByParentId(categoryId);
    if (categoryList.isEmpty()) {
        logger.info("未找到当前分类的子分类");
    }
    return ServerResponse.createBySuccess(categoryList);
}

也可以传递参数

try{
	......
} catch(Exception e) {
	logger.error("xxx错误", e);
}

然后那个模块如果需要进行日志记录,就可以以这样的方式进行日志的配置

下一篇: 微服务(十)—— Feign的使用.

<think>好的,用户想知道如何在Spring Cloud Alibaba中整合Sleuth进行分布式链路追踪。首先,我需要回顾一下Sleuth的基本概念和它在微服务架构中的作用。根据引用[2],Sleuth是Spring Cloud提供的分布式请求链路跟踪解决方案,借鉴了Google Dapper的设计。它通过traceId和spanId来跟踪请求链路,帮助开发者理解服务间的调用关系。 接下来,用户需要具体的整合步骤。根据引用[3],整合Sleuth需要在父工程的pom.xml中添加Sleuth的依赖。同时,引用[4]提到Sleuth兼容Zipkin,用于可视化链路追踪结果,所以可能还需要集成Zipkin。我需要分步骤说明如何添加依赖、配置参数,以及如何验证是否整合成功。 另外,用户提供的引用中有示例的依赖配置,需要确认是否正确。例如,引用[3]中的依赖是spring-cloud-starter-sleuth,而是否还需要其他依赖比如Zipkin的客户端?可能需要补充说明如何同时集成Zipkin,因为单独使用Sleuth的话,日志中会有trace信息,但可视化需要Zipkin。 然后,关于配置文件部分,是否需要修改application.yml或application.properties?引用[3]中的例子展示了日志输出的格式,包含微服务名称、traceId、spanId等信息,但用户可能需要知道如何配置采样率或其他相关参数,比如是否输出到第三方平台。 最后,验证部分需要指导用户如何查看日志,确认链路信息是否正确生成,以及如何启动Zipkin服务器并配置应用将数据发送到Zipkin。可能还需要提到访问Zipkin的UI界面来查看追踪结果。 总结一下,回答的结构应该包括:1. 添加依赖;2. 配置参数;3. 验证整合;4. 集成Zipkin的可视化步骤。同时,根据用户提供的引用,确保引用正确的部分,比如依赖配置和术语解释。还要注意用户可能遇到的常见问题,比如依赖冲突或配置错误,是否需要提示检查版本兼容性?</think>### Spring Cloud Alibaba整合Sleuth分布式链路追踪教程 #### 1. **核心概念** - **Sleuth**:通过`traceId`和`spanId`追踪请求链路,记录服务调用层级与耗时[^2]。 - **Zipkin**:可视化Sleuth收集的链路数据,支持图形化展示调用链路[^4]。 #### 2. **整合步骤** **步骤1:添加依赖** 在父工程或微服务模块的`pom.xml`中引入Sleuth和Zipkin依赖: ```xml <!-- Sleuth --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> <!-- Zipkin(可选,用于可视化) --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-zipkin</artifactId> </dependency> ``` **步骤2:配置参数** 在`application.yml`中配置采样率与Zipkin地址: ```yaml spring: sleuth: sampler: probability: 1.0 # 采样率设为100%(生产环境建议调低) zipkin: base-url: http://localhost:9411 # Zipkin服务器地址 ``` **步骤3:验证日志输出** 启动服务后,日志中会包含链路信息,例如: ``` [service-order,3977125f73391553,57547b5bf71f8242,false] ``` - 字段含义:`[服务名, traceId, spanId, 是否输出到第三方平台]`[^3]。 **步骤4:集成Zipkin可视化** 1. 下载并启动Zipkin服务(默认端口9411): ```bash java -jar zipkin-server-*.jar ``` 2. 服务调用后,访问`http://localhost:9411`查看链路图。 #### 3. **优化与实践建议** - **采样率调整**:生产环境中可降低采样率(如0.1)以减少性能开销。 - **日志聚合**:结合ELK(Elasticsearch、Logstash、Kibana)集中管理链路日志。 - **异常排查**:通过`traceId`快速定位跨服务异常链路。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值