mirror of
https://github.com/hs-web/hsweb-framework.git
synced 2026-06-08 08:54:07 +08:00
优化访问日志配置
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
package org.hsweb.web.controller;
|
||||
|
||||
import org.aspectj.lang.ProceedingJoinPoint;
|
||||
import org.aspectj.lang.annotation.Around;
|
||||
import org.aspectj.lang.annotation.Aspect;
|
||||
import org.hsweb.web.bean.po.logger.LoggerInfo;
|
||||
import org.hsweb.web.bean.po.user.User;
|
||||
import org.hsweb.web.core.exception.BusinessException;
|
||||
import org.hsweb.web.core.logger.AccessLoggerPersisting;
|
||||
import org.hsweb.web.core.logger.AopAccessLoggerResolver;
|
||||
import org.hsweb.web.core.message.FastJsonHttpMessageConverter;
|
||||
import org.hsweb.web.core.message.ResponseMessage;
|
||||
import org.hsweb.web.core.utils.WebUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.hsweb.commons.StringUtils;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by zhouhao on 16-4-28.
|
||||
*/
|
||||
@Configuration
|
||||
@ConditionalOnProperty(name = "logger.access", havingValue = "true")
|
||||
public class AopAccessLoggerResolverAutoConfiguration extends AopAccessLoggerResolver {
|
||||
@Bean
|
||||
public AopAccessLoggerResolverConfiguration aopAccessLoggerResolverConfiguration() {
|
||||
return new AopAccessLoggerResolverConfiguration();
|
||||
}
|
||||
@Aspect
|
||||
@Component
|
||||
@Order(Ordered.HIGHEST_PRECEDENCE)
|
||||
static class AopAccessLoggerResolverConfiguration extends org.hsweb.web.core.logger.AopAccessLoggerResolver {
|
||||
@Autowired(required = false)
|
||||
private FastJsonHttpMessageConverter fastJsonHttpMessageConverter;
|
||||
|
||||
@Autowired(required = false)
|
||||
private List<AccessLoggerPersisting> accessLoggerPersisting;
|
||||
|
||||
@PostConstruct
|
||||
private void init() {
|
||||
if (fastJsonHttpMessageConverter == null)
|
||||
fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
|
||||
}
|
||||
|
||||
@Around(value = "execution(* org.hsweb.web..controller..*Controller..*(..))||@annotation(org.hsweb.web.core.logger.annotation.AccessLogger)")
|
||||
public Object around(ProceedingJoinPoint pjp) throws Throwable {
|
||||
LoggerInfo loggerInfo = resolver(pjp);
|
||||
long requestTime = System.currentTimeMillis();
|
||||
Object result = null;
|
||||
try {
|
||||
result = pjp.proceed();
|
||||
} catch (Throwable e) {
|
||||
if (!(e instanceof BusinessException)) {
|
||||
result = ResponseMessage.error(e.getMessage());
|
||||
loggerInfo.setExceptionInfo(StringUtils.throwable2String(e));
|
||||
} else {
|
||||
result = ResponseMessage.error(e.getMessage(), ((BusinessException) e).getStatus());
|
||||
}
|
||||
throw e;
|
||||
} finally {
|
||||
long responseTime = System.currentTimeMillis();
|
||||
User user = WebUtil.getLoginUser();
|
||||
loggerInfo.setRequestTime(requestTime);
|
||||
loggerInfo.setResponseTime(responseTime);
|
||||
loggerInfo.setResponseContent(fastJsonHttpMessageConverter.converter(result));
|
||||
if (user != null)
|
||||
loggerInfo.setUserId(user.getId());
|
||||
if (result instanceof ResponseMessage)
|
||||
loggerInfo.setResponseCode(String.valueOf(((ResponseMessage) result).getCode()));
|
||||
if (accessLoggerPersisting != null) {
|
||||
accessLoggerPersisting.forEach(loggerPersisting -> loggerPersisting.save(loggerInfo));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,76 +0,0 @@
|
||||
package org.hsweb.web.controller;
|
||||
|
||||
import org.aspectj.lang.ProceedingJoinPoint;
|
||||
import org.aspectj.lang.annotation.Around;
|
||||
import org.aspectj.lang.annotation.Aspect;
|
||||
import org.hsweb.web.bean.po.logger.LoggerInfo;
|
||||
import org.hsweb.web.bean.po.user.User;
|
||||
import org.hsweb.web.core.exception.BusinessException;
|
||||
import org.hsweb.web.core.logger.AccessLoggerPersisting;
|
||||
import org.hsweb.web.core.logger.AopAccessLoggerResolver;
|
||||
import org.hsweb.web.core.message.FastJsonHttpMessageConverter;
|
||||
import org.hsweb.web.core.message.ResponseMessage;
|
||||
import org.hsweb.web.core.utils.WebUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.hsweb.commons.StringUtils;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by zhouhao on 16-4-28.
|
||||
*/
|
||||
@Aspect
|
||||
@Component
|
||||
@Order(Ordered.HIGHEST_PRECEDENCE)
|
||||
@ConditionalOnProperty(prefix = "logger.access", value = "on")
|
||||
public class AopAccessLoggerResolverConfiguration extends AopAccessLoggerResolver {
|
||||
|
||||
@Autowired(required = false)
|
||||
private FastJsonHttpMessageConverter fastJsonHttpMessageConverter;
|
||||
|
||||
@Autowired(required = false)
|
||||
private List<AccessLoggerPersisting> accessLoggerPersisting;
|
||||
|
||||
@PostConstruct
|
||||
private void init() {
|
||||
if (fastJsonHttpMessageConverter == null)
|
||||
fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
|
||||
}
|
||||
|
||||
@Around(value = "execution(* org.hsweb.web..controller..*Controller..*(..))||@annotation(org.hsweb.web.core.logger.annotation.AccessLogger)")
|
||||
public Object around(ProceedingJoinPoint pjp) throws Throwable {
|
||||
LoggerInfo loggerInfo = resolver(pjp);
|
||||
long requestTime = System.currentTimeMillis();
|
||||
Object result = null;
|
||||
try {
|
||||
result = pjp.proceed();
|
||||
} catch (Throwable e) {
|
||||
if (!(e instanceof BusinessException)) {
|
||||
result = ResponseMessage.error(e.getMessage());
|
||||
loggerInfo.setExceptionInfo(StringUtils.throwable2String(e));
|
||||
} else {
|
||||
result = ResponseMessage.error(e.getMessage(), ((BusinessException) e).getStatus());
|
||||
}
|
||||
throw e;
|
||||
} finally {
|
||||
long responseTime = System.currentTimeMillis();
|
||||
User user = WebUtil.getLoginUser();
|
||||
loggerInfo.setRequestTime(requestTime);
|
||||
loggerInfo.setResponseTime(responseTime);
|
||||
loggerInfo.setResponseContent(fastJsonHttpMessageConverter.converter(result));
|
||||
if (user != null)
|
||||
loggerInfo.setUserId(user.getId());
|
||||
if (result instanceof ResponseMessage)
|
||||
loggerInfo.setResponseCode(String.valueOf(((ResponseMessage) result).getCode()));
|
||||
if (accessLoggerPersisting != null) {
|
||||
accessLoggerPersisting.forEach(loggerPersisting -> loggerPersisting.save(loggerInfo));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user