log4j+AOP 记录错误日志信息到文件中
AOP 采用异常通知切入,把指定包的异常记录到日志文件。
先看log4j.properties ,控制台输出的是普通信息, 文件输出的是异常信息。
log4j.rootLogger=DEBUG, Console
log4j.logger.com.java1234.aop=error,appender1 #file E:/temp/test.txt E\:\\temp\\test.txt
log4j.appender.appender1=org.apache.log4j.FileAppender
log4j.appender.appender1.File=E:/temp/test.txt
log4j.appender.appender1.layout=org.apache.log4j.SimpleLayout #Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
spring 配置文件中要记得加入AOP扫描注解,并且把需要切入的类交给spring控制。
<!-- 自动扫描 -->
<context:component-scan base-package="com.java1234" /> <!-- AOP XML配置 -->
<!-- <bean id="helloBean"
class="com.java1234.aop.HelloAspectBean">
</bean>
<aop:config>
<aop:pointcut id="servicePoint"
expression="within(com.java1234.service.impl.*)"/>
<aop:aspect ref="helloBean">
<aop:before method="helloMethod"
pointcut-ref="servicePoint"/>
</aop:aspect>
</aop:config> --> <!-- AOP注解配置 -->
<!-- 开启AOP注解配置@Aspect,@Pointcut,@Before等 -->
<aop:aspectj-autoproxy proxy-target-class="true"/>
applicationContext.xml
重点来了,异常通知的切入方法怎么写。
import org.apache.log4j.Logger;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component; @Component
@Aspect//指定为方面
public class HandlerExceptionBean {
Logger logger =
Logger.getLogger(HandlerExceptionBean.class); //采用异常通知切入,目标Service抛出异常给ex参数
@AfterThrowing(throwing="ex",pointcut="within(com.java1234.service.impl.*)")
public void exceptionMethod(Exception ex){
//将ex信息写入日志文件error.log
logger.error("发生异常,异常类型:"+ex);
StackTraceElement[] st = ex.getStackTrace();
StringBuilder msg = new StringBuilder();
for(StackTraceElement s : st){
msg.append(s);
msg.append("\n");
}
logger.error(msg);
}
}
HandlerExceptionBean
如果不用log4j,也可以只用AOP把异常写到指定文件,参考下面代码。
@Component
@Aspect//指定为方面
public class HandlerExceptionBean { //采用异常通知切入,目标Service抛出异常给ex参数@AfterThrowing(throwing="ex",pointcut="within(org.tarena.note.web.controller..*)")
public void exceptionMethod(Exception ex){ // 将ex信息写入日志文件error.log
String file="E:\\temp\\error.log";
try {
FileWriter out = new FileWriter(file,true);
PrintWriter pw=new PrintWriter(out);
ex.printStackTrace(pw);
pw.flush();
pw.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
log4j+AOP 记录错误日志信息到文件中的更多相关文章
- Log4j分级别保存日志到单个文件中,并记录IP和用户信息
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration S ...
- C#写入日志信息到文件中
为了在服务器上运行程序及时的跟踪出错的地方,可以在必要的地方加入写日志的程序. string folder = string.Format(@"D:\\{0}\\{1}", Dat ...
- ASP.NET MVC中错误日志信息记录
MVC中有一个处理异常的过滤器 HandleErrorAttribute 1.新建一个类继承自 HandleErrorAttribute,然后重写OnException这个方法 public clas ...
- 【转】ASP.NET MVC中错误日志信息记录
MVC中有一个处理异常的过滤器 HandleErrorAttribute 1.新建一个类继承自 HandleErrorAttribute,然后重写OnException这个方法 public clas ...
- WebForm应用log4net记录错误日志——使用线程列队写入
我的项目结构如下图: 日志帮助类库需要log4net包:工具—NuGet包管理器—管理解决方案NuGet程序包 线程日志帮助类 FlashLogger.cs 代码 using System; usin ...
- Log4j按级别输出日志到不同文件配置
1.自定义LogFileAppender类,继承DailyRollingFileAppender,实现Log4j按级别输出日志到不同文件. package com.liying.mango.commo ...
- ASP.NET记录错误日志的方式
程序记录错误日志是一种看起来对一般用户没什么作用,但对程序开发者用处很大的东西,它能查出错误或异常的程序马迹.那么,常用的记录错误日志的方式有哪些呢? 大多数情况下使用的是 1.直接记录为txt/xm ...
- C#添加错误日志信息
错误日志是软件用来记录运行时出错信息的文本文件.编程人员和维护人员等可以利用错误日志对系统进行调试和维护. 系统日志 系统日志包含了由Windows系统组件记录的事件.例如,在启动期间装入驱动程序或其 ...
- 【MySQL】关于MySQL错误日志信息的收集
为方便维护MySQL,写了个脚本用以提供收集错误信息的接口.这些错误信息来自与MySQL错误日志,而 通过grep mysql可以获取error-log的路径. #!/usr/bin/env pyth ...
随机推荐
- GitHub+Hexo+gulp搭建博客网站
一.前期准备 1.注册GitHub账号. 不做说明 2.创建仓库 创建一个新的仓库来放置我们的文件. 3.下载安装Node.js https://nodejs.org/en/ 两个版本,选择右边那 ...
- [转]JS组件系列——BootstrapTable 行内编辑解决方案:x-editable
本文转自:http://www.cnblogs.com/landeanfen/p/5821192.html 阅读目录 一.x-editable组件介绍 二.bootstrapTable行内编辑初始方案 ...
- 当Activity出现Exception时是如何处理的?
1.ActivityThread 2.PerformStop 在这里会调用mWindow.closeAllPanels(),从而关闭OptionMenu, ContextMenu.如果自己通过Wind ...
- H5新特性-----type=file文件上传
1.语法 单文件上传:<input type="file" id="file1"/> 多文件上传:<input type="file ...
- 【代码笔记】JTable 、TableModel的使用3
在java中插入Table,并通过TableModel插入表格初始化状态后,如果需要第一行标题栏进行重命名,直接利用TableModel接口去实现列名修改,在图形显示中是无法实现的. 这里需要用到 J ...
- 【代码笔记】XML深入学习:DTD约束与DTD语法(2)
DTD语法之定义实体(了解即可) 实体分为一般实体和参数实体. 定义实体:定义变量 引用实体:使用变量 一般实体:定义实体在DTD中,实体引用在xml中. 参数实体:定义实体在DTD中,实体引用在DT ...
- jQuery之检测分析纠错------地狱的镰刀
1. 答: 或者: $(selector).eq(0).hide(); 解答:get() 方法获得由选择器指定的 DOM 元素. 2. 答: 3, 答1: 答2: 4. slideDown()方法格式 ...
- 菜鸟学习Spring——SpringMVC注解版控制层重定向到控制层
一.概述. SpringMVC中界面请求Contorller1,Contorller1需要重定向到Contorller2中显示其他页面或者做一些业务逻辑,Spring中提供了这个功能利用"r ...
- linux漏洞分析入门笔记-bypass_PIE
ubuntu 16.04 IDA 7.0 docker 0x00:漏洞分析 1.ASLR的是操作系统的功能选项,作用于executable(ELF)装入内存运行时,因而只能随机化stack.heap. ...
- 使用auto_ptr需要注意的事项
注:C++11 已不推荐使用,应使用scoped_ptr/shared_ptr. 部分原因就是如下的注意事项. 转自:http://patmusing.blog.163.com/blog/static ...