# common-logs-starter-solution
**Repository Path**: hj2017hhh/common-logs-starter-solution
## Basic Information
- **Project Name**: common-logs-starter-solution
- **Description**: 一个基于AOP的通用日志解决方案starter
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 3
- **Forks**: 1
- **Created**: 2019-11-03
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# common-logs-starter-solution
#### 介绍
一个基于AOP的通用日志解决方案starter
#### 软件架构
sprringBoot+starter自作技术+javassist+AOP
#### 安装教程
详见使用说明
#### 使用说明
#### 1.下载starter
#### 2.再使用方pom.xml加入如下配置
com.logstash
web-logger-logstash-starter
0.0.1-SNAPSHOT
#### 3.启动类上加上@EnableLogstash注解开启starter
@SpringBootApplication
@EnableLogstash//开启starter
public class WebLoggerLogstashDemoApplication {
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(WebLoggerLogstashDemoApplication.class);
springApplication.run(args);
}
}
#### 4.配置
logstash:
//这里支持FILE和JDBC两种方式
logType: FILE
//系统编码,必填
sysCode: example-system
//logType为FILE时必填,生成的日志地址
logPath: web-logger-logstash-example.log
#### 5.附加配置
#### 5.1 如果是logType为JDBC,请下载文件https://gitee.com/hj2017hhh/common-logs-starter-solution/blob/master/web-logger-logstash-starter/db/init.sql
#### 5.2 到你的数据库中执行,并加入配置:
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3308/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: 123456
#### 5.3 加入配置
/**
* logType JDBC時候配置
*/
@Configuration
public class LogOpreatorConfig {
@Autowired
private JdbcTemplate jdbcTemplate;
@Bean
public JDBCOpreator jdbcOpreator() {
return new JDBCOpreator() {
@Override
public void save(OperatorLog operatorLog) {
jdbcTemplate.update(
"INSERT INTO `operator_log`("
+ "`excute_time`, "
+ "`remote_addr`,"
+ "`request_method`,"
+ "`system`, "
+ "`module`,"
+ "`api`, "
+ "`uri`, "
+ "`params`, "
+ "`session_id`, "
+ "`cur_user`, "
+ "`bean_name`, "
+ "`result`,"
+ "`time`, "
+ "`exc_name`, "
+ "`exc_message`, "
+ "`created`) VALUES ("
+ "?, "
+ "?, "
+ "?, "
+ "?, "
+ "?, "
+ "?, "
+ "?, "
+ "?, "
+ "?, "
+ "?, "
+ "?, "
+ "?, "
+ "?, "
+ "?, "
+ "?, "
+ "?);",
operatorLog.getExcuteTime(),
operatorLog.getRemoteAddr(),
operatorLog.getRequestMethod(),
operatorLog.getSystem(),
operatorLog.getModule(),
operatorLog.getApi(),
operatorLog.getUri(),
operatorLog.getParams(),
operatorLog.getSessionId(),
operatorLog.getCurUser(),
operatorLog.getBeanName(),
operatorLog.getResult(),
operatorLog.getTime(),
operatorLog.getExcName(),
operatorLog.getExcMessage(),
new Date());
}
};
}
}
#### 6.使用说明,请在Controller层使用,其它层的,比如service层,会导致记录的日志不准确,待解决!
package com.demo.controller;
@RestController
@LogstashModule("用户管理")//加入该注解就会记录日志
public class UserController {
@Autowired
private UserService userService;
/**
* 登陆消息验证
*/
@RequestMapping(value = "/toLogin")
@API("用户登陆")//接口功能介绍
public JSONOperation> toLogin(UserAuth userAuth, HttpServletRequest request, HttpServletRequest response) {
//System.out.println(1/0);//测试异常
JSONObject loginJson = userService.userLogin(userAuth,true);
// 表示登陆成功
if (loginJson.get("key").equals("success")) {
return JSONOperation.success("登陆成功!", userAuth);
}
return JSONOperation.fail(loginJson.getString("msg"));
}
/**
* 用户列表
*/
@RequestMapping(value = "/list")
@API("用户列表")
public JSONOperation> list(String name, HttpServletRequest request, HttpServletRequest response) {
List list = userService.list(name);
return JSONOperation.success(list);
}
}
#### 7.经过测试,不加注解的Controller就不会开启日志,对业务没有侵入性
#### 8.最终日志记录格式如下:
2019-11-02 17:11:53.599 INFO 2584 --- [p-nio-82-exec-1] com.logstash.aspect.WebRequestLogAspect : ===============请求内容===============
2019-11-02 17:11:53.599 INFO 2584 --- [p-nio-82-exec-1] com.logstash.aspect.WebRequestLogAspect : 请求地址:http://127.0.0.1:82/toLogin
2019-11-02 17:11:53.599 INFO 2584 --- [p-nio-82-exec-1] com.logstash.aspect.WebRequestLogAspect : 请求方式:POST
2019-11-02 17:11:53.602 INFO 2584 --- [p-nio-82-exec-1] com.logstash.aspect.WebRequestLogAspect : 请求参数:{"passwd":"123","username":"zhangsan"}
2019-11-02 17:11:53.602 INFO 2584 --- [p-nio-82-exec-1] com.logstash.aspect.WebRequestLogAspect : 响应结果 : JSONOperation(code=200, message=登陆成功!, data=UserAuth(username=zhangsan, passwd=123))
2019-11-02 17:11:53.606 INFO 2584 --- [p-nio-82-exec-1] com.logstash.aspect.WebRequestLogAspect : 请求耗时:1252ms
2019-11-02 17:11:53.606 INFO 2584 --- [p-nio-82-exec-1] com.logstash.aspect.WebRequestLogAspect : ===============请求内容===============
2019-11-02 17:11:53.625 INFO 2584 --- [p-nio-82-exec-1] com.logstash.aspect.WebRequestLogAspect : {
"api":"用户登陆",
"beanName":"com.demo.controller.UserController",
"excuteTime":1252,
"module":"用户管理",
"params":"{\"passwd\":\"123\",\"username\":\"zhangsan\"}",
"remoteAddr":"127.0.0.1",
"requestMethod":"POST",
"result":"JSONOperation(code=200, message=登陆成功!, data=UserAuth(username=zhangsan, passwd=123))",
"sessionId":"80585F127FB81113F56CB3B08F89EBAA",
"system":"example-system",
"time":"2019年11月02日 17时11分52.712秒",
"uri":"http://127.0.0.1:82/toLogin"
}
#### 9.异常情况下也会记录到日志
#### 参与贡献
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request
#### 码云特技
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com)
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目
4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目
5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)