# usking-tools-log
**Repository Path**: skylsj/usking-tools-log
## Basic Information
- **Project Name**: usking-tools-log
- **Description**: 用来打印springboot项目的RQ,RS的方法,无代码侵入。加入,卸载方便。按说明配置即可。
- **Primary Language**: Java
- **License**: AGPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-01-29
- **Last Updated**: 2022-02-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# usking-tools-log
#### 介绍
用来打印springboot项目的RQ,RS的方法,无代码侵入。加入、卸载方便。按说明配置即可。
如果不想本地编译,只需要把dist目录下的usking-tools-log-1.0.0.jar下载下来即可。
#### 软件架构
usking-tools-log使用的技术:
1. 使用springboot-starter的原理实现了按条件加载。
2. 利用AOP切面拦截技术,无代码侵入取得方法出入参。
3. 利用RequestContextHolder类取调用URL。
4. 利用RefreshScope技术,实现参数动态刷新。
#### 安装教程
1. 引入usking-tools-log-1.0.0.jar
```xml
top.usking.tools.log
usking-tools-log
1.0.0
```
2. 配置参数
* application.properties 格式配置
```properties
# 需要打印出入参的方法
top.usking.log.log-pointcut-expression=execution(* com.example.uskingtoolsweb.controller..*.*(..))
# 启用usking-tools-log程序,默认值false
top.usking.log.enabled=true
# 开启日志输出,默认值true
top.usking.log.output.enabled=true
# 出入参是否用json序列化输出,默认值false
top.usking.log.output.with-json=true
```
* application.yml 格式配置
```yaml
top:
usking:
log:
log-pointcut-expression: execution(* com.example.uskingtoolsweb.controller..*.*(..))
enabled: true
output:
enabled: true
with-json: true
```
__注意:__
*2.1. 拦截表达式有两种形式,一种是`execution(* com.example.uskingtoolsweb.controller..*.*(..))`;
*另一种是`com.example.uskingtoolsweb.controller..*.*`,后一种支持用“,”分隔的多个方法的拦截。*
*2.2. `top.usking.log.enabled`配置项,用来表示程序启动时是否加载usking-tools-log程序,不支持动态修改。*
*2.3. `top.usking.log.output.enabled`配置项,用来表示程序是否输出参数日志,支持动态修改。*
*2.4. `top.usking.log.output.with-json`配置项,出入参是否用json序列化输出,支持动态修改。*
*如果类重写了toString()方法,就不需要json序列化。*
*2.3, 2.4的支持动态修改,包括以下两种情况:
**a. spring cloud 项目,配置文件有文件服务器管理。修改远程配置文件。**
**b. springboot 项目中加入了spring-boot-starter-actuator监控的项目。修改本地配置文件。**
这种方式需要在pom.xml文件里添加以下依赖
```xml
2020.0.3
org.springframework.cloud
spring-cloud-starter-config
org.springframework.cloud
spring-cloud-starter-bootstrap
org.springframework.boot
spring-boot-starter-actuator
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
```
***
#### 使用说明
1. 按以后配置后,启动项目。如果在日志里看到以下log,表示配置成功
```log
2022-01-29 21:43:42.686 INFO 10000 --- [ main] t.u.tools.log.config.AopLogProperties : top.usking.log.default-pointcut-expression:[execution(* com.example.uskingtoolsweb.controller..*.*(..))]
2022-01-29 21:43:42.686 INFO 10000 --- [ main] t.u.tools.log.config.AopLogProperties : AOP Log config:[AopLogProperties{logPointcutExpression='execution(* com.example.uskingtoolsweb.controller..*.*(..))', enabled=true}]
```
2. 调用接口调试,会转出类似下面的日志
```log
2022-01-29 21:47:39.485 INFO 10000 --- [nio-8080-exec-4] t.u.t.l.i.OutputLogMethodInterceptor : ---------Path: /hello
2022-01-29 21:47:39.485 INFO 10000 --- [nio-8080-exec-4] t.u.t.l.i.OutputLogMethodInterceptor : ---------Class: com.example.uskingtoolsweb.controller.HelloApiController
2022-01-29 21:47:39.486 INFO 10000 --- [nio-8080-exec-4] t.u.t.l.i.OutputLogMethodInterceptor : ---------Method: public ResponseEntity phi(User user={"name":"Tom","age":20,"address":"DaLian"})
2022-01-29 21:47:39.494 INFO 10000 --- [nio-8080-exec-4] t.u.t.l.i.OutputLogMethodInterceptor : ---------Returns: {"headers":{},"body":{"name":"Tom dog","age":20,"address":"DaLian"},"statusCodeValue":200,"statusCode":"OK"}
```
3. 如果想动态修改`top.usking.log.output.enabled`,`top.usking.log.output.with-json`这两项的值,需要先修改本地applicaton.yml(properties)文件后,用post方式调用http://localhost:8080/actuator/refresh接口即可生效。
`http://localhost:8080/` 是项目实际的URL.
#### 版本说明
* 1.0.1 修复path重复打印问题,只有在@Restcontroller,@Controller注解的类的方法上才打印path.
* 1.0.0 发布初版