同步操作将从 easycode8/easy-log 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
为了解决以上痛点,开发了easy-log日志框架。
<dependency>
<groupId>io.github.easycode8</groupId>
<artifactId>easy-log-spring-boot-starter</artifactId>
<!-- 具体版本替换左上角最新版本号(数字部分)或者tag -->
<version>latest</version>
</dependency>
开启扫描controller/service 日志
spring:
application:
name: sample-service #你服务的名称
easy-log:
scan-controller:
enabled: true #是否记录controller中的公开方法 默认:false
scan-service:
enabled: true #是否记录service中的公开方法 默认:false
启动项目,调用web接口
2023-08-11 10:25:42.615 INFO [sample-service,478227a216a34dc2954d6ff714550df5] 37360 --- [nio-8000-exec-8] c.e.e.core.handler.DefaultLogHandler : [easy-log][TestLogController.list(username)]--begin operator:[null] param:username=aaaaaaa
2023-08-11 10:25:42.618 INFO [sample-service,478227a216a34dc2954d6ff714550df5] 37360 --- [nio-8000-exec-8] c.e.e.core.handler.DefaultLogHandler : [easy-log][TestLogController.list(username)]--end timeout:5
如果要替换原始类及方法日志信息,支持日志注解方式@EasyLog
@EasyLog 支持请求参数spel解析,定义日志处理,异步处理,自定义标签属性等高级功能请参考《easy-log使用教程》
@EasyLog(value = "list-查询列表信息", template = "'查询参数:' + #name ")
@GetMapping("/list1")
public ResponseEntity<Map<String, Object>> list1(String name) {
Map<String, Object> result = new HashMap<>();
result.put("data", name);
return ResponseEntity.ok(result);
}
效果
2023-08-11 10:34:35.722 INFO [sample-service,873fcfd33b4f4f02a3124e8c0fcda490] 37360 --- [nio-8000-exec-6] c.e.e.core.handler.DefaultLogHandler : [easy-log][list-查询列表信息]--begin operator:[null] param:name=zhangsan
2023-08-11 10:34:35.722 INFO [sample-service,873fcfd33b4f4f02a3124e8c0fcda490] 37360 --- [nio-8000-exec-6] c.e.e.core.handler.DefaultLogHandler : [easy-log][list-查询列表信息]--end timeout:0
如果项目集成了swagger/knife4j的在线接口文档已经有定义. 注解也不用写. 开启swagger接口记录日志(同时使用@EasyLog, @EasyLog的优先级更高)
spring:
application:
name: sample-service
easy-log:
scan-swagger:
enabled: true #是否将swagger的@ApiOperation接口注解标识作为日志记录 默认:false
swagger接口描述
@ApiOperation("测试post提交json数据")
@PostMapping
public ResponseEntity<Map<String, Object>> testPost(@RequestBody AccountParam param) {
Map<String, Object> result = new HashMap<>();
result.put("data", param);
return ResponseEntity.ok(result);
}
效果
2023-08-11 11:00:36.332 INFO [sample-service,8bfca421c1ce4dc196c120026a60c0eb] 39192 --- [nio-8000-exec-1] c.e.e.core.handler.DefaultLogHandler : [easy-log][测试post提交json数据]--begin operator:[null] param:{"id":10086,"name":"张三","username":"zhangsan"}
2023-08-11 11:00:36.335 INFO [sample-service,8bfca421c1ce4dc196c120026a60c0eb] 39192 --- [nio-8000-exec-1] c.e.e.core.handler.DefaultLogHandler : [easy-log][测试post提交json数据]--end timeout:332
最新swagger使用openapi3同样也是支持,@Operation(summary = "接口描述")开启自动记录日志,配置如下
spring:
easy-log:
scan-open-api:
enabled: true #支持openapi3注解记录日志,默认false
默认操作人为空,框架支持免开发设置操作人
从session中提取操作人示例
spring:
easy-log:
operator: SESSION.account.username
"SESSION."代表从session中获取用户信息,account为保存在session中对象的名称。username为业务对象的字段
从请求头中提取操作人示例
spring:
easy-log:
operator: HEADER.x-username
"HEADER."代表从请求头中获取用户信息。x-username代表请求头中的需要读取的变量.可以替换成业务中自己定义的,如x-login-name
操作人还支持从请求参数或实现接口自定义方式配置,具体参考使用教程
easy-log日志框架提供,动态修改日志配置能力,这部分是可选功能,如果开启需要补充easy-log-web依赖
<!--日志页面管理模块(日志开关/同步异步/处理器切换)-->
<dependency>
<groupId>io.github.easycode8</groupId>
<artifactId>easy-log-web</artifactId>
<version>latest</version>
</dependency>
访问: http://ip:port/easy-log-ui.html 账号密码:admin/admin123 账号密码可修改也可关闭
spring:
easy-log:
web:
enableBasicAuth: true #是否开启web访问认证, 默认true
username: admin #默认账号
password: admin123 #默认密码
easy-log支持基于mybatis/mybatis-plus持久层框架,无任何手动编码自动记录修改和删除数据的快照数据,分析字段变化数据
<!--mybatis-plus记录操作的数据变化模块-->
<dependency>
<groupId>io.github.easycode8</groupId>
<artifactId>easy-log-data-mybatis-plus</artifactId>
<version>latest</version>
</dependency>
spring:
easy-log:
scan-mybatis-plus:
enabled: true #是否记录mybatis-plus/mybatis的mapper日志 默认:false
mybatis-plus目前支持自动记录修改接口有两种
public interface AccountMapper extends BaseMapper<Account> {
}
注意:使用mybatis-plus框架定义Dao/mapper必须继承mybatis-plus的BaseMapper,泛型不要省略
// 修改方式1: mybatis-plus提供updateById方法, 根据主键Id更新对象
accountMapper.updateById(account);
// 修改方式2: mybatis-plus提供update方法,修改数据和查询对象分离,命中多条也支持
accountMapper.update(account, Wrappers.<Account>lambdaQuery()
.eq(Account::getId, account.getId()));
mybatis目前支持自动记录快照支持按实体修改
public interface AccountMapper {
int updateByPrimaryKey(Account account);
}
注意: 接口命名以Dap/Mapper结尾,参数为数据库对应的实体对象。
//AccountMapper.xml中自定义方法updateByPrimaryKey, 入参为对象
accountMapper.updateByPrimaryKey(account);
2023-08-11 11:25:18.177 INFO [sample-service,ff13310320ab4b2cb2cbb6351b3b4865] 39192 --- [nio-8000-exec-3] c.e.e.core.handler.DefaultLogHandler : [easy-log][AccountMapper.updateById(entity)]--begin operator:[null] param:{"email":"aaa@qq.com","id":10001,"name":"dddd"}
2023-08-11 11:25:18.208 INFO [sample-service,ff13310320ab4b2cb2cbb6351b3b4865] 39192 --- [nio-8000-exec-3] c.e.e.m.i.DataSnapshotInterceptor : [easy-log][AccountMapper.updateById(entity)] sql ==> UPDATE account SET name='dddd', email='aaa@qq.com' WHERE id=10001
2023-08-11 11:25:18.222 INFO [sample-service,ff13310320ab4b2cb2cbb6351b3b4865] 39192 --- [nio-8000-exec-3] c.e.e.m.i.DataSnapshotInterceptor : [easy-log][AccountMapper.updateById(entity)] original data <== [{"email":"aaa@qq.com","id":10001,"name":"李四","username":"lisi"}]
2023-08-11 11:25:18.231 INFO [sample-service,ff13310320ab4b2cb2cbb6351b3b4865] 39192 --- [nio-8000-exec-3] c.e.e.core.handler.DefaultLogHandler : [easy-log][AccountMapper.updateById(entity)]--end timeout:54 dataSnapshot:updated:[{"fieldName":"name","newValue":"dddd","oldValue":"李四"}]
2023-08-11 11:27:00.696 INFO [sample-service,2b2b9e544c8c42768f569368f772a16e] 39192 --- [nio-8000-exec-5] c.e.e.core.handler.DefaultLogHandler : [easy-log][AccountServiceImpl.deleteAccount(id)]--begin operator:[null] param:10001
2023-08-11 11:27:00.696 INFO [sample-service,2b2b9e544c8c42768f569368f772a16e] 39192 --- [nio-8000-exec-5] c.e.e.core.handler.DefaultLogHandler : [easy-log][AccountMapper.deleteById(id)]--begin operator:[null] param:10001
2023-08-11 11:27:00.696 INFO [sample-service,2b2b9e544c8c42768f569368f772a16e] 39192 --- [nio-8000-exec-5] c.e.e.m.i.DataSnapshotInterceptor : [easy-log][AccountMapper.deleteById(id)] sql ==> DELETE FROM account WHERE id=10001
2023-08-11 11:27:00.700 INFO [sample-service,2b2b9e544c8c42768f569368f772a16e] 39192 --- [nio-8000-exec-5] c.e.e.m.i.DataSnapshotInterceptor : [easy-log][AccountMapper.deleteById(id)] original data <== [{"password":"1234","sex":"","phone":"12345678912","username":"lisi","id":10001,"createTime":1644832562000,"updateTime":1645437371000,"email":"aaa@qq.com","name":"方式4"}]
2023-08-11 11:27:00.701 INFO [sample-service,2b2b9e544c8c42768f569368f772a16e] 39192 --- [nio-8000-exec-5] c.e.e.core.handler.DefaultLogHandler : [easy-log][AccountMapper.deleteById(id)]--end timeout:5 dataSnapshot:deleted:[{"password":"1234","sex":"","phone":"12345678912","username":"lisi","id":10001,"createTime":1644832562000,"updateTime":1645437371000,"email":"aaa@qq.com","name":"方式4"}]
2023-08-11 11:27:00.701 INFO [sample-service,2b2b9e544c8c42768f569368f772a16e] 39192 --- [nio-8000-exec-5] c.e.e.core.handler.DefaultLogHandler : [easy-log][AccountServiceImpl.deleteAccount(id)]--end timeout:5
详细入门教程/扩展用法/框架原理参考 《easy-log使用教程》
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。