Explorar o código

日志链路跟踪

wyb hai 1 ano
pai
achega
4df86b9c6c

+ 31 - 0
unis-web-app/src/main/java/com/unis/core/config/log/LogMapperConfig.java

@@ -0,0 +1,31 @@
1
+package com.unis.core.config.log;
2
+
3
+import lombok.Data;
4
+import org.springframework.boot.context.properties.ConfigurationProperties;
5
+import org.springframework.context.annotation.Configuration;
6
+
7
+/**
8
+ * @author ybw
9
+ * @version V1.0
10
+ * @className LogMapperConfit
11
+ * @date 2024/7/17
12
+ **/
13
+@Configuration
14
+@ConfigurationProperties("log.mapper")
15
+@Data
16
+public class LogMapperConfig {
17
+    /**
18
+     * 项目根package
19
+     *
20
+     * @author: ybw
21
+     * @date: 2024/7/17
22
+     **/
23
+    private String basePackage;
24
+    /**
25
+     * 要查询的package的关键字
26
+     *
27
+     * @author: ybw
28
+     * @date: 2024/7/17
29
+     **/
30
+    private String packageKeyword;
31
+}

+ 90 - 0
unis-web-app/src/main/java/com/unis/core/config/log/MybatisPlusConfig.java

@@ -0,0 +1,90 @@
1
+package com.unis.core.config.log;
2
+
3
+import ch.qos.logback.classic.Level;
4
+import ch.qos.logback.classic.LoggerContext;
5
+import lombok.extern.slf4j.Slf4j;
6
+import org.apache.commons.collections4.CollectionUtils;
7
+import org.slf4j.LoggerFactory;
8
+import org.springframework.context.annotation.Bean;
9
+import org.springframework.context.annotation.Configuration;
10
+import org.springframework.core.io.Resource;
11
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
12
+import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
13
+import org.springframework.core.type.classreading.MetadataReader;
14
+import org.springframework.core.type.classreading.MetadataReaderFactory;
15
+import org.springframework.util.ClassUtils;
16
+
17
+import java.io.IOException;
18
+import java.util.HashSet;
19
+import java.util.Set;
20
+
21
+/**
22
+ * @ClassName MybatisPlusConfig
23
+ * @Description:
24
+ * @Author geoffrey
25
+ * @Date 2021/10/8
26
+ * @Version V1.0
27
+ **/
28
+@Configuration
29
+@Slf4j
30
+public class MybatisPlusConfig {
31
+
32
+    @javax.annotation.Resource
33
+    private LogMapperConfig logMapperConfig;
34
+
35
+    /**
36
+     * sql打印日志
37
+     * package命名为mapper方式实现
38
+     *
39
+     * @methodName: configureLoggers
40
+     * @return: void
41
+     * @author: ybw
42
+     * @date: 2024/7/4
43
+     **/
44
+    @Bean
45
+    public void configureLoggers() {
46
+        LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
47
+        Set<String> mapperPackages = findPackagesWithMapper();
48
+        if (CollectionUtils.isEmpty(mapperPackages)) {
49
+            return;
50
+        }
51
+        mapperPackages.forEach(packageName -> {
52
+            // 设置packageName包的日志级别为DEBUG
53
+            context.getLogger(packageName).setLevel(Level.DEBUG);
54
+        });
55
+    }
56
+
57
+    /**
58
+     * 扫描包下所有mapper
59
+     *
60
+     * @methodName: findPackagesWithMapper
61
+     * @return: java.util.Set<java.lang.String>
62
+     * @author: ybw
63
+     * @date: 2024/7/4
64
+     **/
65
+    public Set<String> findPackagesWithMapper() {
66
+        // 使用Spring的PathMatchingResourcePatternResolver来查找资源
67
+        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
68
+        MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver);
69
+
70
+        // 示例资源路径,根据实际情况调整
71
+        String packageSearchPath = "classpath*:**/" + logMapperConfig.getBasePackage() + "/**/*.class";
72
+        try {
73
+            Resource[] resources = resolver.getResources(packageSearchPath);
74
+            Set<String> packagesWithMapper = new HashSet<>();
75
+            for (Resource resource : resources) {
76
+                if (resource.isReadable()) {
77
+                    MetadataReader metadataReader = metadataReaderFactory.getMetadataReader(resource);
78
+                    String packageName = ClassUtils.getPackageName(metadataReader.getClassMetadata().getClassName());
79
+                    if (packageName.contains(logMapperConfig.getPackageKeyword())) {
80
+                        packagesWithMapper.add(packageName);
81
+                    }
82
+                }
83
+            }
84
+            return packagesWithMapper;
85
+        } catch (IOException e) {
86
+            log.error("findPackagesWithMapper error:", e);
87
+        }
88
+        return new HashSet<>();
89
+    }
90
+}

+ 5 - 1
unis-web-app/src/main/resources/application.yml

@@ -19,7 +19,7 @@ knife4j:
19 19
 mybatis-plus:
20 20
   configuration:
21 21
     jdbc-type-for-null: 'null'
22
-    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
22
+#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
23 23
   global-config:
24 24
     banner: false
25 25
     db-config:
@@ -72,3 +72,7 @@ snowy:
72 72
     common:
73 73
       backend-url: http://localhost:82 # 本地文件上传时会用,我们用的minio,这里无意义
74 74
       front-url: http://localhost:81
75
+log:
76
+  mapper:
77
+    base-package: "com/unis" #项目根package
78
+    package-keyword: ".mapper" #要查询的package的关键字

+ 4 - 0
unis-web-app/src/main/resources/logback-spring.xml

@@ -108,6 +108,10 @@
108 108
             </encoder>
109 109
         </appender>
110 110
 
111
+        <!-- 打印mybatis的sql日志  -->
112
+        <logger name="org.mybatis" level="TRACE"/>
113
+
114
+
111 115
         <!--记录到文件时,记录两类一类是error日志,一个是所有日志-->
112 116
         <root level="info">
113 117
             <appender-ref ref="STDOUT"/>