AOP+log4j记录日志
来源:互联网 发布:神盾网络验证山寨 编辑:程序博客网 时间:2024/06/05 19:15
在已开发完的项目中添加日志,使用切面比较方便,下述即为AOP+Log4j记录项目中日志的方法。
1.添加log4j.properties
log4j.rootLogger=INFO,A1,R,Elog4j.appender.A1=org.apache.log4j.ConsoleAppenderlog4j.appender.A1.layout=org.apache.log4j.PatternLayoutlog4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss} [%p] %m%nlog4j.appender.R=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.R.File=../log/Logs.loglog4j.appender.R.DatePattern='.'yyyy-MM-ddlog4j.appender.R.layout=org.apache.log4j.PatternLayoutlog4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss} [%p] %m%nlog4j.appender.E=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.E.Threshold=ERRORlog4j.appender.E.File=../log/Errors.loglog4j.appender.E.DatePattern='.'yyyy-MM-ddlog4j.appender.E.layout=org.apache.log4j.PatternLayoutlog4j.appender.E.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss} [%p] %l %m%nlog4j的详细配置可参考:Log4J日志配置详解、log4j详细配置文件
2.新建LogInterceptor.java
public class LogInterceptor{ private final Logger logger = Logger.getLogger(LogInterceptor.class);//log4j/** * 前置方法,在目标方法执行前执行 */ public void before(JoinPoint joinPoint){ Map<String,String> map = ParameterUtil.getParameters(); String methodName = joinPoint.getSignature().getName(); String entity = joinPoint.getTarget().getClass().getName(); logger.info("start! "+entity+"."+methodName+" data:"+map.toString()); } /** * 后置方法,在目标方法执行后执行 */ /* public void after(JoinPoint joinPoint){ String methodName = joinPoint.getSignature().getName(); String entity = joinPoint.getTarget().getClass().getName(); logger.info("end! "+entity+"."+methodName); }*/ public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{ String methodName = proceedingJoinPoint.getSignature().getName(); String entity = proceedingJoinPoint.getTarget().getClass().getName(); Object result =null; try {result = proceedingJoinPoint.proceed(); } catch (Exception ex) { HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST); //获取请求的URL StringBuffer requestURL = request.getRequestURL(); //获取参 数信息 String queryString = request.getQueryString(); //封装完整请求URL带参数 if(queryString != null){ requestURL .append("?").append(queryString); } String errorMsg = "";StackTraceElement[] trace = ex.getStackTrace();for (StackTraceElement s : trace) { errorMsg += "\tat " + s + "\r\n";}StringBuffer sb=new StringBuffer();sb.append("frontend-exception!!!\r\n"); sb.append(" 请求URL:"+requestURL+"\r\n"); sb.append(" 方法:"+entity+"."+methodName+"\r\n"); sb.append(" 详细错误信息:"+ex+"\r\n"); sb.append(errorMsg+"\r\n"); logger.error(sb.toString()); } return result; }}3.配置bean.xml
<!-- 激活自动代理功能 --> <aop:aspectj-autoproxy proxy-target-class="true" /> <!-- 将日志类注入到bean中 --> <bean id="logInterceptor" class="com.intercepter.LogInterceptor" /><aop:config> <aop:aspect id="logAspect" ref="logInterceptor"> <aop:pointcut expression="execution(* com.test..*.*(..))" id="logPointCut"/> <aop:before method="before" pointcut-ref="logPointCut"/> <!-- <aop:after method="after" pointcut-ref="logPointCut" /> --> <!-- <aop:after-throwing method="afterThrow" pointcut-ref="logPointCut" throwing="ex"/> --> <aop:around method="around" pointcut-ref="logPointCut" /> </aop:aspect> </aop:config>
4.在具体类中,有异常时,直接抛出即可,AOP会catch到并处理记录。
注解方法可参考:spring aop 切面记录log4j日志
阅读全文
0 0
- AOP+log4j记录日志
- spring aop记录日志,Log4j
- 采用AOP+log4j记录项目日志
- 采用AOP+log4j记录项目日志
- 采用AOP+log4j记录项目日志
- Spring AOP+Log4j记录项目日志
- spring aop 切面记录log4j日志
- Spring + Aop+注解 集成使用 Log4j,实现异常日志记录
- 【Log4J】Log4j记录日志配置
- spring aop 切面记录log4j日志 之around记录异常信息
- log4j 日志记录
- JAVA日志记录,LOG4J
- Log4j 记录error 日志
- 服务端日志记录log4j
- JAVA log4j记录日志
- 使用log4j记录日志
- log4j日志记录
- 使用log4j记录日志
- Coding如何生成SSH公匙密匙?
- 《道德经译本》
- Matrix4x4
- lnmp搭建(Nginx1.12.1;mysql5.7.20;php7.2.0)
- Unsupported Media Type,status 415
- AOP+log4j记录日志
- Python 画 直方图/条形图/柱状图
- 2017年最佳的20款css工具
- 【java 菜鸟实践<一>】实现PIO excel更新某个单元格数据(支持excel2003和2007)
- Echarts学习 折线图
- Android之android:layout_gravity和android:gravity属性的区别
- ThinkPHP5.0应用生命周期
- SpringMVC注解
- 第三周3