Spring 学习5--使用AOP统一处理日志
2017-04-27 16:56
435 查看
步骤:
1.切点前处理HttpRequest请求内容;
2.切点后处理响应返回内容;
Java代码:
1.切点前处理HttpRequest请求内容;
2.切点后处理响应返回内容;
Java代码:
@Aspect @Component public class LogAspectConfig { private Logger logger = LoggerFactory.getLogger(LogAspectConfig.class); private Properties properties = new Properties(); private String IP = ""; private String BEFORE_DATA = ""; private String AFTER_DATA = ""; @Value("${spring.application.name}") private String APP_NAME; /** * 定义一个切入点. */ @Pointcut("execution(public * org..service..controller.*Controller.*(..))") public void webLog() { } @Before("webLog()") public void doBefore() { //接收到请求,记录请求内容 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); //清空字段 this.clearFields(); //请求开始 IP = request.getHeader("RemoteIP"); BEFORE_DATA += request.getMethod() + ":" + request.getRequestURI() + ";\r\n"; AFTER_DATA += request.getMethod() + ":" + request.getRequestURI() + ";\r\n"; } @AfterReturning(returning = "ret", pointcut = "webLog()") public void doAfterReturning(Object ret) { try { HashMap map = (HashMap) ret; JsonResult jr = (JsonResult) map.get("result"); OPER_RESULT = jr.getStatus() ? "1" : "0"; if (jr.getStatus()) { Object en = jr.getEntity(); AFTER_DATA += getObjectDescription(en); } } catch (Exception e) { OPER_RESULT = "0"; AFTER_DATA += "切面记录:返回出现异常;异常信息:" + e.getMessage() + ";\r\n"; } } private boolean isEntityObject(Object obj) { return obj.getClass().getPackage().getName().equals("org.*.service.*.entity"); } private String getObjectDescription(Object obj) { String result = ""; if (isEntityObject(obj)) { result = getObjectClassDescription(obj) + "\r\n" + getObjectFieldsDescription(obj); } return result; } private String getObjectClassDescription(Object obj) { String className = obj.getClass().getSimpleName(); return this.properties.getProperty(className + ".ClassName", className); } private String getObjectFieldsDescription(Object obj) { StringBuilder sb = new StringBuilder(); if (isEntityObject(obj)) { Field[] fields = obj.getClass().getDeclaredFields(); Class objClass = obj.getClass(); String className = objClass.getSimpleName(); for (int i = 0; i < fields.length; ++i) { Field field = fields[i]; String fieldName = field.getName(); String propertyName = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); String getMethod = "get" + propertyName; try { Method thisMethod = objClass.getMethod(getMethod, new Class[]{}); String key = className + "." + propertyName; String fieldDescription = this.properties.getProperty(key); if (!StringHelper.isNullOrEmpty(fieldDescription)) { sb.append(fieldDescription + ":" + thisMethod.invoke(obj, new Object[]{}) + ";\r\n"); } else { sb.append(key + ":" + thisMethod.invoke(obj, new Object[]{}) + ";\r\n"); } } catch (Exception e) { logger.error(getMethod + " is not exist, "); } } } if (sb.length() > 400) { return sb.toString().substring(0, 400) + "..."; } else { return sb.toString(); } } private void clearFields(){ this.IP = ""; this.BEFORE_DATA = ""; this.AFTER_DATA = ""; } }
相关文章推荐
- spring-boot使用AOP统一处理日志
- Spring Boot中使用AOP统一处理Web请求日志
- Spring Boot中使用AOP统一处理Web请求日志
- 详解Spring Boot中使用AOP统一处理Web请求日志
- Spring Boot中使用AOP统一处理Web请求日志
- 46. Spring Boot中使用AOP统一处理Web请求日志【从零开始学Spring Boot】
- spring boot 基础之使用AOP统一处理请求日志使用方法
- springboot【19】日志管理之使用AOP统一处理Web请求日志
- 46. Spring Boot中使用AOP统一处理Web请求日志【从零开始学Spring Boot】
- spring-boot使用AOP统一处理日志
- Spring Cloud Spring Boot mybatis分布式微服务云架构(四十)使用AOP统一处理Web请求日志(1)
- spring-boot使用AOP统一处理日志
- Spring Boot中使用AOP统一处理Web请求日志
- Spring Boot中使用AOP统一处理Web请求日志
- (十四)SpringBoot使用AOP统一处理Web请求日志添加MDC
- (转)Spring Boot中使用AOP统一处理Web请求日志
- Spring Boot中使用AOP统一处理Web请求日志
- Spring Boot中使用AOP统一处理Web请求日志
- SpringBoot基础教程2-1-6 日志规范-使用AOP统一处理Web日志
- Springboot学习-使用AOP统一处理Web请求日志(六)