您的位置:首页 > 编程语言 > Java开发

Spring 学习5--使用AOP统一处理日志

2017-04-27 16:56 435 查看
步骤:

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 = "";
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: