项目使用的log4g输出到文件,打印日志的时候java抛出异常未被捕获,没有进行logger.error()输出,当生产环境出现异常时不方便查找.

xml配置:

 <!-- 声明方面组件 --><bean id="ExceptionLog" class="com.bofu.common.util.ExceptionLog"/><!-- 配置AOP处理异常 --><aop:config><aop:pointcut expression="(execution (* com.bofu.bkp.service..*.*(..)))" id="pc"/><aop:aspect ref="ExceptionLog"><aop:after-throwing method="afterException" pointcut-ref="pc" throwing="e"/></aop:aspect></aop:config>

ExceptionLog.java类

public class ExceptionLog {private static Logger logger = Logger.getLogger(DimensionValueServiceImpl.class);/*** 描述:程序抛出异常记录异常日志* @author wangn* @date  2020/4/1-10:02* @param* @return void*/public void afterException(JoinPoint joinPoint, Exception e) {// 记录error日志String className = joinPoint.getTarget().getClass().getName();String methodName = joinPoint.getSignature().getName();StringBuffer message = new StringBuffer();StackTraceElement [] exceptionStack=e.getStackTrace();message.append(e.toString());for(StackTraceElement ste : exceptionStack) {message.append("\n\tat " + ste); }logger.error("----->异常:" + e.getMessage());logger.error("----->异常所在类:" + className);logger.error("----->异常所在方法:" + methodName);logger.error("----->异常详细信息:"+ message);}
}

接口自定义了一个异常信息,看打印日志

[ERROR] [10:39:21] com.bofu.bkp.service.dataReport.DimensionValueServiceImpl - 异常:/ by zero
[ERROR] [10:39:21] com.bofu.bkp.service.dataReport.DimensionValueServiceImpl - 异常所在类:com.bofu.bkp.service.dataReport.TreeStoreServiceImpl
[ERROR] [10:39:21] com.bofu.bkp.service.dataReport.DimensionValueServiceImpl - 异常所在方法:findAftermarketStore
[ERROR] [10:39:21] com.bofu.bkp.service.dataReport.DimensionValueServiceImpl - java.lang.ArithmeticException: / by zeroat com.bofu.bkp.service.dataReport.TreeStoreServiceImpl.findAftermarketStore(TreeStoreServiceImpl.java:421)at com.bofu.bkp.service.dataReport.TreeStoreServiceImpl$$FastClassBySpringCGLIB$$41992ffd.invoke(<generated>)at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:59)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655)at com.bofu.bkp.service.dataReport.TreeStoreServiceImpl$$EnhancerBySpringCGLIB$$fea6c574.findAftermarketStore(<generated>)at com.bofu.bkp.controller.dataReport.TreeStoreController.findAftermarketStore(TreeStoreController.java:62)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:483)at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:817)at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:731)at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:968)at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:870)at javax.servlet.http.HttpServlet.service(HttpServlet.java:643)at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:844)at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at com.bofu.bkp.filter.SessionFilter.doFilter(SessionFilter.java:64)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:620)at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)at java.lang.Thread.run(Thread.java:745)
[INFO ] [10:39:21] com.bofu.bkp.exception.handler.ExceptionHandler - / by zero

log4g将会记录在error里面.再在log4g中配置输出到文件即可.记录一下方便以后遇到问题查看

