SpringAOP日志配置

配置文件配置

配置spring-mvc.xml

<aop:config proxy-target-class="true" />

<bean id="logInterceptor" class="com.sjzxywlkj.cplife.log.LogInterceptor" />

<!-- 使用xml配置aop -->

<!-- 强制使用cglib代理,如果不设置,将默认使用jdk的代理,但是jdk的代理是基于接口的 -->

<aop:config>

<!--定义切面 -->

<aop:aspect id="logAspect" ref="logInterceptor">

<!-- 定义切入点 (配置在com.sjzxywlkj.cplife.controller下所有的类在调用之前都会被拦截) -->

<aop:pointcut expression="execution(* com.sjzxywlkj.cplife.controller.*.*(..))"

id="logPointCut" />

<!--方法执行之前被调用执行的 -->

<aop:before method="before" pointcut-ref="logPointCut" /><!--一个切入点的引用 -->

<aop:after method="after" pointcut-ref="logPointCut" /><!--一个切入点的引用 -->

</aop:aspect>

</aop:config>

日志处理类

package com.sjzxywlkj.cplife.log;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

public class LogInterceptor {

private final Logger logger = LoggerFactory.getLogger(LogInterceptor.class);

// private static Logger logger =LoggerFactory.getLogger(LogInterceptor.class);

public void before() {

logger.info("login start!");

logger.debug("lllllllllllllllllllllll");

// System.out.println("qqqqqqqqqqqqqqqqqqqqq");

}

public void after() {

logger.info("login end!");

logger.debug("aaaaaaaaaaaaaaaaaaaaaaaaa");

// System.out.println("wwwwwwwwwwwwwwwwwwwwwwwwwww");

}

}

log4j.properties日志文件配置

### 设置###

### 日志相应级别debug,输出位置 d,e

log4j.rootLogger = debug,D,E

### 输出DEBUG 级别以上的日志到=E://logs/log.log ###

log4j.appender.D = org.apache.log4j.DailyRollingFileAppender

log4j.appender.D.File = ${webapp.root}/WEB-INF/logs/log.log

log4j.appender.D.Append = true

log4j.appender.D.Threshold = DEBUG

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 级别以上的日志到=E://logs/error.log ###

log4j.appender.E = org.apache.log4j.DailyRollingFileAppender

log4j.appender.E.File =${webapp.root}/WEB-INF/logs/error.log

log4j.appender.E.Append = true

log4j.appender.E.Threshold = ERROR

log4j.appender.E.layout = org.apache.log4j.PatternLayout

log4j.appender.E.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss}  [ %t\:%r ] - [ %p ]  %m%n

web.xml配置日志

<context-param>

<param-name>log4jConfigLocation</param-name>

<param-value>classpath:resources/log4j.properties</param-value>

</context-param>

<listener>

<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>

</listener>

注解文件配置

spring-mvc.xml文件配置

方法一

//扫描aop日志处理类

<context:component-scan base-package="com.sjzxywlkj.cplife.log" />

//开启aop

<aop:aspectj-autoproxy proxy-target-class="true" />

方法二

<bean id="logInterceptor" class="com.sjzxywlkj.cplife.log.LogInterceptor"></bean>

<aop:aspectj-autoproxy proxy-target-class="true"/>

日志切面类

package com.sjzxywlkj.cplife.log;

import org.aspectj.lang.annotation.After;

import org.aspectj.lang.annotation.Aspect;

import org.aspectj.lang.annotation.Before;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.stereotype.Component;

@Aspect

@Component

public class LogInterceptor {

private final Logger logger = LoggerFactory.getLogger(LogInterceptor.class);

@Before(value = "execution(* com.sjzxywlkj.cplife.controller.*.*(..))")

public void before() {

logger.info("login start!");

System.out.println("lllllllllllllllllllll");

}

@After(value = "execution(* com.sjzxywlkj.cplife.controller.*.*(..))")

public void after() {

logger.info("login end!");

System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaa");

}

}

基于自定义注解

配置文件设置

<context:component-scan base-package="com.sjzxywlkj.cplife.log"></context:component-scan>

<context:component-scan base-package="com.sjzxywlkj.cplife.annotation"></context:component-scan>

<aop:aspectj-autoproxy proxy-target-class="true">

</aop:aspectj-autoproxy>

l   自定义注解

package com.sjzxywlkj.cplife.annotation;

import java.lang.annotation.Documented;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

@Target(ElementType.METHOD)

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface Log {

String oper() default "";

}

l   日志切面类

package com.sjzxywlkj.cplife.log;

import java.lang.reflect.Method;

import org.aspectj.lang.JoinPoint;

import org.aspectj.lang.annotation.Aspect;

import org.aspectj.lang.annotation.Before;

import org.aspectj.lang.annotation.Pointcut;

import org.aspectj.lang.reflect.MethodSignature;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.stereotype.Component;

import com.sjzxywlkj.cplife.annotation.Log;

@Aspect

@Component

public class LogInterceptor {

private final Logger logger = LoggerFactory.getLogger(LogInterceptor.class);

@Pointcut("@annotation(com.sjzxywlkj.cplife.annotation.Log)")

public void controllerAspect() {

}

@Before("controllerAspect()")

public void before(JoinPoint joinPoint) {

logger.info(getOper(joinPoint));

}

private String getOper(JoinPoint joinPoint) {

MethodSignature methodName = (MethodSignature) joinPoint.getSignature();

Method method = methodName.getMethod();

return method.getAnnotation(Log.class).oper();

}

}

