aop配置异常日志管理

ANSYS Products19.1下载及安装教程 ANSYS Products19.1下载及安装破解教程 前言 ANSYS软件是美国ANSYS公司研制的大型通用有限元分析(FEA)软件,是世界范围内增长最快的计算机辅助工程(CAE)软件,能与多数计算机辅助设计(CAD,computer Aided design)软件接口,实现数据的共享和交换,如Creo, NASTRAN、Algor、I-DEAS、AutoCAD等。ansys project包括一整套的软件集合,它耦合了CFD模型的前处理,求解器和后处理所需要的相关软件,特比是它的workbench模块, 阅读详情

项目使用的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 zero
	at 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中配置输出到文件即可.记录一下方便以后遇到问题查看

支付宝个人年度账单爬虫实战:从扫码登录到数据解析的全链路解析 作为一名数据爱好者或量化分析师,获取自己的支付宝年度账单不仅是对个人消费行为的深度复盘,更是实现"数据自主权"的第一步。print(f"{row['year']}年: 收入{row['total_income']:.2f} | 支出{row['total_expense']:.2f} | 结余{row['net_savings']:.2f}"){"category": "餐饮", "amount": 12000, "count": 345},"""打开登录页,等待用户扫码,返回Cookie字典""" 阅读详情

相关推荐

计算机视觉-深度学习图像检测方法梳理

计算机视觉-深度学习图像检测方法梳理 由于之后要转方向啦,趁这段时间整理手中硕士研究方向的一些阅读笔记,这是一篇关于计算机视觉的基础知识梳理 先搞清一些小知识点 首先我们要弄清楚图像分类、目标定位、语义分割、实例分割的区别 a. 图像分类 :给定一张输入图像,图像分类任务旨在判断该图像所属类别; b. 目标定位 :在图像分类的基础上,我们还想知道图像中的目标具体在图像的什么位置,通常是以包围盒的(bounding box)形式; c. 语义分割 :语义分割是目标检测更进阶的任务,目标检测只需要框出每个目

qq_41662991的博客 9953

基于Cglib动态代理-ObjenesisCglibAopProxy

