Commit e351cdf7850b2af4de5927e0ba2514451457e701

Authored by YunaiV
1 parent 81b1f375

完善 skywalking 组件的集成

@@ -196,6 +196,11 @@ @@ -196,6 +196,11 @@
196 <artifactId>apm-toolkit-logback-1.x</artifactId> 196 <artifactId>apm-toolkit-logback-1.x</artifactId>
197 <version>${skywalking.version}</version> 197 <version>${skywalking.version}</version>
198 </dependency> 198 </dependency>
  199 + <dependency>
  200 + <groupId>org.apache.skywalking</groupId>
  201 + <artifactId>apm-toolkit-opentracing</artifactId>
  202 + <version>${skywalking.version}</version>
  203 + </dependency>
199 204
200 <dependency> 205 <dependency>
201 <groupId>de.codecentric</groupId> 206 <groupId>de.codecentric</groupId>
src/main/java/cn/iocoder/dashboard/framework/tracer/config/TracerAutoConfiguration.java
1 package cn.iocoder.dashboard.framework.tracer.config; 1 package cn.iocoder.dashboard.framework.tracer.config;
2 2
3 -import cn.iocoder.dashboard.framework.tracer.core.annotation.BizTracingAop; 3 +import cn.iocoder.dashboard.framework.tracer.core.aop.BizTraceAspect;
  4 +import cn.iocoder.dashboard.framework.tracer.core.filter.TraceFilter;
  5 +import cn.iocoder.dashboard.framework.web.core.enums.FilterOrderEnum;
  6 +import io.opentracing.Tracer;
  7 +import org.apache.skywalking.apm.toolkit.opentracing.SkywalkingTracer;
4 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; 8 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
5 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 9 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
6 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 10 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
7 import org.springframework.boot.context.properties.EnableConfigurationProperties; 11 import org.springframework.boot.context.properties.EnableConfigurationProperties;
  12 +import org.springframework.boot.web.servlet.FilterRegistrationBean;
8 import org.springframework.context.annotation.Bean; 13 import org.springframework.context.annotation.Bean;
9 import org.springframework.context.annotation.Configuration; 14 import org.springframework.context.annotation.Configuration;
10 15
@@ -14,21 +19,38 @@ import org.springframework.context.annotation.Configuration; @@ -14,21 +19,38 @@ import org.springframework.context.annotation.Configuration;
14 * @author mashu 19 * @author mashu
15 */ 20 */
16 @Configuration 21 @Configuration
17 -@ConditionalOnClass({BizTracingAop.class})  
18 -@EnableConfigurationProperties(BizTracerProperties.class) 22 +@ConditionalOnClass({BizTraceAspect.class})
  23 +@EnableConfigurationProperties(TracerProperties.class)
