日志管理【想要在控制台打印出更加详细的信息吗?】

   1  自定义日志接口

import java.lang.annotation.ElementType;

import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**

  * 系统日志记录
  *
 */

@Retention(RetentionPolicy.RUNTIME)//注解===类型的信息会被保留在java  class   jvm里面
@Target({ElementType.METHOD})//@Target里的ElementType用来指定Annotation类型可以放在那些元素上
public @interface  Log {//@interface是一个关键字,设置注解的时候必须把这个类型定义为@interface
String name() default "";//传过来的name  默认的是“”   比如:登陆查询
}

//RetentionPolicy


//这是一个enum类型,共有三个值,分别是SOURCE,CLASS 和 RUNTIME. 
//SOURCE代表的是这个Annotation类型的信息只会保留在程序源码里,源码如果经过了编译之后,Annotation的数据就会消失,并不会保留在编译好的.class文件里 面。 
//ClASS的意思是这个Annotation类型的信息保留在程序源码里,同时也会保留在编译好的.class文件里面,在执行的时候,并不会把这一些信息加载到虚拟机(JVM)中去. 注意一下,当你没有设定一个Annotation类型的Retention值时,系统默认值是CLASS. 
//RUNTIME,表示在源码、编译好的.class文件中保留信息,在执行的时候会把这一些信息加载到JVM中去的. 

//举一个例子,如@Override里面的Retention设为SOURCE,编译成功了就不要这一些检查的信息;相反,@Deprecated里面的Retention设为RUNTIME,表示除了在编译 时会警告我们使用了哪个被Deprecated的方法,在执行的时候也可以查出该方法是否被Deprecated.


2.编写log切点

import java.lang.reflect.Method;
import javax.annotation.Resource;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import com.person.service.log.LogService;
import com.person.util.MyException;


/**
 * 系统日志记录切点设置
 * 【@Aspect直接不能被Spring自动标识并注册为Bean,必须通过@Component注解来完成】
 */


@Aspect//@Aspect 风格的切面可以通过@Compnent  注解标识其为Spring管理的bean   
@Component//泛指组件【自定义的spring的bean】,component组件包的扫描,会把组件放入spring让                                  其中进行管理
public class LogAop {
@Resource(name="logService")
private LogService logService;

@Pointcut("@annotation(com.person.entity.framework.log.Log)")//切点
public void log(){
}

@After("log()")
public void afterExec(JoinPoint joinPoint) throws MyException{
MethodSignature ms=(MethodSignature) joinPoint.getSignature();//得到签名方法
Method method=ms.getMethod();
System.out.println(method.getName()+method.getAnnotation(Log.class).name());//   调用Log----切点直接切入Log-----得到签名方法-------签名方法打印调用Log的 方法和调用name
}


/*
*   1, @Aspect 使用JoinPoint 接口表示目标类连接点对象【获得目标方法及目标对象的信息】
*   2,jointPoint参数, 这个值会自动的有spring传入,可以从jointPonint中取得参数值,方法名等,
*/

}


3.在service层调用接口,在控制台打印信息


@Log(name="登陆查询")
public PageData  getUserByNameAndPwd(PageData pd){

}

控制台打印信息 getUserByNameAndPwd登陆查询


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值