## 系統日志
利用`spring`框架中`aop`,我們可以實現業務代碼與系統級服務進行解耦,例如日志記錄、事務及其他安全業務等,可以使得我們的工程更加容易維護、優雅。如何在系統中添加相應的日志呢?
##### 添加依賴
```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
```
##### 自定義注解
```java
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SysLog {
String value() default "";
}
```
##### 配置切面
```java
@Aspect
@Component
public class SysLogAspect {
@Autowired
private SysLogService sysLogService;
private static Logger logger = LoggerFactory.getLogger(SysLogAspect.class);
@Around("@annotation(sysLog)")
public Object around(ProceedingJoinPoint joinPoint,com.yami.shop.common.annotation.SysLog sysLog) throws Throwable {
long beginTime = SystemClock.now();
//執行方法
Object result = joinPoint.proceed();
//執行時長(毫秒)
long time = SystemClock.now() - beginTime;
SysLog sysLogEntity = new SysLog();
if(sysLog != null){
//注解上的描述
sysLogEntity.setOperation(sysLog.value());
}
//請求的方法名
String className = joinPoint.getTarget().getClass().getName();
String methodName = joinPoint.getSignature().getName();
sysLogEntity.setMethod(className + "." + methodName + "()");
//請求的參數
Object[] args = joinPoint.getArgs();
String params = Json.toJsonString(args[0]);
sysLogEntity.setParams(params);
//設置IP地址
sysLogEntity.setIp(IPHelper.getIpAddr());
//用戶名
String username = SecurityUtils.getSysUser().getUsername();
sysLogEntity.setUsername(username);
sysLogEntity.setTime(time);
sysLogEntity.setCreateDate(new Date());
//保存系統日志
sysLogService.save(sysLogEntity);
return result;
}
}
```
將自定義的注解作為切入點,參數是`ProceedingJoinPoint`和`sysLog`,`ProceedingJoinPoint`用來獲取當前執行的方法,`syslog`用來獲取注解里面的值。
#### 在需要記錄日志的方法上,添加注解`@SysLog(value)`
```java
@SysLog("修改角色")
@PutMapping
@PreAuthorize("@pms.hasPermission('sys:role:update')")
public ResponseEntity<Void> update(@RequestBody SysRole role){
sysRoleService.updateRoleAndRoleMenu(role);
return ResponseEntity.ok().build();
}
```
當操作這個方法時,將會被記錄到數據庫中,在日志管理中能看到相應操作的內容。

- 開發環境準備
- 基本開發手冊
- 項目目錄結構
- 權限管理
- 通用分頁表格
- Swagger文檔
- undertow容器
- 對xss攻擊的防御
- 分布式鎖
- 統一的系統日志
- 統一驗證
- 統一異常處理
- 文件上傳下載
- 一對多、多對多分頁
- 認證與授權
- 從授權開始看源碼
- 自己寫個授權的方法-開源版
- 商城表設計
- 商品信息
- 商品分組
- 購物車
- 訂單
- 地區管理
- 運費模板
- 接口設計
- 必讀
- 購物車的設計
- 訂單設計-確認訂單
- 訂單設計-提交訂單
- 訂單設計-支付
- 生產環境
- nginx安裝與跨域配置
- 安裝mysql
- 安裝redis
- 傳統方式部署項目
- docker
- 使用docker部署商城
- centos jdk安裝
- docker centos 安裝
- Docker Compose 安裝與卸載
- docker 鏡像的基本操作
- docker 容器的基本操作
- 通過yum安裝maven
- 常見問題