19 @ConditionalOnProperty(prefix = "yudao.tracer", value = "enable", matchIfMissing = true) 24 @ConditionalOnProperty(prefix = "yudao.tracer", value = "enable", matchIfMissing = true)
20 public class TracerAutoConfiguration { 25 public class TracerAutoConfiguration {
21 26
22 @Bean 27 @Bean
23 @ConditionalOnMissingBean 28 @ConditionalOnMissingBean
24 - public BizTracerProperties bizTracerProperties() {  
25 - return new BizTracerProperties(); 29 + public TracerProperties bizTracerProperties() {
  30 + return new TracerProperties();
26 } 31 }
27 32
28 @Bean 33 @Bean
29 @ConditionalOnMissingBean 34 @ConditionalOnMissingBean
30 - public BizTracingAop bizTracingAop() {  
31 - return new BizTracingAop(); 35 + public BizTraceAspect bizTracingAop() {
  36 + return new BizTraceAspect();
  37 + }
  38 +
  39 + @Bean
  40 + @ConditionalOnMissingBean
  41 + public Tracer tracer() {
  42 + return new SkywalkingTracer();
  43 + }
  44 +
  45 + /**
  46 + * 创建 TraceFilter 过滤器,响应 header 设置 traceId
  47 + */
  48 + @Bean
  49 + public FilterRegistrationBean<TraceFilter> traceFilter() {
  50 + FilterRegistrationBean<TraceFilter> registrationBean = new FilterRegistrationBean<>();
  51 + registrationBean.setFilter(new TraceFilter());
  52 + registrationBean.setOrder(FilterOrderEnum.TRACE_FILTER);
  53 + return registrationBean;
32 } 54 }
33 55
34 } 56 }
src/main/java/cn/iocoder/dashboard/framework/tracer/config/BizTracerProperties.java renamed to src/main/java/cn/iocoder/dashboard/framework/tracer/config/TracerProperties.java
@@ -10,5 +10,5 @@ import org.springframework.boot.context.properties.ConfigurationProperties; @@ -10,5 +10,5 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
10 */ 10 */
11 @ConfigurationProperties("yudao.tracer") 11 @ConfigurationProperties("yudao.tracer")
12 @Data 12 @Data
13 -public class BizTracerProperties { 13 +public class TracerProperties {
14 } 14 }
src/main/java/cn/iocoder/dashboard/framework/tracer/core/annotation/BizTracing.java renamed to src/main/java/cn/iocoder/dashboard/framework/tracer/core/annotation/BizTrace.java
@@ -10,7 +10,7 @@ import java.lang.annotation.*; @@ -10,7 +10,7 @@ import java.lang.annotation.*;
10 @Target({ElementType.METHOD}) 10 @Target({ElementType.METHOD})
11 @Retention(RetentionPolicy.RUNTIME) 11 @Retention(RetentionPolicy.RUNTIME)
12 @Inherited 12 @Inherited
13 -public @interface BizTracing { 13 +public @interface BizTrace {
14 14
15 /** 15 /**
16 * 业务编号 tag 名 16 * 业务编号 tag 名
@@ -22,6 +22,11 @@ public @interface BizTracing { @@ -22,6 +22,11 @@ public @interface BizTracing {
22 String TYPE_TAG = "biz.type"; 22 String TYPE_TAG = "biz.type";
23 23
24 /** 24 /**
  25 + * @return 操作名
  26 + */
  27 + String operationName() default "";
  28 +
  29 + /**
25 * @return 业务编号 30 * @return 业务编号
26 */ 31 */
27 String id(); 32 String id();
src/main/java/cn/iocoder/dashboard/framework/tracer/core/annotation/BizTracingAop.java deleted
1 -package cn.iocoder.dashboard.framework.tracer.core.annotation;  
2 -  
3 -import cn.hutool.core.util.StrUtil;  
4 -import cn.iocoder.dashboard.util.sping.SpElUtil;  
5 -import lombok.extern.slf4j.Slf4j;  
6 -import org.apache.skywalking.apm.toolkit.trace.ActiveSpan;  
7 -import org.aspectj.lang.ProceedingJoinPoint;  
8 -import org.aspectj.lang.annotation.Around;  
9 -import org.aspectj.lang.annotation.Aspect;  
10 -  
11 -/**  
12 - * 业务链路AOP切面  
13 - *  
14 - * @author mashu  
15 - */  
16 -@Aspect  
17 -@Slf4j  
18 -public class BizTracingAop {  
19 -  
20 - @Around(value = "@annotation(bizTracing)")  
21 - public void tagBizInfo(ProceedingJoinPoint joinPoint, BizTracing bizTracing) {  
22 - String bizId = (String) SpElUtil.analysisSpEl(bizTracing.id(), joinPoint);  
23 - String bizType = (String) SpElUtil.analysisSpEl(bizTracing.type(), joinPoint);  
24 - if (StrUtil.isBlankIfStr(bizId)) {  
25 - log.error("empty biz: bizId[{}], bizType[{}].", bizId, bizType);  
26 - return;  
27 - }  
28 - log.info("accept biz: bizId[{}], bizType[{}].", bizId, bizType);  
29 - ActiveSpan.tag(BizTracing.ID_TAG, bizId);  
30 - ActiveSpan.tag(BizTracing.TYPE_TAG, bizType);  
31 - }  
32 -}  
src/main/java/cn/iocoder/dashboard/framework/tracer/core/aop/BizTraceAspect.java 0 → 100644
  1 +package cn.iocoder.dashboard.framework.tracer.core.aop;
  2 +
  3 +import cn.hutool.core.util.StrUtil;
  4 +import cn.iocoder.dashboard.framework.tracer.core.annotation.BizTrace;
  5 +import cn.iocoder.dashboard.util.sping.SpElUtil;
  6 +import io.opentracing.Span;
  7 +import io.opentracing.Tracer;
  8 +import lombok.extern.slf4j.Slf4j;
  9 +import org.aspectj.lang.ProceedingJoinPoint;
  10 +import org.aspectj.lang.annotation.Around;
  11 +import org.aspectj.lang.annotation.Aspect;
  12 +
  13 +import javax.annotation.Resource;
  14 +
  15 +/**
  16 + * {@link BizTrace} 切面,记录业务链路
  17 + *
  18 + * @author mashu
  19 + */
  20 +@Aspect
  21 +@Slf4j
  22 +public class BizTraceAspect {
  23 +
  24 + private static final String BIZ_OPERATION_NAME_PREFIX = "Biz/";
  25 +
  26 + @Resource
  27 + private Tracer tracer;
  28 +
  29 + @Around(value = "@annotation(trace)")
  30 + public Object around(ProceedingJoinPoint joinPoint, BizTrace trace) throws Throwable {
  31 + // 创建 span
  32 + String operationName = getOperationName(joinPoint, trace);
  33 + Span span = tracer.buildSpan(operationName).startManual();
  34 + try {
  35 + // 执行原有方法
  36 + return joinPoint.proceed();
  37 + } finally {
  38 + // 设置 Span 的 biz 属性
  39 + setBizTag(span, joinPoint, trace);
  40 + // 完成 Span
  41 + span.finish();
  42 + }
  43 + }
  44 +
  45 + private String getOperationName(ProceedingJoinPoint joinPoint, BizTrace trace) {
  46 + // 自定义操作名
  47 + if (StrUtil.isNotEmpty(trace.operationName())) {
  48 + return BIZ_OPERATION_NAME_PREFIX + trace.operationName();
  49 + }
  50 + // 默认操作名,使用方法名
  51 + return BIZ_OPERATION_NAME_PREFIX
  52 + + joinPoint.getSignature().getDeclaringType().getSimpleName()
  53 + + "/" + joinPoint.getSignature().getName();
  54 + }
  55 +
  56 + private void setBizTag(Span span, ProceedingJoinPoint joinPoint, BizTrace trace) {
  57 + try {
  58 + span.setTag(BizTrace.TYPE_TAG, StrUtil.toString(SpElUtil.analysisSpEl(trace.type(), joinPoint)));
  59 + span.setTag(BizTrace.ID_TAG, StrUtil.toString(SpElUtil.analysisSpEl(trace.id(), joinPoint)));
  60 + } catch (Exception ex) {
  61 + log.error("[around][解析 bizType 与 bizId 发生异常]", ex);
  62 + }
  63 + }
  64 +
  65 +}
src/main/java/cn/iocoder/dashboard/framework/tracer/core/filter/TraceFilter.java 0 → 100644
  1 +package cn.iocoder.dashboard.framework.tracer.core.filter;
  2 +
  3 +import cn.iocoder.dashboard.framework.tracer.core.util.TracerUtils;
  4 +import org.springframework.web.filter.OncePerRequestFilter;
  5 +
  6 +import javax.servlet.FilterChain;
  7 +import javax.servlet.ServletException;
  8 +import javax.servlet.http.HttpServletRequest;
  9 +import javax.servlet.http.HttpServletResponse;
  10 +import java.io.IOException;
  11 +
  12 +/**
  13 + * Trace 过滤器,打印 traceId 到 header 中返回
  14 + *
  15 + * @author 芋道源码
  16 + */
  17 +public class TraceFilter extends OncePerRequestFilter {
  18 +
  19 + /**
  20 + * Header 名 - 链路追踪编号
  21 + */
  22 + private static final String HEADER_NAME_TRACE_ID = "trace-id";
  23 +
  24 + @Override
  25 + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
  26 + throws IOException, ServletException {
  27 + // 设置响应 traceId
  28 + response.addHeader(HEADER_NAME_TRACE_ID, TracerUtils.getTraceId());
  29 + // 继续过滤
  30 + chain.doFilter(request, response);
  31 + }
  32 +
  33 +}
src/main/java/cn/iocoder/dashboard/framework/tracer/core/util/TracerUtils.java
@@ -2,8 +2,6 @@ package cn.iocoder.dashboard.framework.tracer.core.util; @@ -2,8 +2,6 @@ package cn.iocoder.dashboard.framework.tracer.core.util;
2 2
3 import org.apache.skywalking.apm.toolkit.trace.TraceContext; 3 import org.apache.skywalking.apm.toolkit.trace.TraceContext;
4 4
5 -import java.util.UUID;  
6 -  
7 /** 5 /**
8 * 链路追踪工具类 6 * 链路追踪工具类
9 * 7 *
@@ -18,10 +16,8 @@ public class TracerUtils { @@ -18,10 +16,8 @@ public class TracerUtils {
18 } 16 }
19 17
20 /** 18 /**
21 - * 获得链路追踪编号  
22 - * <p>  
23 - * 直接返回skywalking 的TraceId 如果不存在的话为空字符串""  
24 - * <p> 19 + * 获得链路追踪编号,直接返回 SkyWalking 的 TraceId。
  20 + * 如果不存在的话为空字符串!!!
25 * 21 *
26 * @return 链路追踪编号 22 * @return 链路追踪编号
27 */ 23 */
src/main/java/cn/iocoder/dashboard/framework/tracer/skywalking/LocalLogbackPatternConverter.java deleted
1 -/*  
2 - * Licensed to the Apache Software Foundation (ASF) under one or more  
3 - * contributor license agreements. See the NOTICE file distributed with  
4 - * this work for additional information regarding copyright ownership.  
5 - * The ASF licenses this file to You under the Apache License, Version 2.0  
6 - * (the "License"); you may not use this file except in compliance with  
7 - * the License. You may obtain a copy of the License at  
8 - *  
9 - * http://www.apache.org/licenses/LICENSE-2.0  
10 - *  
11 - * Unless required by applicable law or agreed to in writing, software  
12 - * distributed under the License is distributed on an "AS IS" BASIS,  
13 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
14 - * See the License for the specific language governing permissions and  
15 - * limitations under the License.  
16 - *  
17 - */  
18 -  
19 -  
20 -package cn.iocoder.dashboard.framework.tracer.skywalking;  
21 -  
22 -import ch.qos.logback.classic.pattern.ClassicConverter;  
23 -import ch.qos.logback.classic.spi.ILoggingEvent;  
24 -import cn.iocoder.dashboard.framework.tracer.core.util.TracerUtils;  
25 -  
26 -/**  
27 - * Created by mashu on 2021/3/6.  
28 - */  
29 -public class LocalLogbackPatternConverter extends ClassicConverter {  
30 - /**  
31 - * 作为默认的方式, 从{@link TracerUtils}中获取traceId,  
32 - * 需要用这个去替代logback的Layout,  
33 - * 同时避免了sky-walking agent生效的情况下仍然输出定值的问题.  
34 - *  
35 - * @param iLoggingEvent the event  
36 - * @return the traceId: UUID, or the real traceId.  
37 - */  
38 - @Override  
39 - public String convert(ILoggingEvent iLoggingEvent) {  
40 - return TracerUtils.getTraceId();  
41 - }  
42 -}  
src/main/java/cn/iocoder/dashboard/framework/tracer/skywalking/TraceIdPatternLogbackLayout.java deleted
1 -/*  
2 - * Licensed to the Apache Software Foundation (ASF) under one or more  
3 - * contributor license agreements. See the NOTICE file distributed with  
4 - * this work for additional information regarding copyright ownership.  
5 - * The ASF licenses this file to You under the Apache License, Version 2.0  
6 - * (the "License"); you may not use this file except in compliance with  
7 - * the License. You may obtain a copy of the License at  
8 - *  
9 - * http://www.apache.org/licenses/LICENSE-2.0  
10 - *  
11 - * Unless required by applicable law or agreed to in writing, software  
12 - * distributed under the License is distributed on an "AS IS" BASIS,  
13 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
14 - * See the License for the specific language governing permissions and  
15 - * limitations under the License.  
16 - *  
17 - */  
18 -  
19 -  
20 -package cn.iocoder.dashboard.framework.tracer.skywalking;  
21 -  
22 -import ch.qos.logback.classic.PatternLayout;  
23 -  
24 -/**  
25 - * Based on the logback-component convert register mechanism,  
26 - * register {@link LocalLogbackPatternConverter} as a new convert, match to "tid".  
27 - * You can use "%tid" in logback config file, "Pattern" section.  
28 - * If sky-walking agent is not active mode, it will use UUID as tid.  
29 - * <p>  
30 - * logback 的转换组件,为tid 添加占位符的转换器  
31 - * Created by mashu on 2021/3/6.  
32 - */  
33 -public class TraceIdPatternLogbackLayout extends PatternLayout {  
34 - static {  
35 - defaultConverterMap.put("tid", LocalLogbackPatternConverter.class.getName());  
36 - }  
37 -}  
src/main/java/cn/iocoder/dashboard/framework/web/core/enums/FilterOrderEnum.java
@@ -9,6 +9,7 @@ public interface FilterOrderEnum { @@ -9,6 +9,7 @@ public interface FilterOrderEnum {
9 9
10 int CORS_FILTER = Integer.MIN_VALUE; 10 int CORS_FILTER = Integer.MIN_VALUE;
11 11
  12 + int TRACE_FILTER = CORS_FILTER + 1;
12 13
13 int REQUEST_BODY_CACHE_FILTER = Integer.MIN_VALUE + 500; 14 int REQUEST_BODY_CACHE_FILTER = Integer.MIN_VALUE + 500;
14 15
src/main/java/cn/iocoder/dashboard/modules/system/controller/auth/SysAuthController.java
@@ -3,6 +3,7 @@ package cn.iocoder.dashboard.modules.system.controller.auth; @@ -3,6 +3,7 @@ package cn.iocoder.dashboard.modules.system.controller.auth;
3 import cn.iocoder.dashboard.common.enums.CommonStatusEnum; 3 import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
4 import cn.iocoder.dashboard.common.pojo.CommonResult; 4 import cn.iocoder.dashboard.common.pojo.CommonResult;
5 import cn.iocoder.dashboard.framework.logger.operatelog.core.annotations.OperateLog; 5 import cn.iocoder.dashboard.framework.logger.operatelog.core.annotations.OperateLog;
  6 +import cn.iocoder.dashboard.framework.tracer.core.annotation.BizTrace;
6 import cn.iocoder.dashboard.modules.system.controller.auth.vo.auth.SysAuthLoginReqVO; 7 import cn.iocoder.dashboard.modules.system.controller.auth.vo.auth.SysAuthLoginReqVO;
7 import cn.iocoder.dashboard.modules.system.controller.auth.vo.auth.SysAuthLoginRespVO; 8 import cn.iocoder.dashboard.modules.system.controller.auth.vo.auth.SysAuthLoginRespVO;
8 import cn.iocoder.dashboard.modules.system.controller.auth.vo.auth.SysAuthMenuRespVO; 9 import cn.iocoder.dashboard.modules.system.controller.auth.vo.auth.SysAuthMenuRespVO;
@@ -58,6 +59,7 @@ public class SysAuthController { @@ -58,6 +59,7 @@ public class SysAuthController {
58 59
59 @GetMapping("/get-permission-info") 60 @GetMapping("/get-permission-info")
60 @ApiOperation("获取登陆用户的权限信息") 61 @ApiOperation("获取登陆用户的权限信息")
  62 + @BizTrace(id = "1", type = "'user'")
61 public CommonResult<SysAuthPermissionInfoRespVO> getPermissionInfo() { 63 public CommonResult<SysAuthPermissionInfoRespVO> getPermissionInfo() {
62 // 获得用户信息 64 // 获得用户信息
63 SysUserDO user = userService.getUser(getLoginUserId()); 65 SysUserDO user = userService.getUser(getLoginUserId());
src/main/resources/logback-spring.xml
1 -<configuration>    1 +<configuration>  
  2 +  
2 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">      3 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">     
3 <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> 4 <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
4 - <layout class="cn.iocoder.dashboard.framework.tracer.skywalking.TraceIdPatternLogbackLayout"> 5 + <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
5 <pattern>%d{ISO8601} | %tid | %thread | %-5level | %msg%n</pattern> 6 <pattern>%d{ISO8601} | %tid | %thread | %-5level | %msg%n</pattern>
6 </layout> 7 </layout>
7 </encoder> 8 </encoder>
8 </appender> 9 </appender>
  10 +
9 <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 11 <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
10 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 12 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
11 <FileNamePattern>./logs/ruoyi-vue-pro-%d{yyyy-MM-dd_HH}.log</FileNamePattern> 13 <FileNamePattern>./logs/ruoyi-vue-pro-%d{yyyy-MM-dd_HH}.log</FileNamePattern>
@@ -20,13 +22,20 @@ @@ -20,13 +22,20 @@
20 <MaxFileSize>10MB</MaxFileSize> 22 <MaxFileSize>10MB</MaxFileSize>
21 </triggeringPolicy> 23 </triggeringPolicy>
22 </appender> 24 </appender>
  25 +
23 <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"> 26 <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
24 <discardingThreshold>0</discardingThreshold> 27 <discardingThreshold>0</discardingThreshold>
25 <queueSize>10</queueSize> 28 <queueSize>10</queueSize>
26 <appender-ref ref="FILE"/> 29 <appender-ref ref="FILE"/>
27 </appender> 30 </appender>
  31 +
28 <!-- skywalking grpc 日志收集 8.4.0版本开始支持 --> 32 <!-- skywalking grpc 日志收集 8.4.0版本开始支持 -->
29 <appender name="GRPC" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender"> 33 <appender name="GRPC" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
  34 + <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
  35 + <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
  36 + <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern>
  37 + </layout>
  38 + </encoder>s
30 </appender> 39 </appender>
31 40
32 <springProfile name="dev"> 41 <springProfile name="dev">
@@ -35,12 +44,14 @@ @@ -35,12 +44,14 @@
35 <appender-ref ref="ASYNC"/> 44 <appender-ref ref="ASYNC"/>
36 </logger> 45 </logger>
37 </springProfile> 46 </springProfile>
  47 +
38 <springProfile name="local"> 48 <springProfile name="local">
39 <logger name="cn.iocoder.dashboard" level="INFO" additivity="false"> 49 <logger name="cn.iocoder.dashboard" level="INFO" additivity="false">
40 <appender-ref ref="STDOUT"/> 50 <appender-ref ref="STDOUT"/>
41 <appender-ref ref="GRPC"/> 51 <appender-ref ref="GRPC"/>
42 </logger> 52 </logger>
43 </springProfile> 53 </springProfile>
  54 +
44 <springProfile name="default"> 55 <springProfile name="default">
45 <logger name="cn.iocoder.dashboard" level="INFO" additivity="false"> 56 <logger name="cn.iocoder.dashboard" level="INFO" additivity="false">
46 <appender-ref ref="STDOUT"/> 57 <appender-ref ref="STDOUT"/>
@@ -48,7 +59,7 @@ @@ -48,7 +59,7 @@
48 </logger> 59 </logger>
49 </springProfile> 60 </springProfile>
50 61
51 - <root level="DEBUG">       62 + <root level="INFO">      
52 <appender-ref ref="STDOUT"/>    63 <appender-ref ref="STDOUT"/>   
53 <appender-ref ref="ASYNC"/>  64 <appender-ref ref="ASYNC"/> 
54 </root> 65 </root>
@@ -56,4 +67,4 @@ @@ -56,4 +67,4 @@
56 <logger name="cn.iocoder.dashboard" level="INFO"> 67 <logger name="cn.iocoder.dashboard" level="INFO">
57 <appender-ref ref="STDOUT"/> 68 <appender-ref ref="STDOUT"/>
58 </logger> 69 </logger>
59 -</configuration>  
60 \ No newline at end of file 70 \ No newline at end of file
  71 +</configuration>