aop配置异常日志管理相关推荐

  1. Spring MVC 中使用AOP 进行统一日志管理--XML配置实现

    1.介绍 上一篇博客写了使用AOP进行统一日志管理的注解版实现,今天写一下使用XML配置实现版本,与上篇不同的是上次我们记录的Controller层日志,这次我们记录的是Service层的日志.使用的 ...

  2. 利用spring AOP注解实现日志管理

    最近刚接手一个项目,在项目的开始阶段,我们的架构师分配了个任务给我,让我利用spring的切面技术做一个日志管理的案例.要求很简单,就是需要记录:谁在什么时候对谁做了什么操作,同时在日志的描述中还要有 ...

  3. 码农技术炒股之路——配置管理器、日志管理器

    配置管理器和日志管理器是项目中最为独立的模块.我们可以很方便将其剥离出来供其他Python工程使用.文件的重点将是介绍Python单例和logging模块的使用.(转载请指明出于breaksoftwa ...

  4. AOP基本概念、AOP底层实现原理、AOP经典应用【事务管理、异常日志处理、方法审计】...

    1 什么是AOP AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件 ...

  5. Spring Aop 日志管理及配置文件的详细配置

    Spring 带给我们的另一个好处就是让我们可以"专心做事",下面我们来看下面一个例子: public void doSameSomesing(int age,String nam ...

  6. 使用Spring进行统一日志管理 + 统一异常管理

    统一日志和异常管理配置好后,SSH项目中,代码以往散落的log.info() 和 try..catch..finally 再也不见踪影! 统一日志异常实现类: [java] view plaincop ...

  7. 实现日志管理的两种方式:aop、拦截器

    一.Spring aop 实现 AOP概念: 切面(Aspect):一个关注点的模块化,这个关注点可能会横切多个对象.事务管理是Java应用程序中一个关于横切关注点的很好的例子.在Spring AOP ...

  8. spring AOP自定义注解方式实现日志管理

    转:spring AOP自定义注解方式实现日志管理 今天继续实现AOP,到这里我个人认为是最灵活,可扩展的方式了,就拿日志管理来说,用Spring AOP 自定义注解形式实现日志管理.废话不多说,直接 ...

  9. Spring AOP 的日志管理实现

    2019独角兽企业重金招聘Python工程师标准>>> 在学习Spring框架的历程中,最重要的是要理解Spring的IOC和AOP了,不但要学会怎么用,最好是知道它是怎么实现的,通 ...

最新文章

  1. php 伪协议 lfi,php://伪协议(I/O)总能给你惊喜——Bugku CTF-welcome to bugkuctf
  2. 在TensorFlow2.0发布前,帮你掌握TensorFlow的必备内容
  3. clear arp-cache作用_肇庆Sylvin-2900-75-Clear
  4. maven构建本地jar包到本地仓库
  5. 针对表单的事件;条件语句;定时器的简单介绍;
  6. 自动局部变量 与 静态局部变量 的区别与用途
  7. GNU ARM 汇编指令[转载]
  8. web 项目集成福昕_项目学生:Web服务集成
  9. php 高德地图计算距离,距离、长度、面积
  10. mysql防止预约重号_mysql 防止重复插入唯一限制的数据
  11. 电商网站攻防,三个制胜锦囊
  12. python中英文字频率_python统计文本字符串里单词出现频率的方法
  13. Hadoop之MapReduce理论篇01
  14. django migrate无效的解决方法
  15. Python编程学习:中兴LTE网管MML命令脚本生成器
  16. 基于算术优化算法的函数寻优算法
  17. Python实现香农编码和费诺编码
  18. 上java培训班有用吗?Java有必要上培训班吗?
  19. 图片转excel的网站
  20. UE4制作尸潮爬墙学习笔记

热门文章

  1. Android修改系统语言
  2. 安装beryl和emerald。我们的红宝石和绿宝石
  3. 计算机性能和显卡的提升,电脑如何提高显卡性能?电脑提高显卡性能的图文教程...
  4. pythonlist是什么意思_python中的list是什么意思
  5. 旅行青蛙-----------------------------------------dp
  6. 智能多媒体会议室实施方案分析
  7. 壳寡糖/肉桂醛修饰乳清蛋白,乳清浓缩蛋白-羟丙基甲基纤维素复合材料
  8. 快速入门!Python爬虫,京东自动登录,在线抢购商品!
  9. 基于常见投票系统的作弊方法
  10. Android窗口机制:六、一定要在主线程才可以更新UI吗?为什么?(源码版本SDK31)