系统日志/业务日志

This commit is contained in:
cwchen 2024-02-29 11:02:22 +08:00
parent eadf29d27f
commit ce8a3760e3
6 changed files with 42 additions and 34 deletions

View File

@ -15,10 +15,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.JoinPoint; import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.*;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature; import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -97,15 +94,11 @@ public class OperLogAspect {
// 从获取RequestAttributes中获取HttpServletRequest的信息 // 从获取RequestAttributes中获取HttpServletRequest的信息
HttpServletRequest request = (HttpServletRequest) requestAttributes HttpServletRequest request = (HttpServletRequest) requestAttributes
.resolveReference(RequestAttributes.REFERENCE_REQUEST); .resolveReference(RequestAttributes.REFERENCE_REQUEST);
// HttpServletRequest request = RequestHolder.getHttpServletRequest();
MethodSignature signature = (MethodSignature) joinPoint.getSignature(); MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod(); Method method = signature.getMethod();
//获取注解 //获取注解
Log aopLog = method.getAnnotation(Log.class); Log aopLog = method.getAnnotation(Log.class);
SysLog sysLog = new SysLog(); SysLog sysLog = new SysLog();
// 获取当前的用户 // 获取当前的用户
LoginUser loginUser = SecurityUtils.getLoginUser(); LoginUser loginUser = SecurityUtils.getLoginUser();
@ -119,54 +112,46 @@ public class OperLogAspect {
sysLog.setOperUri(request.getRequestURI()); sysLog.setOperUri(request.getRequestURI());
//操作结果 成功/失败 //操作结果 成功/失败
sysLog.setResult(BusinessStatus.SUCCESS.ordinal()); sysLog.setResult(BusinessStatus.SUCCESS.ordinal());
sysLog.setTimes(time + ""); sysLog.setTimes(time != null ? time + "" : null);
// operLog.setOperUserAgent(CommonUtil.getUserAgent(request));
// 请求的地址 // 请求的地址
String ip = IpUtils.getIpAddr(ServletUtils.getRequest()); String ip = IpUtils.getIpAddr(ServletUtils.getRequest());
sysLog.setIp(ip); sysLog.setIp(ip);
// 返回参数
// sysLog.setOperResponseParam(JSON.toJSONString(jsonResult));
// 设置方法名称 // 设置方法名称
String className = joinPoint.getTarget().getClass().getName(); String className = joinPoint.getTarget().getClass().getName();
String methodName = joinPoint.getSignature().getName(); String methodName = joinPoint.getSignature().getName();
//设置请求方法名 //设置请求方法名
sysLog.setMethod(className + "." + methodName + "()"); sysLog.setMethod(className + "." + methodName + "()");
// 设置请求方式GET..
// operLog.setRequestMethod(request.getMethod());
// 处理设置注解上的参数 // 处理设置注解上的参数
getControllerMethodDescription(joinPoint, aopLog, sysLog); getControllerMethodDescription(joinPoint, aopLog, sysLog);
//利用是否有异常定性记录失败信息 //利用是否有异常定性记录失败信息
if (e != null) { if (e != null) {
sysLog.setResult(BusinessStatus.FAIL.ordinal());//失败 //失败
sysLog.setFailureReason(e.getClass().getName()); sysLog.setResult(BusinessStatus.FAIL.ordinal());
System.err.println(e.getClass().getName());
sysLog.setFailureReason(StringUtils.substring(e.getMessage(), 0, 2000));
// operLog.setErrorMsg(ThrowableUtil.getStackTrace(e));
log.error("耗时:{} 用户id:{} 用户名username: {} 请求ip:{} User-Agent:{} 方法路径:{} 方法参数:{}", log.error("耗时:{} 用户id:{} 用户名username: {} 请求ip:{} User-Agent:{} 方法路径:{} 方法参数:{}",
sysLog.getTimes(), sysLog.getTimes(),
sysLog.getUserId(), sysLog.getUserId(),
sysLog.getOperaUserName(), sysLog.getOperaUserName(),
sysLog.getIp(), sysLog.getIp(),
// operLog.getOperUserAgent(), null,
methodName, methodName,
sysLog.getParams()); sysLog.getParams());
log.error("==控制层方法通知异常=="); log.error("==控制层方法通知异常==");
log.error("异常信息:{}", e.getMessage()); log.error("异常信息:{}", e.getMessage());
//e.printStackTrace();
return;
} }
log.info(JSON.toJSONString(sysLog)); log.info(JSON.toJSONString(sysLog));
// 保存数据库 // 保存数据库
//可以借助异步持久化AsyncManager.me().execute(AsyncFactory.recordOper(operLog));
log.info("耗时:{} 用户id:{} 用户名username: {} 请求ip:{} User-Agent:{} 方法路径:{} 方法参数:{}", log.info("耗时:{} 用户id:{} 用户名username: {} 请求ip:{} User-Agent:{} 方法路径:{} 方法参数:{}",
sysLog.getTimes(), sysLog.getTimes(),
sysLog.getUserId(), sysLog.getUserId(),
sysLog.getOperaUserName(), sysLog.getOperaUserName(),
sysLog.getIp(), sysLog.getIp(),
// sysLog.getOperUserAgent(), null,
methodName, methodName,
sysLog.getParams()); sysLog.getParams());
asyncLogService.addSaveSysLog(sysLog); asyncLogService.addSaveSysLog(sysLog);
@ -192,7 +177,7 @@ public class OperLogAspect {
sysLog.setOperType(log.grade().getInfo()); sysLog.setOperType(log.grade().getInfo());
sysLog.setOperateDetail(log.details()); sysLog.setOperateDetail(log.details());
sysLog.setOperTime(DateTimeHelper.getNowTime()); sysLog.setOperTime(DateTimeHelper.getNowTime());
sysLog.setLogType(Objects.equals(log.type(),constantArr[0]) ? 1 : 0); sysLog.setLogType(Objects.equals(log.type(), constantArr[0]) ? 1 : 0);
} else { } else {
//用于无注解的控制层方法 异常抛出 记录 //用于无注解的控制层方法 异常抛出 记录
sysLog.setModel("未知模块"); sysLog.setModel("未知模块");
@ -265,18 +250,21 @@ public class OperLogAspect {
} }
/**
* 用于未定义log注解抛出异常也需要记录耗时情况
* @param joinPoint
/* * @description
//用于未定义log注解抛出异常也需要记录耗时情况 * @author cwchen
@Before("operExceptionLogPoinCut()") * @date 2024/2/29 10:51
public void beforeMethod(JoinPoint joinPoint){ */
@Before("operExceptionLogPointCut()")
public void beforeMethod(JoinPoint joinPoint) {
currentTime.set(System.currentTimeMillis()); currentTime.set(System.currentTimeMillis());
} }
@After("operExceptionLogPoinCut()")
public void afterMethod(JoinPoint joinPoint){ @After("operExceptionLogPointCut()")
public void afterMethod(JoinPoint joinPoint) {
currentTime.remove(); currentTime.remove();
}*/ }
} }

