sfj4jlog代理日志,封装SLF4J/Log4j,不再处处定义logger变量

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

import org.slf4j.impl.Log4jLoggerAdapter;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

/**
 * 代理日志工厂类
 * 
 * @author hyl 279241400@qq.com 2019年4月25日下午7:39:33
 *
 */
public final class LogProxyFactory {
	public final static LogProxy getProXy(Class<?> cls) {
		try {
			Enhancer enhancer = new Enhancer();
			enhancer.setSuperclass(LogProxy.class);
			enhancer.setCallback(new MethodInterceptor() {
				@Override
				public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
					Field nameField = Log4jLoggerAdapter.class.getDeclaredField("FQCN");
					Field modifiersField = Field.class.getDeclaredField("modifiers");
					modifiersField.setAccessible(true);
					modifiersField.setInt(nameField, nameField.getModifiers() & ~Modifier.FINAL);
					nameField.setAccessible(true);
					nameField.set(null, cls.getName());
					Object result = proxy.invokeSuper(obj, args);
					nameField.set(null, Log4jLoggerAdapter.class.getName());
					return result;
				}
			});
			return (LogProxy) enhancer.create();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return new LogProxy();
	}
}


/**
* 代理日志定义
**/
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import cn.ws.core.util.enumtype.LogLevel;
    
    /**
     * 代理日志类
     * 
     * @author hyl 279241400@qq.com 2019年4月25日下午4:10:07
     *
     */
    public class LogProxy {
    	private static final Logger log = LoggerFactory.getLogger(LogProxy.class);
    
    	/***
    	 * 
    	 * @param level
    	 * @param msg
    	 */
    	public void slf4jlog(LogLevel level, String msg) {
    		switch (level) {
    		case Info:
    			log.info(msg);
    			break;
    		case Waning:
    			log.warn(msg);
    			break;
    		case Error:
    			log.error(msg);
    			break;
    		default:
    			log.info(msg);
    		}
    	}
    }

===============================================
使用方式:

import cn.ws.core.util.enumtype.LogLevel;

public class LogTest {

	private final static LogProxy log = LogProxyFactory.getProXy(LogTest.class);

	public static void test(String msg) {
		log.slf4jlog(LogLevel.Info, msg);
	}
}

log4J定义:

log4j.rootLogger=info, stdout
log4j.logger.cn.infome.bm=DEBUG
log4j.logger.javax.sql=DEBUG
#log4j.logger.org.springframework=DEBUG

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d (%F:%L) %-5p - %m%n

===================================================

自定义测试main

import org.apache.log4j.BasicConfigurator;

import cn.ws.util.LogTest;

public class Log {

	public static void main(String[] args) {
		LogTest.test("测试");
	}

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值