想在项目里面使用log4j做日志的记录,但现在需要写日志的类很多,而且写日志的代码都是雷同的,所以就利用spring的aop来完成写日志的任务。
首先,需要将log4j先配置好在web.xml中加入解析器servlet的配置
<context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/classes/log4j.properties</param-value></context-param><servlet> <servlet-name>log4j</servlet-name> <servlet-class> org.springframework.web.util.Log4jConfigServlet </servlet-class> <load-on-startup>2</load-on-startup></servlet><listener> <listener-class> org.springframework.web.util.Log4jConfigListener </listener-class> </listener>
之后,由于我项目当中配置了大量的service类,类名都以Service结尾,为了方便配置使用spring当中的BeanNameAutoProxyCreator类进行aop配置。
在spring配置文件中配置如下:
<bean class="cn.aresoft.fw.log.LoggerAdvice" id="loggerAdvice"/> <bean class= "org.springframework.aop.framework .autoproxy.BeanNameAutoProxyCreator" ><!-- 始终以CGLib技术动态代理--><!-- <property name="optimize"><value>true</value></property> --><!-- 配置开关 这句不加getBean()方法获得bean是会报类型转换异常--> <property name="proxyTargetClass"><value>true</value></property> <property name="interceptorNames"> <list> <value>loggerAdvice</value> </list> </property> <property name="beanNames"> <list> <value>*Service</value> </list> </property></bean>
再来就是写Advice类了也就是配置中的LoggerAdvice,代码如下:
public class LoggerAdvice implements MethodBeforeAdvice, AfterReturningAdvice,ThrowsAdvice {public void before(Method method, Object[] args, Object target)throws Throwable { Logger logger = Logger.getLogger(target.getClass()); logger.debug("+Class : "+ target.getClass().getName()); logger.debug("+Method : "+ method.getName()); }public void afterReturning(Object retuVal, Method method, Object[] args,Object target) throws Throwable { Log log = LogFactory.getLog(target.getClass()); //do log }public void afterThrowing(Method method,Object[] args, Object target,Exception ex){ Logger logger = Logger.getLogger(target.getClass()); logger.error("数据处理时发生异常",ex); }}
相关资源:SpringMVC 写操作日志