View File

@ -13,6 +13,7 @@ public enum OperationType {
UPDATE_SYS("修改系统数据"), UPDATE_SYS("修改系统数据"),
DELETE_SYS("删除系统数据"), DELETE_SYS("删除系统数据"),
QUERY_SYS("查询系统数据"), QUERY_SYS("查询系统数据"),
RESET_USER_PWD("重置系统用户密码"),
COPY_LOG("备份日志"), COPY_LOG("备份日志"),
RETURN_LOG("恢复日志"), RETURN_LOG("恢复日志"),
ERR_SYS("错误日志"), ERR_SYS("错误日志"),

View File

@ -1,5 +1,6 @@
package com.securitycontrol.system.base.controller; package com.securitycontrol.system.base.controller;
import com.securitycontrol.common.core.exception.ServiceException;
import com.securitycontrol.common.core.web.controller.BaseController; import com.securitycontrol.common.core.web.controller.BaseController;
import com.securitycontrol.common.core.web.domain.AjaxResult; import com.securitycontrol.common.core.web.domain.AjaxResult;
import com.securitycontrol.common.core.web.page.TableDataInfo; import com.securitycontrol.common.core.web.page.TableDataInfo;

View File

@ -3,6 +3,8 @@ package com.securitycontrol.system.base.controller;
import com.securitycontrol.common.core.web.controller.BaseController; import com.securitycontrol.common.core.web.controller.BaseController;
import com.securitycontrol.common.core.web.domain.AjaxResult; import com.securitycontrol.common.core.web.domain.AjaxResult;
import com.securitycontrol.common.core.web.page.TableDataInfo; import com.securitycontrol.common.core.web.page.TableDataInfo;
import com.securitycontrol.common.log.annotation.Log;
import com.securitycontrol.common.log.enums.OperationType;
import com.securitycontrol.entity.system.dto.UserDto; import com.securitycontrol.entity.system.dto.UserDto;
import com.securitycontrol.entity.system.vo.UserVo; import com.securitycontrol.entity.system.vo.UserVo;
import com.securitycontrol.system.base.service.IUserService; import com.securitycontrol.system.base.service.IUserService;
@ -35,12 +37,14 @@ public class UserController extends BaseController {
@ApiOperation(value = "新增用户") @ApiOperation(value = "新增用户")
@PostMapping("addUser") @PostMapping("addUser")
@Log(title = "系统管理", menu = "系统管理->用户管理", grade = OperationType.ADD_SYS, details = "新增用户", type = "系统日志")
public AjaxResult addUser(@RequestBody UserVo vo){ public AjaxResult addUser(@RequestBody UserVo vo){
return service.addOrUpdateUser(vo); return service.addOrUpdateUser(vo);
} }
@ApiOperation(value = "修改用户") @ApiOperation(value = "修改用户")
@PostMapping("editUser") @PostMapping("editUser")
@Log(title = "系统管理", menu = "系统管理->用户管理", grade = OperationType.UPDATE_SYS, details = "修改用户", type = "系统日志")
public AjaxResult editUser(@RequestBody UserVo vo){ public AjaxResult editUser(@RequestBody UserVo vo){
return service.addOrUpdateUser(vo); return service.addOrUpdateUser(vo);
} }
@ -53,12 +57,14 @@ public class UserController extends BaseController {
@ApiOperation(value = "删除用户") @ApiOperation(value = "删除用户")
@PostMapping("delUser") @PostMapping("delUser")
@Log(title = "系统管理", menu = "系统管理->用户管理", grade = OperationType.DELETE_SYS, details = "删除用户", type = "系统日志")
public AjaxResult delUser(UserDto dto){ public AjaxResult delUser(UserDto dto){
return service.delUser(dto); return service.delUser(dto);
} }
@ApiOperation(value = "重置密码") @ApiOperation(value = "重置密码")
@PostMapping("editPwd") @PostMapping("editPwd")
@Log(title = "系统管理", menu = "系统管理->用户管理", grade = OperationType.RESET_USER_PWD, details = "重置密码", type = "系统日志")
public AjaxResult editPwd(@RequestBody UserVo vo){ public AjaxResult editPwd(@RequestBody UserVo vo){
return service.editPwd(vo); return service.editPwd(vo);
} }

View File

@ -2,6 +2,8 @@ package com.securitycontrol.system.controller;
import com.securitycontrol.common.core.domain.Result; import com.securitycontrol.common.core.domain.Result;
import com.securitycontrol.common.core.web.controller.BaseController; import com.securitycontrol.common.core.web.controller.BaseController;
import com.securitycontrol.common.log.annotation.Log;
import com.securitycontrol.common.log.enums.OperationType;
import com.securitycontrol.entity.system.dto.DictDto; import com.securitycontrol.entity.system.dto.DictDto;
import com.securitycontrol.entity.system.vo.DictVo; import com.securitycontrol.entity.system.vo.DictVo;
import com.securitycontrol.system.service.DictService; import com.securitycontrol.system.service.DictService;
@ -30,6 +32,7 @@ public class DictController extends BaseController {
* @return * @return
*/ */
@GetMapping("getDictList") @GetMapping("getDictList")
@Log(title = "系统管理", menu = "系统管理->字典管理", grade = OperationType.QUERY_SYS, details = "查询字典", type = "系统日志")
public Result<List<DictVo>> getDictList(@Valid DictDto dto) { public Result<List<DictVo>> getDictList(@Valid DictDto dto) {
return service.getDictList(dto); return service.getDictList(dto);
} }
@ -43,6 +46,7 @@ public class DictController extends BaseController {
* @return * @return
*/ */
@PostMapping("addDict") @PostMapping("addDict")
@Log(title = "系统管理", menu = "系统管理->字典管理", grade = OperationType.ADD_SYS, details = "新增字典", type = "系统日志")
public Result<String> addDict(@RequestBody @Valid DictVo dto) { public Result<String> addDict(@RequestBody @Valid DictVo dto) {
return service.addDict(dto); return service.addDict(dto);
} }
@ -54,6 +58,7 @@ public class DictController extends BaseController {
* @return * @return
*/ */
@PostMapping("updateDict") @PostMapping("updateDict")
@Log(title = "系统管理", menu = "系统管理->字典管理", grade = OperationType.UPDATE_SYS, details = "修改字典", type = "系统日志")
public Result<String> updateDict(@RequestBody @Valid DictVo dto) { public Result<String> updateDict(@RequestBody @Valid DictVo dto) {
return service.updateDict(dto); return service.updateDict(dto);
} }
@ -65,6 +70,7 @@ public class DictController extends BaseController {
* @return * @return
*/ */
@PostMapping("delDict") @PostMapping("delDict")
@Log(title = "系统管理", menu = "系统管理->字典管理", grade = OperationType.DELETE_SYS, details = "删除字典", type = "系统日志")
public Result<String> delDict(@RequestBody DictDto dto) { public Result<String> delDict(@RequestBody DictDto dto) {
return service.delDict(dto); return service.delDict(dto);
} }

View File

@ -3,6 +3,8 @@ package com.securitycontrol.system.controller;
import com.securitycontrol.common.core.domain.Result; import com.securitycontrol.common.core.domain.Result;
import com.securitycontrol.common.core.web.controller.BaseController; import com.securitycontrol.common.core.web.controller.BaseController;
import com.securitycontrol.common.core.web.page.TableDataInfo; import com.securitycontrol.common.core.web.page.TableDataInfo;
import com.securitycontrol.common.log.annotation.Log;
import com.securitycontrol.common.log.enums.OperationType;
import com.securitycontrol.entity.system.dto.OrgDto; import com.securitycontrol.entity.system.dto.OrgDto;
import com.securitycontrol.entity.system.vo.OrgVo; import com.securitycontrol.entity.system.vo.OrgVo;
import com.securitycontrol.system.service.OrgService; import com.securitycontrol.system.service.OrgService;
@ -30,6 +32,7 @@ public class OrgController extends BaseController {
* @return * @return
*/ */
@GetMapping("getOrgList") @GetMapping("getOrgList")
@Log(title = "系统管理", menu = "系统管理->组织机构", grade = OperationType.QUERY_SYS, details = "查询组织机构", type = "系统日志")
public Result<List<OrgVo>> getOrgList(@Valid OrgDto dto) { public Result<List<OrgVo>> getOrgList(@Valid OrgDto dto) {
return service.getOrgList(dto); return service.getOrgList(dto);
} }
@ -42,6 +45,7 @@ public class OrgController extends BaseController {
* @return * @return
*/ */
@PostMapping("addOrg") @PostMapping("addOrg")
@Log(title = "系统管理", menu = "系统管理->组织机构", grade = OperationType.ADD_SYS, details = "新增组织机构", type = "系统日志")
public Result<String> addOrg(@RequestBody @Valid OrgVo dto) { public Result<String> addOrg(@RequestBody @Valid OrgVo dto) {
return service.addOrg(dto); return service.addOrg(dto);
} }
@ -53,6 +57,7 @@ public class OrgController extends BaseController {
* @return * @return
*/ */
@PostMapping("updateOrg") @PostMapping("updateOrg")
@Log(title = "系统管理", menu = "系统管理->组织机构", grade = OperationType.UPDATE_SYS, details = "修改组织机构", type = "系统日志")
public Result<String> updateOrg(@RequestBody @Valid OrgVo dto) { public Result<String> updateOrg(@RequestBody @Valid OrgVo dto) {
return service.updateOrg(dto); return service.updateOrg(dto);
} }
@ -64,6 +69,7 @@ public class OrgController extends BaseController {
* @return * @return
*/ */
@PostMapping("delOrg") @PostMapping("delOrg")
@Log(title = "系统管理", menu = "系统管理->组织机构", grade = OperationType.DELETE_SYS, details = "删除组织机构", type = "系统日志")
public Result<String> delOrg(@RequestBody OrgDto dto) { public Result<String> delOrg(@RequestBody OrgDto dto) {
return service.delOrg(dto); return service.delOrg(dto);
} }