# 系统日志

# 日志概述

在系统中日志是必不可少的存在,完善的系统日志对系统故障的追中溯源以及故障的解决起到了非常重要的作用,因为在系统框架设计支持,就对系统日志这块做了详细的规划,既要保证不增加系统性能的开销,又要保证系统日志的记录不增加代码量,因此我们最终采用了 AOP 切面的方式对系统日志进行记录(包括:登录日志),好处在于可以异步实现日志的记录又不破坏原本方法的结构,实现了零耦合,增加了系统的可塑性;

# 日志注解

package com.javaweb.common.annotation;

import com.javaweb.common.enums.LogType;
import com.javaweb.common.enums.OperType;

import java.lang.annotation.*;

/**
 * 自定义操作日志注解
 */
@Target({ElementType.PARAMETER, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Log {

    /**
     * 模块
     */
    String title() default "";

    /**
     * 日志类型
     */
    LogType logType() default LogType.OTHER;

    /**
     * 操作人类别
     */
    OperType operType() default OperType.MANAGE;

    /**
     * 是否保存请求的参数
     */
    boolean isSaveRequestData() default true;

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

# 使用方法

AOP切面日志使用时只需在控制器的业务方法上加入注解及相应的日志参数即可,如下:

/**
 * 添加职级
 *
 * @param entity 实体对象
 * @return
 */
@Log(title = "职级管理", logType = LogType.INSERT)
@PostMapping("/add")
@RequiresPermissions("sys:level:add")
public JsonResult add(@RequestBody Level entity) {
    return levelService.edit(entity);
}

/**
 * 编辑职级
 *
 * @param entity 实体对象
 * @return
 */
@Log(title = "职级管理", logType = LogType.UPDATE)
@PutMapping("/edit")
@RequiresPermissions("sys:level:edit")
public JsonResult edit(@RequestBody Level entity) {
    return levelService.edit(entity);
}

/**
 * 删除职级
 *
 * @param levelIds 职级ID
 * @return
 */
@Log(title = "职级管理", logType = LogType.DELETE)
@DeleteMapping("/delete/{levelIds}")
@RequiresPermissions("sys:level:delete")
public JsonResult delete(@PathVariable("levelIds") Integer[] levelIds) {
    return levelService.deleteByIds(levelIds);
}

/**
 * 设置状态
 *
 * @param entity 实体对象
 * @return
 */
@Log(title = "职级管理", logType = LogType.STATUS)
@PutMapping("/status")
@RequiresPermissions("sys:level:status")
public JsonResult status(@RequestBody Level entity) {
    return levelService.setStatus(entity);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51

特别提示

日志记录的类型可根据具体的业务进行自由变更,即 LogType 参数是可以根据业务类型进行更改的,常规的日志类型有:插入(INSERT)修改(UPDATE)删除(DELETE)状态设置(STATUS)导出(EXPORT)导入(IMPORT)