log日志的java动态代理

       问题描述:今天老大告诉我说系统的Log日志要修改,有些参数不能打印,有些参数不能打印,有些参数要替换部分内容,要求系统要尽量小的修改。我修改了一天,现记录如下。

思路:

       思路一. 定义方法,传入要打印参数和要替换的参数

       思路二. 用注解或aop的方式实现,在对象的属性上加自定义注解,通过解析此注解,替换属性内容来达到目的

       思路三. jdk的动态代理,代理log日志来实现

解析:

       思路一可以实现,也能达到想要的效果,但是代码改动量太大。每个log日志处都要调用此方法,对于其他人来说代码的可读性不高,开销太大。

       思路二通过注解加aop的方式,如果参数不是写在对象中的,则不能话则不能解决问题,而且在log.info中,无法得到对象中的内容

       思路三是别人提醒我的,此方法为log日志实现代理,每个需要打印日志的类中,只要替换日志即可

实现:

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @description 日志代理类.
 * @author Silencer
 * @date 2018-11-13 21:55:23
 * @version v_1.0
 */
public class LoggerProxy implements InvocationHandler {
	
	private Logger logger;
	
	public LoggerProxy(Class<?> clazz) {
		logger = LoggerFactory.getLogger(clazz);
	}

	public static Logger getLogger(Class<?> clazz) {
		LoggerProxy proxy = new LoggerProxy(clazz);
		return (Logger) Proxy.newProxyInstance(proxy.getClass().getClassLoader(), proxy.logger.getClass().getInterfaces(), proxy);
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		System.out.println("操作前!");
		Object invoke = method.invoke(logger, args);
		System.out.println("操作后!");
		return invoke;
	}
	
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值