SpringMVC中log4J与AOP

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 项目中需要将service中的类方法的调用过程,使用log4j日志记录。service中的类和方法都很多,不可能在每个类中单独添加log4j日志记录的功能,因此我们在这里使用AOP的思想进行横向切面。

项目中需要将service中的类方法的调用过程,使用log4j日志记录。

service中的类和方法都很多,不可能在每个类中单独添加log4j日志记录的功
能,因此我们在这里使用AOP的思想进行横向切面。

以service类中的方法为切入点,通过AOP在方法调用前后使用log4j输出日志,内容包括正在调用的类和方法名。

在配置过程中,笔者碰到了一些或大或小的细节上的问题,在此作为记录。

首先是AOP的配置上,我们有两种选择,一是通过XML配置,二是通过注解。

XML配置可以通过以下示例:

XML配置.png

则对应的Aspect方法可以不用使用@Aspect、@Before和@After注解。

如果使用注解方式,则在XML配置文件中,只需要一行配置,开启自动代理功能即可:

自动代理.png

此时,对应的Aspect方法可以如下示例:


Aspect1.png

其次,是Spring配置文件所属域上的坑,在这里配置的AOP的XML文件,如果需要成功执行,需要在

web.xml文件中,将此XML配置文件加入到Servlet-Context中,而不是Spring-Context中,示例如下:


全局context.png

上图是配置全局的spring上下文,但是aop配置文件在这里不能成功。


Servlet的context.png

我们需要把aop的配置加载,放在servlet的初始化上下文中。

上述工作对于AOP的配置大致完成了,我们接下来需要配置log4j。在工程中,如果没有log4j的配

置,我们可以直接在src目录下创建一个log4j.properties文件;如果需要自定义此文件,可以在

web.xml中配置log4j,如:


web.xml中配置log4j

log4j.properties文件中可以参考下列配置,前者是详细的注解和参考,后者是笔者需要区分日志

等级输出,以及需要同时输出到控制台和文件的配置:

log4j.properties详解
### set log levels ###
log4j.rootLogger = INFO, console, I, W, E
### 输出信息到控制台 ###
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.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.log
log4j.appender.I.Append = true
log4j.appender.I.Threshold = INFO
log4j.appender.I.MaxFileSize = 50000KB
log4j.appender.I.layout = org.apache.log4j.PatternLayout
log4j.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.log
log4j.appender.W.Append = true
log4j.appender.W.Threshold = WARN
log4j.appender.W.MaxFileSize = 50000KB
log4j.appender.W.layout = org.apache.log4j.PatternLayout
log4j.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.log
log4j.appender.E.File = e://logs/lof4j_error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.MaxFileSize = 50000KB
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss}  [ %l\:%c\:%t\:%r ] - [ %p ]  %m%n

最后,我们运行工程,使用该方法,查看AOP结果:


控制台.png
文件中.png
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
6月前
|
Java
SpringMVC 集成Log4j
SpringMVC 集成Log4j
61 0
|
11月前
|
Java
springmvc之自定义注解-->自定义注解简介,基本案例和aop自定义注解
springmvc之自定义注解-->自定义注解简介,基本案例和aop自定义注解
54 0
|
Java 编译器 数据安全/隐私保护
【SpringMVC】自定义注解与AOP结合使用
【SpringMVC】自定义注解与AOP结合使用
71 0
|
XML Java 数据格式
SpringMVC(五、AOP)
AOP 为 Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预编译方式和运行期动态代理 实现程序功能的统一维护的一种技术。 XML配置AOP 基于注解AOP
SpringMVC(五、AOP)
|
前端开发 Java
springmvc如何开启AOP
springmvc如何开启AOP
269 0
springmvc如何开启AOP
|
NoSQL Java 数据库
dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合(四)Spring AOP中使用log4j实现http请求日志入mongodb
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/53978250 1、面向切面编程的一些术语 切面(Aspect):切面用于组织多个Advice,Advice放在切面中的定义。
856 0
|
6月前
|
设计模式 前端开发 JavaScript
Spring MVC(一)【什么是Spring MVC】
Spring MVC(一)【什么是Spring MVC】
|
5月前
|
设计模式 前端开发 Java
【Spring MVC】快速学习使用Spring MVC的注解及三层架构
【Spring MVC】快速学习使用Spring MVC的注解及三层架构
73 1
|
5月前
|
前端开发 Java 应用服务中间件
Spring框架第六章(SpringMVC概括及基于JDK21与Tomcat10创建SpringMVC程序)
Spring框架第六章(SpringMVC概括及基于JDK21与Tomcat10创建SpringMVC程序)