java aop 日志打印 正则设置
package tz.lion.Utils.aop; import com.alibaba.fastjson.JSON;
import org.springframework.web.multipart.MultipartFile;
import tz.lion.config.shiro.SessionHolder;
import tz.lion.domain.master.SysUser;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration; /**
* aop实现web层的日志切面
* @author 104
*/
@Aspect
@Component
public class WebLogAspect { private Logger logger = LoggerFactory.getLogger("webLogAspect"); ThreadLocal<Long> startTime = new ThreadLocal<Long>(); /**
* 定义一个切入点
*/
@Pointcut("execution(public * tz.lion.controller.*..*.*(..))")
public void webLog(){}
/**
* 定义一个非切入点
* controller 方法名称,以UnAop 开头 不打印日志;例如文件参数等长字符
*/
@Pointcut("!execution(public * tz.lion.controller.*..*.UnAop*(..))")
private void logSender(){}
/**
* 处理日志,打印请求相关数据
* @param joinPoint
*/
@Before("webLog()&&logSender()")
public void doBefore(JoinPoint joinPoint){
startTime.set(System.currentTimeMillis()); SysUser user = SessionHolder.getHolder().getSessionAttribute(SessionHolder.CURRENT_USER);
if(user != null){
logger.info("UserId : "+user.getId());
}
// 接收到请求,记录请求内容
logger.info("WebLogAspect.doBefore()");
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest(); try{
// 记录下请求内容
logger.info("URL : " + request.getRequestURL().toString());
logger.info("HTTP_METHOD : " + request.getMethod());
logger.info("IP : " + request.getRemoteAddr());
logger.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName()); boolean hasFile=false;
for(Object obj:joinPoint.getArgs()){
if(obj instanceof MultipartFile){
hasFile=true;
}
}
if(hasFile){
logger.info("ARGS : 上传文件接口 ");
}else{
logger.info("ARGS : " + JSON.toJSONString(joinPoint.getArgs()));
}
}catch(Exception e){
logger.info("获取请求参数失败");
}
Enumeration<String> enu=request.getParameterNames();
while(enu.hasMoreElements()){
String paraName=enu.nextElement();
logger.info("request paraName ARGS"+paraName+": "+request.getParameter(paraName));
}
} /**
* 处理完请求,返回内容
* @param joinPoint
*/
@AfterReturning(returning="result", pointcut = "webLog()")
public void doAfterReturning(JoinPoint joinPoint,Object result){
logger.info("WebLogAspect.doAfterReturning()");
String res = JSON.toJSONString(result);
if(res.length()<=2000){
logger.info("返回数据:"+res);
}
logger.info("耗时(毫秒) : " + (System.currentTimeMillis() - startTime.get()));
} }
java aop 日志打印 正则设置的更多相关文章
- java中日志打印
目录 一.预先判断日志级别 二.避免无效日志打印 三.区别对待错误日志 四.保证记录完整内容 打印日志,要注意下面4点. 一.预先判断日志级别 对DEBUG.INFO级别的日志,必须使用条件输出或者使 ...
- web项目的日志打印位置设置
1, 若在项目中放logback.groovy文件(如: src/test/resource下),则日志会打印到控制台上. logback.groovy 内容如下: // // Built on Fr ...
- 基于XML配置的AOP实现日志打印
Spring中可以使用注解或XML文件配置的方式实现AOP.1.导入jar包 com.springsource.net.sf.cglib -2.2.0.jar com.springsource.org ...
- 简单的aop实现日志打印(切入点表达式)
Spring中可以使用注解或XML文件配置的方式实现AOP. 1.导入jar包 com.springsource.net.sf.cglib -2.2.0.jar com.springsource.or ...
- springboot2整合logback.xml动态修改日志打印级别
今天找bug烦到了,生产上的日志级别不能修改,非常不利于排查问题,于是想到了动态修改日志打印级别, 因为上一周把项目升级成springboot2,并且使用logback.xml管理日志打印,所以修改也 ...
- java中的日志打印
java中的日志打印: 日志工具类: #获取日志 INFO:表示获取日志的等级 A1:表示日志存器,可以自定义名称 #===DEBUG INFO log4j.rootLogger=DEBUG,A1,A ...
- scarpy设置日志打印级别和存储位置
在settings.py中配置 日志级别设置 LOG_LEVEL = 'ERROR' # 当LOG_LEVEL设置为ERROR时,在进行日志打印时,只是打印ERROR级别的日志 日志存储设置 LOG_ ...
- 通过AOP拦截打印日志,出入参数
import java.lang.reflect.Modifier; import javassist.ClassClassPath; import javassist.ClassPool; impo ...
- Java编码常见的Log日志打印问题
前言 本文总结了作者在Java代码检视中遇到的一些关于日志打印的问题,并给出修改建议.因能力有限,难免存在错漏,欢迎指正. 一. 不规范的异常打印 使用slf4j日志组件时,logger.error( ...
随机推荐
- win32窗口样式GWL_EXSTYLE
Private Const GWL_STYLE = (-16) '窗口样式 '窗口风格Private Const WS_CAPTION = &HC00000 ...
- JavaScript:基本包装类型
为了方便操作,JavaScript提供了3个特殊的引用类型:Boolean.Number和String.实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而可以调用这些 ...
- CH1802 表达式计算4
题意 给出一个表达式,其中运算符仅包含+,-,*,/,^(加 减 乘 整除 乘方)要求求出表达式的最终值 数据可能会出现括号情况,还有可能出现多余括号情况 数据保证不会出现>=2^31的答案 数 ...
- [MEF] 学习之一 入门级的简单Demo(转)
MEF 的精髓在于插件式开发,方便扩展. 我学东西,习惯性的先搞的最简单的Demo出来,看看有没有好玩的东东,然后继续深入.这个博文,不谈大道理,看demo说事儿. 至于概念,请google ,大把大 ...
- 1、spark集群搭建
前提:已经搭建完全分布式的Hadoop集群,请参看http://www.cnblogs.com/netbloomy/p/6660131.html 1.Scala2.12.1环境搭建 1).下载scal ...
- golang的interface到其他类型的数据转换
以string为例 package main import "fmt" func main() { var a interface{} var b string a = " ...
- (转)Inno Setup入门(二十二)——Inno Setup类参考(8)
本文转载自:http://blog.csdn.net/yushanddddfenghailin/article/details/17268473 列表框 列表框(ListBox)是Windows应用程 ...
- Java-Runoob:Java 异常处理
ylbtech-Java-Runoob:Java 异常处理 1.返回顶部 1. Java 异常处理 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少 ...
- 将eclipse的编码改成UTF-8,默认是GBK
第一步.在菜单栏选择“window“----preference----General-----Workspace 选中Workspace 在右边窗口中找到Text file encoding ...
- 阿里云安装 virtio 驱动
为避免部分服务器.虚拟机或者云主机的操作系统在阿里云控制台 导入镜像 后,使用该自定义镜像创建的 ECS 实例无法启动,您需要在导入镜像前检查是否需要在源服务器中安装 Xen(pv)或 virtio ...