1、CglibAopProxy 1.1 获取代理对象 public Object getProxy() { return getProxy(null); } public Object getProxy(@Nullable ClassLoader classLoader) { if (logger.isTraceEnabled()) { logger.trace("Cr...

lemon 492

发票OFD格式转换成PDF

发票OFD格式转换成PDF

Be_insighted的博客 930

Spring AOP中CGLIB代理对象增强通知执行原理

**前置博文:** [Spring AOP中如何为Bean创建代理?](https://blog.youkuaiyun.com/J080624/article/details/83444209) [Spring AOP中是如何注册Advisor的?](https://janus.blog.youkuaiyun.com/article/details/87894643) 或者换句话说,当我们定义了切面、pointcut以及advice后,这些是如何对我们的目标对象生效的。 继续结合前面博文分析,我们从代码角度解读其执行流程。假设

小小默:进无止境 1万+

阿里云大模型ACP认证模拟考试(二)

摘要:在阿里云大模型高级工程师 ACP 认证暂无真题题库的现状下,模拟题具有重要意义。其依照真实考试设计,涵盖题型、题量与分值分布,助力考生熟悉考试框架,合理分配答题时间精力,提升效率。同时,模拟题紧扣官方课程,能帮助考生精准定位知识盲点,如大模型架构原理和通义千问应用实践等重点内容,以便针对性完善知识体系。此外,通过练习模拟题,考生可掌握不同题型的解题思维与技巧,快速洞察复杂题目本质,提高答题准确率。

davidkorhenn的博客 2071

深入解析SGLang框架:从架构设计到核心组件实现

本文深入解析了SGLang框架的架构设计与核心组件实现。SGLang是一个专为大语言模型推理设计的高效框架,其核心优势在于清晰的分层架构、高效的调度策略以及精细的内存管理。文章详细剖析了其客户端接入、服务器端调度、模型执行引擎及Tokenizer/Detokenizer管理器等关键组件,揭示了其实现高性能推理的内部机制。

coffee的博客 576

Spring源码学习(3) —— CglibAopProxy实现AOP

前面我们解读了jkd动态代理方式实现aop的源码,今天我们重点来看下cglib方式实现aop的原理。与JdkDynamicAopProxy一样,CglibAopProxy实现了AopProxy接口,主要是需要用到其getProxy方法来生成代理对象。 1.生成代理对象 getProxy()方法核心逻辑如下: public Object getProxy(ClassLoader cla...

蔡小兵的博客 2159

FTP新手必看:vsftpd 530登录错误的8种实战解决方案(附详细配置步骤)

本文针对FTP服务配置中常见的vsftpd 530登录错误,提供了8种实战解决方案。从理解错误本质入手,系统性地排查用户列表策略、PAM认证、系统黑名单、Shell限制、目录权限及DNS解析等问题,并附有详细的配置步骤与命令,帮助新手快速定位并解决登录失败难题。

ik678901的博客 696

spring源码学习之事务的创建过程

上文中讲到authUserServiceImpl的代理类通过ObjenesisCglibAopProxy的方式创建出来,这篇文章继续分析,代理类的目标方法在调用之前,事物的创建过程,同样使用前文中提到的测试例子。 public class AuthUserServiceImplTest { private static Logger logger = Logger.getLogger(...

lihuayong的专栏 1085

新手必看:手把手教你如何通过Github提交CVE漏洞(附完整截图流程)

本文为安全研究新手提供了一份详尽的CVE漏洞提交实战指南。文章重点介绍了如何通过Github平台,从漏洞发现、验证、撰写专业报告到最终提交CVE申请的全流程,并附有完整的截图和沟通模板,帮助初学者迈出负责任漏洞披露的第一步。

ttt77的博客 1252

基于TDOA的chan算法(定位算法)

Chan算法原理 TDOA(TDOA,the time differences of arrival,到达时间差),Chan算法是TDOA定位方法的一个很好用的方法。 Chan算法是非递归双曲线方程组解法,具有解析表达式解,主要特点是:在测量误差服从理想高斯分布时,它的定位精度高、计算量小,并且可以通过增加已确定点的数量来提高算法精度。 该算法的推导前提是基于测量误差为零均值高斯随机变量,对于实际环境中误差较大的测量值,比如在有非视距误差的环境下,该算法的性能会有显著下降。二维情况下,可分为只有三个点参与定

优快云不再更新 2万+

【Spring事务详解】--- 1.事务传播的案例演示

事务的传播案例演示

自律使我自由 2159

基于DNN神经网络的多输入多输出数据回归预测(附带Matlab代码)

假设我们的输入数据包含n个特征,输出数据包含m个特征。在本文中,我们将介绍如何使用DNN(深度神经网络)实现多输入多输出数据回归预测,并提供相应的Matlab代码。需要注意的是,上述代码中的DNN模型是一个简化的示例,您可以根据实际任务的复杂程度和要求进行相应的调整和优化。综上所述,我们介绍了如何使用DNN神经网络实现多输入多输出数据回归预测,并提供了相应的Matlab代码。函数对DNN模型进行训练,其中输入数据需要转置,以适应网络的输入要求。最后,我们使用训练好的模型对测试数据进行预测,并打印预测结果。

DevWizard的博客 1067

spring mvc 基于aop日志管理

最近忙于面试换工作,不论是学习还是工作

upxiaofeng的专栏 1390

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SpringBoot总结-配置管理和日志管理

SpringBoot总结-配置管理和日志管理

田宝宝的博客 883

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

aop 面向切面 - 日志记录

Springboot对 AOP的配置: # AOP spring.aop.auto=true # Add @EnableAspectJAutoProxy. spring.aop.proxy-target-class=true # Whether subclass-based (CGLIB) proxies are to be created (true), as opposed to stand...

狂奔的蜗牛的博客 346

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

异常日志处理-ThrowsAdvice

  有的时候,为了保全代码的简洁,我们不希望在程序中看到一些跟程序逻辑的代码,譬如异常日志打印,这个时候就需要我们对程序中的异常日志进行统一的管理。spring aop 可以在不破坏程序逻辑的情况下很好的完成我们上面的需求。本文对对日志的处理使用到了ThrowsAdvice接口和spring aop ThrowsAdvice接口 1 /* 2 * Copyright 2002...

weixin_30603633的博客 197

利用spring mvc AOP进行日志管理 (采用注解@AspectJ)

      在现实的上线中我们经常会遇到系统出现异常或者问题。这个时候就马上打开CRT或者SSH连上服务器拿日子来分析。受网络的各种限制。于是我们就想为什么不能直接在管理后台查看报错的信息呢。于是日志管理就出现了。       很早之前就有同学问我,如何用spring aop来实现日志管理的问题,现在个人觉得做日志管理最好的是Aop,当然有的人也喜欢用拦截器。       Aop有的人说拦...

laoshanbizu的专栏 646

【Java分享客栈】 超简洁SpringBoot使用AOP统一日志管理

实现 本篇AOP统一日志管理写法来源于国外知名开源框架JHipster的AOP日志管理方式 1、引入依赖 org.springframework.boot spring-boot-starter-aop 2、定义logback配置 1)、dev、test环境的spring-web包定义日志级别为INFO,项目包定义日志级别为DEBUG; 2)、prod环境的spring-web包定义日志级别为ERROR,项目包定义日志级别为INFO; <?xml version="1.0" en

萌兔兔MMQ!! 453

Springboot学习教程(四)使用AOP处理全局捕获异常和添加日志

目录 1.Spring的AOP特性 2.使用AOP统一处理全局捕获异常 3.使用AOP统一处理Web请求日志 1.Spring的AOP特性 Spring有两大特性,IOC(控制反转)和AOP(面向切面编程), 我们可以利用aop特性处理全局捕获异常,添加日志,添加事物等。 2.使用AOP统一处理全局捕获异常 如果访问项目时出现异常,那么浏览器则会显示500或者别的...

5779

【项目demo04】AOP日志管理

我准备开一个系列,就是写一些在简要的学习项目中可能会用到的奇奇怪怪的功能,比如线程池或者统一异常处理类 取名为【项目demo】系列 然后将会同步到GitHub中:https://github.com/Livorth/FunctionalLearning AOP日志管理 AOP是个好东西,用的地方很多,但是这里仅介绍作为日志管理的使用 总的来说,使用AOP的思路是差不多的 使用自定义注解 使用AOP环绕通知代理有对应注解的方法,然后在环绕的时候进行对应操作 在需要使用日志方法上加上注解,进行测试 在这里

Alivorth的博客 315

Spring AOP对日志记录、Exception日志记录

Spring AOP对日志记录、Exception日志记录 利用spring aop对日志进行管理,还是采用对比的方式进行, 修改前: 偶们的做法是在action里记录日志,注意这个日志是面向用户的日志,姑且称它为业务日志,至于后台日志,则在此文章中暂不考虑,基本是通过log4j打印到后台日志文件中。看下面一段代码: [code="java"] try { em...

jiangtie的专栏 288

SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)

首先我们为什么需要做日志管理,在现实的上线中我们经常会遇到系统出现异常或者问题。这个时候就马上打开CRT或者SSH连上服务器拿日子来分析。受网络的各种限制。于是我们就想为什么不能直接在管理后台查看报错的信息呢。于是日志管理就出现了。          其次个人觉得做日志管理最好的是Aop,有的人也喜欢用拦截器。都可以,在此我重点介绍我的实现方式。          Aop有的人说拦截不到Con

czmchen的专栏 13万+

SSM中 实现日志记录(AOP+log4j2)

本人使用: 集成开发环境:idea 项目管理工具:maven 数据库:oracle 框架:Spring+SpringMVC+myBatis 主要步骤: 在pom.xml中引入插件依赖 log4j2.xml文件配置 web.xml文件配置 编写日志管理类LogInterceptor.class spring-mvc.xml中配置AOP【可以使用注解和自定义注解,我这使用的是xml】...

van的博客 7230

java-aop之日志应用

xml配置-开启aop监听 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con...

lirentingblue的博客 242

超简洁SpringBoot使用AOP统一日志管理

前言 请问今天您便秘了吗?程序员坐久了真的会便秘哦,如果偶然点进了这篇小干货,就麻烦您喝杯水然后去趟厕所一边用左手托起对准嘘嘘,一边用右手滑动手机看完本篇吧。 实现 本篇AOP统一日志管理写法来源于国外知名开源框架JHipster的AOP日志管理方式 1、引入依赖 <!-- spring aop --> <dependency> <groupId>org.springframework.boot</groupId> <arti

m0_69860228的博客 267
上一篇: poi导出excel
下一篇: mybatis批量新增时传入的对象中存在list处理
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值