项目中需要将service中的类方法的调用过程,使用log4j日志记录。
service中的类和方法都很多,不可能在每个类中单独添加log4j日志记录的功
能,因此我们在这里使用AOP的思想进行横向切面。
以service类中的方法为切入点,通过AOP在方法调用前后使用log4j输出日志,内容包括正在调用的类和方法名。
在配置过程中,笔者碰到了一些或大或小的细节上的问题,在此作为记录。
首先是AOP的配置上,我们有两种选择,一是通过 配置,二是通过注解。
配置可以通过以下示例:
配置.png
则对应的Aspect方法可以不用使用@Aspect、@Before和@After注解。
如果使用注解方式,则在 配置文件中,只需要一行配置,开启自动代理功能即可:
自动代理.png
此时,对应的Aspect方法可以如下示例:
Aspect1.png
其次,是Spring配置文件所属域上的坑,在这里配置的AOP的 文件,如果需要成功执行,需要在
web. 文件中,将此 配置文件加入到Servlet-Context中,而不是Spring-Context中,示例如下:
全局context.png
上图是配置全局的spring上下文,但是aop配置文件在这里不能成功。
Servlet的context.png
我们需要把aop的配置加载,放在servlet的初始化上下文中。
上述工作对于AOP的配置大致完成了,我们接下来需要配置log4j。在工程中,如果没有log4j的配
置,我们可以直接在src目录下创建一个log4j.properties文件;如果需要自定义此文件,可以在
web. 中配置log4j,如:
web. 中配置log4j
log4j.properties文件中可以参考下列配置,前者是详细的注解和参考,后者是笔者需要区分日志
等级输出,以及需要同时输出到控制台和文件的配置:
log4j.properties详解
### set log levels ###log4j.rootLogger = INFO, console, I, W, E### 输出信息到控制台 ###log4j.appender.console = org.apache.log4j.ConsoleAppenderlog4j.appender.console.Target = System.outlog4j.appender.console.layout = org.apache.log4j.PatternLayoutlog4j.appender.console.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} class:%c method:%l%n%m%n### 输出INFO 级别以上的日志 ###log4j.appender.I = org.apache.log4j.RollingFileAppender#log4j.appender.W.File =${scheduleProject}WEB-INF/logs/schedule.log###输出到指定文件###log4j.appender.I.File = e://logs/lof4j_info.loglog4j.appender.I.Append = truelog4j.appender.I.Threshold = INFOlog4j.appender.I.MaxFileSize = 50000KBlog4j.appender.I.layout = org.apache.log4j.PatternLayoutlog4j.appender.I.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n### 输出WARN 级别以上的日志 ###log4j.appender.W = org.apache.log4j.RollingFileAppender#log4j.appender.W.File =${scheduleProject}WEB-INF/logs/schedule.log###输出到指定文件###log4j.appender.W.File = e://logs/lof4j_warn.loglog4j.appender.W.Append = truelog4j.appender.W.Threshold = WARNlog4j.appender.W.MaxFileSize = 50000KBlog4j.appender.W.layout = org.apache.log4j.PatternLayoutlog4j.appender.W.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n#### 输出DEBUG 级别以上的日志 ####log4j.appender.D = org.apache.log4j.RollingFileAppender##log4j.appender.D.File =${scheduleProject}WEB-INF/logs/schedule.log####输出到指定文件####log4j.appender.D.File = e://logs/lof4j_error.log#log4j.appender.D.Append = true#log4j.appender.D.Threshold = DEBUG#log4j.appender.D.MaxFileSize = 50000KB#log4j.appender.D.layout = org.apache.log4j.PatternLayout#log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n### 输出ERROR 级别以上的日志 ###log4j.appender.E = org.apache.log4j.RollingFileAppender#log4j.appender.E.File = ${scheduleProject}WEB-INF/logs/schedule.loglog4j.appender.E.File = e://logs/lof4j_error.loglog4j.appender.E.Append = truelog4j.appender.E.Threshold = ERRORlog4j.appender.E.MaxFileSize = 50000KBlog4j.appender.E.layout = org.apache.log4j.PatternLayoutlog4j.appender.E.layout.ConversionPattern =%-d{yyyy-MM-dd HH:mm:ss} [ %l:%c:%t:%r ] - [ %p ] %m%n最后,我们运行工程,使用该方法,查看AOP结果:
控制台.png
文件中.png
继续阅读与本文标签相同的文章
上一篇 :
不要被超我拖垮,也不要被本我掌控
下一篇 :
Vim的初步折腾
-
新机保贝获近亿元A轮融资,经纬领投
2026-05-25栏目: 教程
-
零基础Python教程034期 random随机数开发猜数字游戏
2026-05-25栏目: 教程
-
法国速度与中国创新——揭秘东风雪铁龙与阿里、斑马首款合资互联网汽车
2026-05-25栏目: 教程
-
一次讲透次短路及条数问题,详细探讨dijkstra算法的本质
2026-05-25栏目: 教程
-
微服务架构案例(04):中间件集成,公共服务封装
2026-05-25栏目: 教程
