log模块代码优化

pull/800/head
Zheng Jie 2023-06-12 13:35:39 +08:00
parent 6c5e7061fe
commit 4e10329c42
11 changed files with 86 additions and 86 deletions

View File

@ -16,8 +16,8 @@
package me.zhengjie.aspect;
import lombok.extern.slf4j.Slf4j;
import me.zhengjie.domain.Log;
import me.zhengjie.service.LogService;
import me.zhengjie.domain.SysLog;
import me.zhengjie.service.SysLogService;
import me.zhengjie.utils.RequestHolder;
import me.zhengjie.utils.SecurityUtils;
import me.zhengjie.utils.StringUtils;
@ -40,12 +40,12 @@ import javax.servlet.http.HttpServletRequest;
@Slf4j
public class LogAspect {
private final LogService logService;
private final SysLogService sysLogService;
ThreadLocal<Long> currentTime = new ThreadLocal<>();
public LogAspect(LogService logService) {
this.logService = logService;
public LogAspect(SysLogService sysLogService) {
this.sysLogService = sysLogService;
}
/**
@ -66,10 +66,10 @@ public class LogAspect {
Object result;
currentTime.set(System.currentTimeMillis());
result = joinPoint.proceed();
Log log = new Log("INFO",System.currentTimeMillis() - currentTime.get());
SysLog sysLog = new SysLog("INFO",System.currentTimeMillis() - currentTime.get());
currentTime.remove();
HttpServletRequest request = RequestHolder.getHttpServletRequest();
logService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request),joinPoint, log);
sysLogService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request),joinPoint, sysLog);
return result;
}
@ -81,11 +81,11 @@ public class LogAspect {
*/
@AfterThrowing(pointcut = "logPointcut()", throwing = "e")
public void logAfterThrowing(JoinPoint joinPoint, Throwable e) {
Log log = new Log("ERROR",System.currentTimeMillis() - currentTime.get());
SysLog sysLog = new SysLog("ERROR",System.currentTimeMillis() - currentTime.get());
currentTime.remove();
log.setExceptionDetail(ThrowableUtil.getStackTrace(e).getBytes());
sysLog.setExceptionDetail(ThrowableUtil.getStackTrace(e).getBytes());
HttpServletRequest request = RequestHolder.getHttpServletRequest();
logService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request), (ProceedingJoinPoint)joinPoint, log);
sysLogService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request), (ProceedingJoinPoint)joinPoint, sysLog);
}
public String getUsername() {

View File

@ -32,7 +32,7 @@ import java.sql.Timestamp;
@Setter
@Table(name = "sys_log")
@NoArgsConstructor
public class Log implements Serializable {
public class SysLog implements Serializable {
@Id
@Column(name = "log_id")
@ -73,7 +73,7 @@ public class Log implements Serializable {
@CreationTimestamp
private Timestamp createTime;
public Log(String logType, Long time) {
public SysLog(String logType, Long time) {
this.logType = logType;
this.time = time;
}

View File

@ -15,7 +15,7 @@
*/
package me.zhengjie.repository;
import me.zhengjie.domain.Log;
import me.zhengjie.domain.SysLog;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
@ -27,7 +27,7 @@ import org.springframework.stereotype.Repository;
* @date 2018-11-24
*/
@Repository
public interface LogRepository extends JpaRepository<Log,Long>, JpaSpecificationExecutor<Log> {
public interface LogRepository extends JpaRepository<SysLog,Long>, JpaSpecificationExecutor<SysLog> {
/**
*

View File

@ -19,8 +19,8 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import me.zhengjie.annotation.Log;
import me.zhengjie.service.LogService;
import me.zhengjie.service.dto.LogQueryCriteria;
import me.zhengjie.service.SysLogService;
import me.zhengjie.service.dto.SysLogQueryCriteria;
import me.zhengjie.utils.SecurityUtils;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
@ -38,63 +38,63 @@ import java.io.IOException;
@RequiredArgsConstructor
@RequestMapping("/api/logs")
@Api(tags = "系统:日志管理")
public class LogController {
public class SysLogController {
private final LogService logService;
private final SysLogService sysLogService;
@Log("导出数据")
@ApiOperation("导出数据")
@GetMapping(value = "/download")
@PreAuthorize("@el.check()")
public void exportLog(HttpServletResponse response, LogQueryCriteria criteria) throws IOException {
public void exportLog(HttpServletResponse response, SysLogQueryCriteria criteria) throws IOException {
criteria.setLogType("INFO");
logService.download(logService.queryAll(criteria), response);
sysLogService.download(sysLogService.queryAll(criteria), response);
}
@Log("导出错误数据")
@ApiOperation("导出错误数据")
@GetMapping(value = "/error/download")
@PreAuthorize("@el.check()")
public void exportErrorLog(HttpServletResponse response, LogQueryCriteria criteria) throws IOException {
public void exportErrorLog(HttpServletResponse response, SysLogQueryCriteria criteria) throws IOException {
criteria.setLogType("ERROR");
logService.download(logService.queryAll(criteria), response);
sysLogService.download(sysLogService.queryAll(criteria), response);
}
@GetMapping
@ApiOperation("日志查询")
@PreAuthorize("@el.check()")
public ResponseEntity<Object> queryLog(LogQueryCriteria criteria, Pageable pageable){
public ResponseEntity<Object> queryLog(SysLogQueryCriteria criteria, Pageable pageable){
criteria.setLogType("INFO");
return new ResponseEntity<>(logService.queryAll(criteria,pageable), HttpStatus.OK);
return new ResponseEntity<>(sysLogService.queryAll(criteria,pageable), HttpStatus.OK);
}
@GetMapping(value = "/user")
@ApiOperation("用户日志查询")
public ResponseEntity<Object> queryUserLog(LogQueryCriteria criteria, Pageable pageable){
public ResponseEntity<Object> queryUserLog(SysLogQueryCriteria criteria, Pageable pageable){
criteria.setLogType("INFO");
criteria.setUsername(SecurityUtils.getCurrentUsername());
return new ResponseEntity<>(logService.queryAllByUser(criteria,pageable), HttpStatus.OK);
return new ResponseEntity<>(sysLogService.queryAllByUser(criteria,pageable), HttpStatus.OK);
}
@GetMapping(value = "/error")
@ApiOperation("错误日志查询")
@PreAuthorize("@el.check()")
public ResponseEntity<Object> queryErrorLog(LogQueryCriteria criteria, Pageable pageable){
public ResponseEntity<Object> queryErrorLog(SysLogQueryCriteria criteria, Pageable pageable){
criteria.setLogType("ERROR");
return new ResponseEntity<>(logService.queryAll(criteria,pageable), HttpStatus.OK);
return new ResponseEntity<>(sysLogService.queryAll(criteria,pageable), HttpStatus.OK);
}
@GetMapping(value = "/error/{id}")
@ApiOperation("日志异常详情查询")
@PreAuthorize("@el.check()")
public ResponseEntity<Object> queryErrorLogDetail(@PathVariable Long id){
return new ResponseEntity<>(logService.findByErrDetail(id), HttpStatus.OK);
return new ResponseEntity<>(sysLogService.findByErrDetail(id), HttpStatus.OK);
}
@DeleteMapping(value = "/del/error")
@Log("删除所有ERROR日志")
@ApiOperation("删除所有ERROR日志")
@PreAuthorize("@el.check()")
public ResponseEntity<Object> delAllErrorLog(){
logService.delAllByError();
sysLogService.delAllByError();
return new ResponseEntity<>(HttpStatus.OK);
}
@ -103,7 +103,7 @@ public class LogController {
@ApiOperation("删除所有INFO日志")
@PreAuthorize("@el.check()")
public ResponseEntity<Object> delAllInfoLog(){
logService.delAllByInfo();
sysLogService.delAllByInfo();
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@ -15,8 +15,8 @@
*/
package me.zhengjie.service;
import me.zhengjie.domain.Log;
import me.zhengjie.service.dto.LogQueryCriteria;
import me.zhengjie.domain.SysLog;
import me.zhengjie.service.dto.SysLogQueryCriteria;
import org.aspectj.lang.ProceedingJoinPoint;
import org.springframework.data.domain.Pageable;
import org.springframework.scheduling.annotation.Async;
@ -29,7 +29,7 @@ import java.util.List;
* @author Zheng Jie
* @date 2018-11-24
*/
public interface LogService {
public interface SysLogService {
/**
*
@ -37,14 +37,14 @@ public interface LogService {
* @param pageable
* @return /
*/
Object queryAll(LogQueryCriteria criteria, Pageable pageable);
Object queryAll(SysLogQueryCriteria criteria, Pageable pageable);
/**
*
* @param criteria
* @return /
*/
List<Log> queryAll(LogQueryCriteria criteria);
List<SysLog> queryAll(SysLogQueryCriteria criteria);
/**
*
@ -52,7 +52,7 @@ public interface LogService {
* @param pageable
* @return -
*/
Object queryAllByUser(LogQueryCriteria criteria, Pageable pageable);
Object queryAllByUser(SysLogQueryCriteria criteria, Pageable pageable);
/**
*
@ -60,10 +60,10 @@ public interface LogService {
* @param browser
* @param ip IP
* @param joinPoint /
* @param log
* @param sysLog
*/
@Async
void save(String username, String browser, String ip, ProceedingJoinPoint joinPoint, Log log);
void save(String username, String browser, String ip, ProceedingJoinPoint joinPoint, SysLog sysLog);
/**
*
@ -74,11 +74,11 @@ public interface LogService {
/**
*
* @param logs
* @param sysLogs
* @param response /
* @throws IOException /
*/
void download(List<Log> logs, HttpServletResponse response) throws IOException;
void download(List<SysLog> sysLogs, HttpServletResponse response) throws IOException;
/**
*

View File

@ -24,7 +24,7 @@ import java.sql.Timestamp;
* @date 2019-5-22
*/
@Data
public class LogErrorDTO implements Serializable {
public class SysLogErrorDto implements Serializable {
private Long id;

View File

@ -26,7 +26,7 @@ import java.util.List;
* @date 2019-6-4 09:23:07
*/
@Data
public class LogQueryCriteria {
public class SysLogQueryCriteria {
@Query(blurry = "username,description,address,requestIp,method,params")
private String blurry;

View File

@ -24,7 +24,7 @@ import java.sql.Timestamp;
* @date 2019-5-22
*/
@Data
public class LogSmallDTO implements Serializable {
public class SysLogSmallDto implements Serializable {
private String description;

View File

@ -20,10 +20,10 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.RequiredArgsConstructor;
import me.zhengjie.domain.Log;
import me.zhengjie.domain.SysLog;
import me.zhengjie.repository.LogRepository;
import me.zhengjie.service.LogService;
import me.zhengjie.service.dto.LogQueryCriteria;
import me.zhengjie.service.SysLogService;
import me.zhengjie.service.dto.SysLogQueryCriteria;
import me.zhengjie.service.mapstruct.LogErrorMapper;
import me.zhengjie.service.mapstruct.LogSmallMapper;
import me.zhengjie.utils.*;
@ -48,14 +48,14 @@ import java.util.*;
*/
@Service
@RequiredArgsConstructor
public class LogServiceImpl implements LogService {
public class SysLogServiceImpl implements SysLogService {
private final LogRepository logRepository;
private final LogErrorMapper logErrorMapper;
private final LogSmallMapper logSmallMapper;
@Override
public Object queryAll(LogQueryCriteria criteria, Pageable pageable) {
Page<Log> page = logRepository.findAll(((root, criteriaQuery, cb) -> QueryHelp.getPredicate(root, criteria, cb)), pageable);
public Object queryAll(SysLogQueryCriteria criteria, Pageable pageable) {
Page<SysLog> page = logRepository.findAll(((root, criteriaQuery, cb) -> QueryHelp.getPredicate(root, criteria, cb)), pageable);
String status = "ERROR";
if (status.equals(criteria.getLogType())) {
return PageUtil.toPage(page.map(logErrorMapper::toDto));
@ -64,20 +64,20 @@ public class LogServiceImpl implements LogService {
}
@Override
public List<Log> queryAll(LogQueryCriteria criteria) {
public List<SysLog> queryAll(SysLogQueryCriteria criteria) {
return logRepository.findAll(((root, criteriaQuery, cb) -> QueryHelp.getPredicate(root, criteria, cb)));
}
@Override
public Object queryAllByUser(LogQueryCriteria criteria, Pageable pageable) {
Page<Log> page = logRepository.findAll(((root, criteriaQuery, cb) -> QueryHelp.getPredicate(root, criteria, cb)), pageable);
public Object queryAllByUser(SysLogQueryCriteria criteria, Pageable pageable) {
Page<SysLog> page = logRepository.findAll(((root, criteriaQuery, cb) -> QueryHelp.getPredicate(root, criteria, cb)), pageable);
return PageUtil.toPage(page.map(logSmallMapper::toDto));
}
@Override
@Transactional(rollbackFor = Exception.class)
public void save(String username, String browser, String ip, ProceedingJoinPoint joinPoint, Log log) {
if (log == null) {
public void save(String username, String browser, String ip, ProceedingJoinPoint joinPoint, SysLog sysLog) {
if (sysLog == null) {
throw new IllegalArgumentException("Log 不能为 null!");
}
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
@ -88,21 +88,21 @@ public class LogServiceImpl implements LogService {
String methodName = joinPoint.getTarget().getClass().getName() + "." + signature.getName() + "()";
// 描述
log.setDescription(aopLog.value());
sysLog.setDescription(aopLog.value());
log.setRequestIp(ip);
log.setAddress(StringUtils.getCityInfo(log.getRequestIp()));
log.setMethod(methodName);
log.setUsername(username);
log.setParams(getParameter(method, joinPoint.getArgs()));
sysLog.setRequestIp(ip);
sysLog.setAddress(StringUtils.getCityInfo(sysLog.getRequestIp()));
sysLog.setMethod(methodName);
sysLog.setUsername(username);
sysLog.setParams(getParameter(method, joinPoint.getArgs()));
// 记录登录用户,隐藏密码信息
if(signature.getName().equals("login") && StringUtils.isNotEmpty(log.getParams())){
JSONObject obj = JSONUtil.parseObj(log.getParams());
log.setUsername(obj.getStr("username", ""));
log.setParams(JSONUtil.toJsonStr(Dict.create().set("username", log.getUsername())));
if(signature.getName().equals("login") && StringUtils.isNotEmpty(sysLog.getParams())){
JSONObject obj = JSONUtil.parseObj(sysLog.getParams());
sysLog.setUsername(obj.getStr("username", ""));
sysLog.setParams(JSONUtil.toJsonStr(Dict.create().set("username", sysLog.getUsername())));
}
log.setBrowser(browser);
logRepository.save(log);
sysLog.setBrowser(browser);
logRepository.save(sysLog);
}
/**
@ -137,25 +137,25 @@ public class LogServiceImpl implements LogService {
@Override
public Object findByErrDetail(Long id) {
Log log = logRepository.findById(id).orElseGet(Log::new);
ValidationUtil.isNull(log.getId(), "Log", "id", id);
byte[] details = log.getExceptionDetail();
SysLog sysLog = logRepository.findById(id).orElseGet(SysLog::new);
ValidationUtil.isNull(sysLog.getId(), "Log", "id", id);
byte[] details = sysLog.getExceptionDetail();
return Dict.create().set("exception", new String(ObjectUtil.isNotNull(details) ? details : "".getBytes()));
}
@Override
public void download(List<Log> logs, HttpServletResponse response) throws IOException {
public void download(List<SysLog> sysLogs, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
for (Log log : logs) {
for (SysLog sysLog : sysLogs) {
Map<String, Object> map = new LinkedHashMap<>();
map.put("用户名", log.getUsername());
map.put("IP", log.getRequestIp());
map.put("IP来源", log.getAddress());
map.put("描述", log.getDescription());
map.put("浏览器", log.getBrowser());
map.put("请求耗时/毫秒", log.getTime());
map.put("异常详情", new String(ObjectUtil.isNotNull(log.getExceptionDetail()) ? log.getExceptionDetail() : "".getBytes()));
map.put("创建日期", log.getCreateTime());
map.put("用户名", sysLog.getUsername());
map.put("IP", sysLog.getRequestIp());
map.put("IP来源", sysLog.getAddress());
map.put("描述", sysLog.getDescription());
map.put("浏览器", sysLog.getBrowser());
map.put("请求耗时/毫秒", sysLog.getTime());
map.put("异常详情", new String(ObjectUtil.isNotNull(sysLog.getExceptionDetail()) ? sysLog.getExceptionDetail() : "".getBytes()));
map.put("创建日期", sysLog.getCreateTime());
list.add(map);
}
FileUtil.downloadExcel(list, response);

View File

@ -16,8 +16,8 @@
package me.zhengjie.service.mapstruct;
import me.zhengjie.base.BaseMapper;
import me.zhengjie.domain.Log;
import me.zhengjie.service.dto.LogErrorDTO;
import me.zhengjie.domain.SysLog;
import me.zhengjie.service.dto.SysLogErrorDto;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
@ -26,6 +26,6 @@ import org.mapstruct.ReportingPolicy;
* @date 2019-5-22
*/
@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface LogErrorMapper extends BaseMapper<LogErrorDTO, Log> {
public interface LogErrorMapper extends BaseMapper<SysLogErrorDto, SysLog> {
}

View File

@ -16,8 +16,8 @@
package me.zhengjie.service.mapstruct;
import me.zhengjie.base.BaseMapper;
import me.zhengjie.domain.Log;
import me.zhengjie.service.dto.LogSmallDTO;
import me.zhengjie.domain.SysLog;
import me.zhengjie.service.dto.SysLogSmallDto;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
@ -26,6 +26,6 @@ import org.mapstruct.ReportingPolicy;
* @date 2019-5-22
*/
@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface LogSmallMapper extends BaseMapper<LogSmallDTO, Log> {
public interface LogSmallMapper extends BaseMapper<SysLogSmallDto, SysLog> {
}