spring日志报错提醒_springmvc实现restful service时,怎么样用日志记录每次的请求参数:报错 -问答-阿里云开发者社区-阿里云...

使用 Spring 的 AOP,具体代码如下(仅做参考):

@Component

@Aspect

public class AopLog {

private static final Logger log = LoggerFactory.getLogger(AopLog.class);

// 提示信息格式

private final static String msg = "\r\nIP:{}\r\nURL:{}\r\nHTTP_METHOD:{}\r\nCLASS_METHOD:{}\r\nARGS:{}\r\nResult:{}\r\nConsuming:{}ms\r\n";

@Pointcut("execution(public * com.hong..*Controller.*(..))")

public void log() {

}

@Around("log()")

public Object before(ProceedingJoinPoint joinPoint) throws Throwable {

long startTime = System.currentTimeMillis();        // 方法开始执行的时间

String args = Arrays.toString(joinPoint.getArgs()); // 方法参数

String classMethod = joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName();    // 调用的方法

Object result = null;

/*

* 获取 request 信息

*/

ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

String url = "", httpMethod = "", ip = "";

if(attributes != null) {

HttpServletRequest request = attributes.getRequest();

// 记录下请求内容

url = request.getRequestURL().toString();

httpMethod = request.getMethod();

ip = getIpAddr(request);

}

long methodEnd;

// 执行方法,如果有异常,则进行记录

try {

result = joinPoint.proceed();

} catch (Exception e) {

methodEnd = System.currentTimeMillis();     // 记录出现异常时的执行时间

result = e.getMessage();

log.error(msg, ip, url, httpMethod, classMethod, args, result, methodEnd - startTime, e);

throw e;

}

methodEnd = System.currentTimeMillis();     // 记录方法正常执行后时间

log.info(msg, ip, url, httpMethod, classMethod, args, result, methodEnd - startTime);

return result;

}

/**

* 获取客户端IP

* @param request       HttpServletReqeust信息

* @return              IP

*/

private String getIpAddr(HttpServletRequest request) {

String ip = request.getHeader("x-forwarded-for");

if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {

ip = request.getHeader("Proxy-Client-IP");

}

if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {

ip = request.getHeader("WL-Proxy-Client-IP");

}

if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {

ip = request.getRemoteAddr();

}

return ip;

}

}

######

org.springframework.web.servlet.handler.HandlerInterceptorAdapter

不知道有用不######现在就是用这种方式处理的,但是如果在interceptor里面读取了流里面的body内容,到达controller的时候,就读不到body了,因为流里面的内容被读取过就没有了######

aop

aspectJ######

楼主解决了吗??求指点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值