Ver código fonte

网关统一日志记录

by su 3 anos atrás
pai
commit
46b6bc995c

+ 5 - 0
4dkankan-center-scene/pom.xml

@@ -48,6 +48,11 @@
             <scope>test</scope>
         </dependency>
 
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 7 - 3
4dkankan-center-scene/src/main/java/com/fdkankan/scene/SceneApplication.java

@@ -1,9 +1,11 @@
 package com.fdkankan.scene;
 
+import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.util.StrExtUtil;
 import com.fdkankan.scene.dto.TestDto;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -11,6 +13,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 @SpringBootApplication
 @RestController
+@EnableDiscoveryClient
 public class SceneApplication {
 
     public static void main(String[] args) {
@@ -20,9 +23,10 @@ public class SceneApplication {
     @PostMapping("/test/test")
     public TestDto test(@RequestBody TestDto test){
         System.out.println("进入了");
-        int i = 1;
-        StrExtUtil.isNotBlank("123");
-        int i1 = i / 0;
+        if(test.getName().equals("aaa")){
+//            throw new BusinessException(1000,"asdfaswdfasdfsdf");
+//            int i = test.getId() / 0;
+        }
         return test;
     }
 

+ 0 - 2
4dkankan-center-scene/src/main/resources/application.properties

@@ -1,2 +0,0 @@
-server.port=8090
-spring.application.name=center-scene

+ 13 - 0
4dkankan-center-scene/src/main/resources/application.yml

@@ -0,0 +1,13 @@
+spring:
+  application:
+    name: 4dkankan-center-scene
+  cloud:
+    nacos:
+      discovery:
+        server-addr: 192.168.0.47:8848
+
+
+
+#server.port=8090
+#spring.application.name=4dkankan-center-scene
+#spring.cloud.nacos.discovery.server-addr=192.168.0.47:8848

+ 2 - 0
4dkankan-center-scene/src/main/resources/bootstrap.properties

@@ -0,0 +1,2 @@
+server.port=8090
+spring.application.name=4dkankan-gateway

+ 7 - 7
4dkankan-common/src/main/java/com/fdkankan/common/base/AbstractService.java

@@ -7,15 +7,15 @@ import java.util.List;
 public abstract class AbstractService<T extends Serializable> implements IServiceOperations<T> {
 
 	protected abstract IOperations<T> getMapper();
-	
+
 	protected String tableName = "";
 
 	public abstract void setTableName(String tableName);
-	
+
 	protected String getTableName() {
 		return this.tableName;
 	}
-	
+
 	@Override
 	public void insert(T entity) {
 		getMapper().insert(entity, this.getTableName());
@@ -30,7 +30,7 @@ public abstract class AbstractService<T extends Serializable> implements IServic
 	public int update(List<T> list) {
 		return getMapper().update(list, this.getTableName());
 	}
-	
+
 	@Override
 	public int updateByBatch(LinkedHashMap<String, String> condition, String field) {
 		return getMapper().updateByBatch(condition, field, this.getTableName());
@@ -63,12 +63,12 @@ public abstract class AbstractService<T extends Serializable> implements IServic
 		int limit = pageSize;
 		return getMapper().getList(condition, offset, limit, order, field, this.getTableName());
 	}
-	
+
 	@Override
 	public List<T> getAllList(LinkedHashMap<String, String> condition) {
 		return this.getAllList(condition, null);
 	}
-	
+
 	@Override
 	public List<T> getAllList(LinkedHashMap<String, String> condition, String order) {
 		if(order == null || order.trim().length() == 0) {
@@ -132,7 +132,7 @@ public abstract class AbstractService<T extends Serializable> implements IServic
 	public int update(List<T> list, String tableName) {
 		return this.update(list, tableName);
 	}
-	
+
 	@Override
 	public int updateByBatch(LinkedHashMap<String, String> condition, String field, String tableName) {
 		return this.getMapper().updateByBatch(condition, field, this.getTableName());

+ 1 - 1
4dkankan-common/src/main/java/com/fdkankan/common/base/IOperations.java

@@ -14,7 +14,7 @@ public interface IOperations<T extends Serializable> {
 	int insertByBatch(@Param("list") List<T> list, @Param("tableName") String tableName);
 
 	int update(@Param("list") List<T> list, @Param("tableName") String tableName);
-	
+
 	int updateByBatch(@Param("condition") LinkedHashMap<String, String> condition, @Param("field") String field, @Param("tableName") String tableName);
 
 	T getById(@Param("id") final int id, @Param("tableName") String tableName);

+ 5 - 5
4dkankan-common/src/main/java/com/fdkankan/common/base/IServiceOperations.java

@@ -7,13 +7,13 @@ import java.util.List;
 public interface IServiceOperations<T extends Serializable> extends IOperations<T> {
 
 	void setTableName(String tableName);
-	
+
 	void insert(final T entity);
-	
+
 	int insertByBatch(List<T> list);
 
 	int update(List<T> list);
-	
+
 	int updateByBatch(LinkedHashMap<String, String> condition, String field);
 
 	T getById(final int id);
@@ -31,9 +31,9 @@ public interface IServiceOperations<T extends Serializable> extends IOperations<
 	List<T> getList(LinkedHashMap<String, String> condition, int pageNo, int pageSize);
 
 	List<T> getList(LinkedHashMap<String, String> condition, int pageNo, int pageSize, String order);
-	
+
 	public List<T> getAllList(LinkedHashMap<String, String> condition);
-	
+
 	public List<T> getAllList(LinkedHashMap<String, String> condition, String order);
 
 	T getOne(LinkedHashMap<String, String> condition);

+ 3 - 2
4dkankan-common/src/main/java/com/fdkankan/common/exception/GlobalExceptionHandler.java

@@ -1,5 +1,6 @@
 package com.fdkankan.common.exception;
 
+import cn.hutool.core.exceptions.ExceptionUtil;
 import com.fdkankan.common.constant.ServerCode;
 import com.fdkankan.common.response.ResultData;
 import lombok.extern.slf4j.Slf4j;
@@ -23,7 +24,7 @@ public class GlobalExceptionHandler {
     @ExceptionHandler(value = Exception.class)
     public ResultData exceptionHandler(HttpServletRequest httpServletRequest, Exception e) {
         log.error("服务错误:", e);
-        return ResultData.fail(ServerCode.SYSTEM_ERROR.code(), ServerCode.SYSTEM_ERROR.message());
+        return ResultData.fail(ServerCode.SYSTEM_ERROR.code(), ExceptionUtil.stacktraceToString(e, 3000));
     }
 
     /**
@@ -32,7 +33,7 @@ public class GlobalExceptionHandler {
     @ResponseBody
     @ExceptionHandler(value = BusinessException.class)
     public ResultData businessExceptionHandler(HttpServletRequest httpServletRequest, BusinessException e) {
-        log.info("业务异常code:" + e.getCode() + "msg:" + e.getMsg());
+        log.info("业务异常-----code:" + e.getCode() + "msg:" + e.getMsg());
         return ResultData.fail(e.getCode(), e.getMsg());
     }
 }

+ 2 - 1
4dkankan-common/src/main/java/com/fdkankan/common/response/ResultData.java

@@ -4,6 +4,7 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
+import java.util.Calendar;
 
 @Data
 @NoArgsConstructor
@@ -27,7 +28,7 @@ public class ResultData<T> implements Serializable {
     /**
      * 响应时间戳
      */
-    private long timestamp ;
+    private long timestamp = Calendar.getInstance().getTimeInMillis();
 
     public ResultData(int status, String message){
         this.status = status;

+ 11 - 0
4dkankan-gateway/pom.xml

@@ -53,6 +53,17 @@
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-gateway</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-mongodb</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 2 - 0
4dkankan-gateway/src/main/java/com/fdkankan/gateway/GatewayApplication.java

@@ -2,8 +2,10 @@ package com.fdkankan.gateway;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 
 @SpringBootApplication
+@EnableDiscoveryClient
 public class GatewayApplication {
 
     public static void main(String[] args) {

+ 15 - 0
4dkankan-gateway/src/main/java/com/fdkankan/gateway/dto/User.java

@@ -0,0 +1,15 @@
+package com.fdkankan.gateway.dto;
+
+import lombok.Data;
+import lombok.ToString;
+
+@Data
+@ToString
+public class User {
+
+    private String id;
+    private String name;
+    private Integer age;
+    private String sex;
+
+}

+ 0 - 2
4dkankan-gateway/src/main/java/com/fdkankan/gateway/exception/JsonErrorWebExceptionHandler.java

@@ -28,8 +28,6 @@ public class JsonErrorWebExceptionHandler extends DefaultErrorWebExceptionHandle
     protected Map<String, Object> getErrorAttributes(ServerRequest request, ErrorAttributeOptions options) {
         // 这里其实可以根据异常类型进行定制化逻辑
         Throwable error = super.getError(request);
-        Throwable cause = error.getCause();
-        StackTraceElement[] stackTrace = cause.getStackTrace();
         Map<String, Object> errorAttributes = new HashMap<>(8);
         errorAttributes.put("status", ServerCode.SYSTEM_ERROR.code());
         errorAttributes.put("message", ServerCode.SYSTEM_ERROR.message());

+ 7 - 6
4dkankan-gateway/src/main/java/com/fdkankan/gateway/filter/AccessLogFilter.java

@@ -6,6 +6,7 @@ import com.fdkankan.gateway.log.GatewayLog;
 import com.sun.deploy.util.StringUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.reactivestreams.Publisher;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
 import org.springframework.cloud.gateway.filter.GlobalFilter;
 import org.springframework.cloud.gateway.filter.factory.rewrite.CachedBodyOutputMessage;
@@ -17,6 +18,7 @@ import org.springframework.core.io.buffer.DataBuffer;
 import org.springframework.core.io.buffer.DataBufferFactory;
 import org.springframework.core.io.buffer.DataBufferUtils;
 import org.springframework.core.io.buffer.DefaultDataBufferFactory;
+import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
@@ -46,13 +48,15 @@ public class AccessLogFilter  implements GlobalFilter, Ordered {
 
     private final List<HttpMessageReader<?>> messageReaders = HandlerStrategies.withDefaults().messageReaders();
 
+    @Autowired
+    private MongoTemplate mongoTemplate;
+
     @Override
     public int getOrder() {
         return -100;
     }
 
     @Override
-    @SuppressWarnings("unchecked")
     public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
 
         ServerHttpRequest request = exchange.getRequest();
@@ -101,7 +105,6 @@ public class AccessLogFilter  implements GlobalFilter, Ordered {
 
 
     /**
-     * 解决 request body 只能读取一次问题,
      * 参考: org.springframework.cloud.gateway.filter.factory.rewrite.ModifyRequestBodyGatewayFilterFactory
      * @param exchange
      * @param chain
@@ -147,12 +150,12 @@ public class AccessLogFilter  implements GlobalFilter, Ordered {
 
     /**
      * 打印日志
-     * @author javadaily
-     * @date 2021/3/24 14:53
      * @param gatewayLog 网关日志
      */
     private void writeAccessLog(GatewayLog gatewayLog) {
         log.info(gatewayLog.toString());
+        //日志写入mongodb
+        mongoTemplate.insert(gatewayLog, "gatewayLog");
     }
 
 
@@ -180,8 +183,6 @@ public class AccessLogFilter  implements GlobalFilter, Ordered {
                 if (contentLength > 0) {
                     httpHeaders.setContentLength(contentLength);
                 } else {
-                    // TODO: this causes a 'HTTP/1.1 411 Length Required' // on
-                    // httpbin.org
                     httpHeaders.set(HttpHeaders.TRANSFER_ENCODING, "chunked");
                 }
                 return httpHeaders;

+ 16 - 0
4dkankan-gateway/src/main/java/com/fdkankan/gateway/log/GatewayLog.java

@@ -1,31 +1,47 @@
 package com.fdkankan.gateway.log;
 
 import lombok.Data;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+import org.springframework.data.mongodb.core.mapping.Field;
 
 import java.util.Date;
 
 @Data
+@Document("GatewayLog")
 public class GatewayLog {
 
+    @Id
+    private String id;
     /**访问实例*/
+    @Field("targetServer")
     private String targetServer;
     /**请求路径*/
+    @Field("requestPath")
     private String requestPath;
     /**请求方法*/
+    @Field("requestMethod")
     private String requestMethod;
     /**协议 */
+    @Field("schema")
     private String schema;
     /**请求体*/
+    @Field("requestBody")
     private String requestBody;
     /**响应体*/
+    @Field("responseData")
     private String responseData;
     /**请求ip*/
+    @Field("ip")
     private String ip;
     /**请求时间*/
+    @Field("requestTime")
     private Date requestTime;
     /**响应时间*/
+    @Field("responseTime")
     private Date responseTime;
     /**执行时间*/
+    @Field("executeTime")
     private long executeTime;
 
 }

+ 7 - 1
4dkankan-gateway/src/main/resources/application.yml

@@ -3,6 +3,12 @@ spring:
     gateway:
       routes:
         - id: route-center-scene
-          uri: http://localhost:8090
+          uri: lb://4dkankan-center-scene
           predicates:
             - Path=/test/*
+    nacos:
+      discovery:
+        server-addr: 192.168.0.47:8848
+  data:
+    mongodb:
+      uri: "mongodb://localhost:27017/test"

+ 21 - 0
4dkankan-gateway/src/test/java/com/fdkankan/gateway/GatewayApplicationTests.java

@@ -1,7 +1,13 @@
 package com.fdkankan.gateway;
 
+import cn.hutool.core.collection.CollectionUtil;
+import com.fdkankan.gateway.dto.User;
 import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.data.mongodb.core.MongoTemplate;
+
+import java.util.List;
 
 @SpringBootTest
 class GatewayApplicationTests {
@@ -10,4 +16,19 @@ class GatewayApplicationTests {
     void contextLoads() {
     }
 
+    @Autowired
+    private MongoTemplate mongoTemplate;
+
+    @Test
+    public void test (){
+
+        List<User> userList = mongoTemplate.findAll(User.class);
+        if(CollectionUtil.isNotEmpty(userList)){
+            for (User user : userList) {
+                System.out.println(user.toString());
+            }
+        }
+
+    }
+
 }

+ 9 - 0
pom.xml

@@ -41,6 +41,15 @@
     <dependencyManagement>
 
         <dependencies>
+
+            <dependency>
+                <groupId>com.alibaba.cloud</groupId>
+                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
+                <version>2.2.7.RELEASE</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+
             <dependency>
                 <groupId>org.springframework.cloud</groupId>
                 <artifactId>spring-cloud-dependencies</artifactId>