🎨 日志调整,TraceId修改使用Filter,拦截器方案执行时机会在AccessLogFilter之后
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package com.your.packages.admin;
|
||||
|
||||
import com.hccake.ballcat.commom.log.access.annotation.EnableAccessLog;
|
||||
import com.hccake.ballcat.commom.log.operation.annotation.EnableOperationLog;
|
||||
import com.hccake.ballcat.common.job.annotation.EnableXxlJob;
|
||||
import com.hccake.ballcat.common.swagger.annotation.EnableSwagger2Aggregator;
|
||||
import com.hccake.simpleredis.EnableSimpleCache;
|
||||
@@ -16,6 +17,7 @@ import org.springframework.boot.web.servlet.ServletComponentScan;
|
||||
@EnableXxlJob
|
||||
@EnableSwagger2Aggregator
|
||||
@EnableAccessLog
|
||||
@EnableOperationLog
|
||||
@ServletComponentScan("com.hccake.ballcat.admin.oauth.filter")
|
||||
@SpringBootApplication(scanBasePackages = {"com.hccake.ballcat.admin", "com.your.packages.admin"})
|
||||
@MapperScan(basePackages = {"com.hccake.ballcat.**.mapper", "com.your.packages.**.mapper"})
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.hccake.ballcat.admin.modules.log.handler;
|
||||
|
||||
import com.hccake.ballcat.admin.modules.log.model.entity.AdminOperationLog;
|
||||
import com.hccake.ballcat.admin.modules.log.service.OperationLogAdminService;
|
||||
import com.hccake.ballcat.admin.modules.sys.model.converter.OperationLogConverter;
|
||||
import com.hccake.ballcat.commom.log.operation.model.OperationLogDTO;
|
||||
import com.hccake.ballcat.commom.log.operation.service.OperationLogHandler;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* @author Hccake
|
||||
* @version 1.0
|
||||
* @date 2020/5/25 20:38
|
||||
*/
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class AdminOperationLogHandler implements OperationLogHandler {
|
||||
private final OperationLogAdminService operationLogAdminService;
|
||||
|
||||
/**
|
||||
* 保存操作日志
|
||||
* @param operationLogDTO 操作日志DTO
|
||||
*/
|
||||
@Override
|
||||
public void saveLog(OperationLogDTO operationLogDTO) {
|
||||
AdminOperationLog adminOperationLog = OperationLogConverter.INSTANCE.dtoToPo(operationLogDTO);
|
||||
operationLogAdminService.save(adminOperationLog);
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,6 @@ package com.hccake.ballcat.admin.modules.log.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.hccake.ballcat.admin.modules.log.model.entity.AdminOperationLog;
|
||||
import com.hccake.ballcat.commom.log.operation.service.OperationLogSaveService;
|
||||
|
||||
/**
|
||||
* 操作日志
|
||||
@@ -10,6 +9,6 @@ import com.hccake.ballcat.commom.log.operation.service.OperationLogSaveService;
|
||||
* @author hccake
|
||||
* @date 2019-10-15 20:42:32
|
||||
*/
|
||||
public interface OperationLogAdminService extends IService<AdminOperationLog>, OperationLogSaveService {
|
||||
public interface OperationLogAdminService extends IService<AdminOperationLog> {
|
||||
|
||||
}
|
||||
|
||||
@@ -1,12 +1,9 @@
|
||||
package com.hccake.ballcat.admin.modules.log.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
|
||||
import com.hccake.ballcat.admin.modules.log.mapper.AdminOperationLogMapper;
|
||||
import com.hccake.ballcat.admin.modules.log.model.entity.AdminOperationLog;
|
||||
import com.hccake.ballcat.admin.modules.log.service.OperationLogAdminService;
|
||||
import com.hccake.ballcat.admin.modules.sys.model.converter.OperationLogConverter;
|
||||
import com.hccake.ballcat.commom.log.operation.model.OperationLogDTO;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
@@ -18,15 +15,4 @@ import org.springframework.stereotype.Service;
|
||||
@Service
|
||||
public class OperationLogAdminServiceImpl extends ServiceImpl<AdminOperationLogMapper, AdminOperationLog> implements OperationLogAdminService {
|
||||
|
||||
/**
|
||||
* 保存操作日志
|
||||
*
|
||||
* @param operationLogDTO
|
||||
* @return true/false
|
||||
*/
|
||||
@Override
|
||||
public boolean saveLog(OperationLogDTO operationLogDTO) {
|
||||
AdminOperationLog adminOperationLog = OperationLogConverter.INSTANCE.dtoToPo(operationLogDTO);
|
||||
return SqlHelper.retBool(baseMapper.insert(adminOperationLog));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
|
||||
import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
* @author Hccake
|
||||
@@ -16,11 +15,10 @@ import org.springframework.context.annotation.Configuration;
|
||||
* @date 2019/10/15 18:20
|
||||
*/
|
||||
@Slf4j
|
||||
@Configuration
|
||||
@ConditionalOnWebApplication
|
||||
@RequiredArgsConstructor
|
||||
public class AccessLogAutoConfiguration {
|
||||
private final AccessLogHandler accessLogService;
|
||||
private final AccessLogHandler<?> accessLogService;
|
||||
|
||||
@Bean
|
||||
@ConditionalOnClass(AccessLogHandler.class)
|
||||
|
||||
@@ -20,7 +20,7 @@ import java.io.IOException;
|
||||
*/
|
||||
@AllArgsConstructor
|
||||
public class AccessLogFilter extends OncePerRequestFilter {
|
||||
private final AccessLogHandler accessLogService;
|
||||
private final AccessLogHandler<?> accessLogService;
|
||||
|
||||
/**
|
||||
* Same contract as for {@code doFilter}, but guaranteed to be
|
||||
@@ -29,9 +29,9 @@ public class AccessLogFilter extends OncePerRequestFilter {
|
||||
* <p>Provides HttpServletRequest and HttpServletResponse arguments instead of the
|
||||
* default ServletRequest and ServletResponse ones.
|
||||
*
|
||||
* @param request
|
||||
* @param response
|
||||
* @param filterChain
|
||||
* @param request 请求信息
|
||||
* @param response 请求体
|
||||
* @param filterChain 过滤器链
|
||||
*/
|
||||
@Override
|
||||
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
|
||||
|
||||
@@ -1,21 +1,26 @@
|
||||
package com.hccake.ballcat.commom.log.mdc;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
|
||||
import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.Ordered;
|
||||
|
||||
/**
|
||||
* @author Hccake
|
||||
* @version 1.0
|
||||
* @date 2020/5/25 17:29
|
||||
*/
|
||||
@Configuration
|
||||
@Slf4j
|
||||
@ConditionalOnWebApplication
|
||||
public class TraceIdAutoConfiguration {
|
||||
|
||||
@Bean
|
||||
public TraceIdMvcConfigurer traceIdMvcConfigurer(){
|
||||
return new TraceIdMvcConfigurer();
|
||||
public FilterRegistrationBean<TraceIdFilter> traceIdFilterRegistrationBean(){
|
||||
FilterRegistrationBean<TraceIdFilter> registrationBean =
|
||||
new FilterRegistrationBean<>(new TraceIdFilter());
|
||||
registrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE);
|
||||
return registrationBean;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.hccake.ballcat.commom.log.mdc;
|
||||
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import com.hccake.ballcat.commom.log.constant.LogConstant;
|
||||
import org.slf4j.MDC;
|
||||
import org.springframework.web.filter.OncePerRequestFilter;
|
||||
|
||||
import javax.servlet.FilterChain;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author Hccake
|
||||
* @version 1.0
|
||||
* @date 2020/5/25 17:35
|
||||
* 利用 Slf4J 的 MDC 功能,记录 TraceId
|
||||
*/
|
||||
public class TraceIdFilter extends OncePerRequestFilter {
|
||||
|
||||
@Override
|
||||
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
|
||||
MDC.put(LogConstant.TRACE_ID, IdUtil.objectId());
|
||||
try {
|
||||
filterChain.doFilter(request, response);
|
||||
} finally {
|
||||
MDC.remove(LogConstant.TRACE_ID);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
package com.hccake.ballcat.commom.log.mdc;
|
||||
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import com.hccake.ballcat.commom.log.constant.LogConstant;
|
||||
import org.slf4j.MDC;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
/**
|
||||
* @author Hccake
|
||||
* @version 1.0
|
||||
* @date 2020/5/25 17:35
|
||||
* 利用 Slf4J 的 MDC 功能,记录 TraceId
|
||||
*/
|
||||
public class TraceIdInterceptor extends HandlerInterceptorAdapter {
|
||||
|
||||
@Override
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
||||
MDC.put(LogConstant.TRACE_ID, IdUtil.objectId());
|
||||
return super.preHandle(request, response, handler);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
|
||||
MDC.remove(LogConstant.TRACE_ID);
|
||||
super.afterCompletion(request, response, handler, ex);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
package com.hccake.ballcat.commom.log.mdc;
|
||||
|
||||
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
|
||||
/**
|
||||
* @author Hccake
|
||||
* @version 1.0
|
||||
* @date 2020/5/25 17:48
|
||||
*/
|
||||
public class TraceIdMvcConfigurer implements WebMvcConfigurer {
|
||||
|
||||
@Override
|
||||
public void addInterceptors(InterceptorRegistry registry) {
|
||||
registry.addInterceptor(new TraceIdInterceptor());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,35 +2,33 @@ package com.hccake.ballcat.commom.log.operation;
|
||||
|
||||
import com.hccake.ballcat.commom.log.operation.aspect.OperationLogAspect;
|
||||
import com.hccake.ballcat.commom.log.operation.event.OperationLogListener;
|
||||
import com.hccake.ballcat.commom.log.operation.service.OperationLogSaveService;
|
||||
import com.hccake.ballcat.commom.log.operation.service.OperationLogHandler;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
* @author Hccake
|
||||
* @version 1.0
|
||||
* @date 2019/10/15 18:20
|
||||
*/
|
||||
@Configuration
|
||||
public class OperationLogAutoConfiguration {
|
||||
|
||||
/**
|
||||
* 注册日志保存事件监听器
|
||||
* @return
|
||||
* @return OperationLogListener
|
||||
*/
|
||||
@Bean
|
||||
@ConditionalOnBean(OperationLogSaveService.class)
|
||||
public OperationLogListener operationLogListener() {
|
||||
return new OperationLogListener();
|
||||
@ConditionalOnBean(OperationLogHandler.class)
|
||||
public OperationLogListener operationLogListener(OperationLogHandler operationLogHandler) {
|
||||
return new OperationLogListener(operationLogHandler);
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册操作日志Aspect
|
||||
* @return
|
||||
* @return OperationLogAspect
|
||||
*/
|
||||
@Bean
|
||||
@ConditionalOnBean(OperationLogSaveService.class)
|
||||
@ConditionalOnBean(OperationLogHandler.class)
|
||||
public OperationLogAspect operationLogAspect() {
|
||||
return new OperationLogAspect();
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ import java.lang.annotation.*;
|
||||
* @version 1.0
|
||||
* @date 2019/10/15 18:11
|
||||
*/
|
||||
@Target(ElementType.METHOD)
|
||||
@Target(ElementType.TYPE)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@Import({OperationLogAutoConfiguration.class})
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.hccake.ballcat.commom.log.operation.event;
|
||||
|
||||
import com.hccake.ballcat.commom.log.operation.service.OperationLogSaveService;
|
||||
import com.hccake.ballcat.commom.log.operation.service.OperationLogHandler;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.event.EventListener;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
@@ -12,15 +12,14 @@ import org.springframework.scheduling.annotation.Async;
|
||||
* 异步监听日志事件
|
||||
*/
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
public class OperationLogListener {
|
||||
|
||||
@Autowired
|
||||
private OperationLogSaveService operationLogSaveService;
|
||||
private final OperationLogHandler operationLogHandler;
|
||||
|
||||
@Async
|
||||
@Order
|
||||
@EventListener(OperationLogEvent.class)
|
||||
public void saveSysLog(OperationLogEvent event) {
|
||||
operationLogSaveService.saveLog(event.getOperationLogDTO());
|
||||
operationLogHandler.saveLog(event.getOperationLogDTO());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,12 +8,11 @@ import com.hccake.ballcat.commom.log.operation.model.OperationLogDTO;
|
||||
* @version 1.0
|
||||
* @date 2019/10/15 19:57
|
||||
*/
|
||||
public interface OperationLogSaveService {
|
||||
public interface OperationLogHandler {
|
||||
|
||||
/**
|
||||
* 保存操作日志
|
||||
* @param operationLogDTO
|
||||
* @return true/false
|
||||
* @param operationLogDTO 操作日志传输对象
|
||||
*/
|
||||
boolean saveLog(OperationLogDTO operationLogDTO);
|
||||
void saveLog(OperationLogDTO operationLogDTO);
|
||||
}
|
||||
Reference in New Issue
Block a user