l   Controller注入

@Controller

@RequestMapping("/user")

public class UserController {

@Autowired

private IUserService uService;

// 用户登录

@RequestMapping(value = "/login", method = RequestMethod.GET)

@ResponseBody

@Log(oper="user login")

public String login(){

return null;

}

SpringAOP日志配置的更多相关文章

  1. Spring2.5那些事之基于AOP的方法级注解式日志配置

    在日常开发中经常需要在代码中加入一些记录用户操作日志的log语句,比如谁在什么时间做了什么操作,等等. 把这些对于开发人员开说无关痛痒的代码写死在业务方法中实在不是一件很舒服的事情,于是AOP应运而生 ...

  2. django 1.8 日志配置

    django 1.8 日志配置 以下为setings配置logging代码片段 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(_ ...

  3. nginx日志配置

    nginx日志配置 http://www.ttlsa.com/linux/the-nginx-log-configuration/ 日志对于统计排错来说非常有利的.本文总结了nginx日志相关的配置如 ...

  4. 日志配置logback

    在选择项目日志框架时,发现log4j的作者开发了新的日志框架,据说性能提高不少,那就选它了,不过,除了配置上有点不习惯外,最重要的一点 ,打印线程号这个功能依然没有(打印线程名这个东西是在是个鸡肋). ...

  5. 服务器是windows时tomcat无法打印所有日志配置修改

    Tomcat运行仅一天磁盘空间突然就增加了很多,发现是日志文件太大了,修改tomcat的日志配置即可. 查看目录所占空间大小: ? 1 [root@XXX webapps]du -sh 清理方法: ? ...

  6. [译]Stairway to Integration Services Level 12 - 高级日志配置

    介绍 本文中,我们将结合之前学习的时间冒泡,日志记录,以及复制模型.建立一个自定义的SSIS包日志模型. SSIS Task事件回顾    Reviewing SSIS Task Events 在做实 ...

  7. [译]Stairway to Integration Services Level 11 - 日志配置

    介绍 在前一个章节我们讨论了事先行为,分享了如何操作默认的行为和时间冒泡,并且介绍了父子模型. 本文中,我们会配置SSIS日志. 进行简单及高级日志配置,存储,和检索的实验.并且生成自定义日志信息. ...

  8. Nginx日志配置及日志切割

    日志配置 日志对于统计排错来说非常有利的.本文总结了nginx日志相关的配置如access_log.log_format.open_log_file_cache.log_not_found.log_s ...

  9. SpringBoot之简单日志配置

    我的目的指定一个文件夹输出:(不采用指定文件的原因是一个文件的大小时间长了会很大,不利于处理) logging: level: root: INFO org.sselab: controller: I ...

随机推荐

  1. ILBC 规范 2

    接上篇 <ILBC 规范>  https://www.cnblogs.com/KSongKing/p/10354824.html  , ILBC    的 目标 是    跨平台  跨设备 ...

  2. mac os high sierra下搭建php多版本-php5.2+php5.6-nginx

    xampp的apache彻底启动不来了. php52的编译参数 ./configure --prefix=/usr/local/Cellar/php52bysk/ --with-config-file ...

  3. Windows系统中监控文件复制操作的几种方式

    http://blog.sina.com.cn/s/blog_4596beaa0100lp4y.html 1. ICopyHook 作用: 监视文件夹和打印机移动,删除, 重命名, 复制操作. 可以得 ...

  4. MyEclipse 10 + OsChina GIt项目托管

    环境:Egit+MyEclipse 10,此教程默认MyEclipse 10和Egit都已经配置好. 1.注册OsChina Git账号,网址:http://git.oschina.net/,具体注册 ...

  5. Nginx 安装配置教程

    1.安装 Nginx 的先决条件 依赖库:GCC, PCRE, zlib, OpenSSL . * GCC (Nginx 由 C 语言编写,因此需要在系统上安装一个编译工具) 基本上 Linux 自带 ...

  6. Python与设计模式之创建型模式及实战

    用Python学习一下设计模式,如果很枯燥的话,就强行能使用的就用一下.设计模式参考Python与设计模式-途索 1. 单例模式 保证一个类仅有一个实例,并提供一个访问它的全局访问点. import ...

  7. cat查阅文件技巧

    一.打印除匹配行之外的其它行,使用-v 打印除$和#的注释行:cat file| grep -v ^$ | grep -v ^#

  8. QTP - 工作原理

    1.QTP的工作原理测试对象是QTP在测试或组件中创建的用于表示应用程序中的实际对象的对象,并且QuickTest在对象库中存储有关该对象的信息,包括对象的属性.操作等.录制的时候,QTP将操作过的所 ...

  9. py库: matplotlib

    Matplotlib是一个Python 2D绘图库,可以跨平台生成各种硬拷贝格式和交互式环境的出版品质量图. http://matplotlib.org/ matplotlib官网 http://py ...

  10. 【浅说】堆(heap)和栈(stack)区别

    在了解堆与栈之前,我们想来了解下程序的内存分配 一个编译的程序占用的内存分为以下几个部分  :  1.栈区(stack)—   由编译器自动分配释放   ,存放函数的参数值,局部变量的值等.其操作方式 ...