java 封装log4j_Java项目 切片实现log4j的终极封装

本文介绍了如何在Java项目中实现log4j的封装,包括创建通用型的日志工具类`Log`,方便各处使用,以及Spring AOP方式的切面`LoggerAdvice`,自动记录方法的执行前、后及异常信息。这样可以避免在每个类中实例化logger,提高代码的整洁性和可维护性。
摘要由CSDN通过智能技术生成

通用型(再也不用每个类new一个logger了)

public classLog {private static Map loggerMap = new HashMap();public static void main(String[] args) throwsClassNotFoundException {

Log.error("自定义LOG","sss444444");

}public static voiddebug(Object message){

String className=getClassName();

Logger log=getLogger(className);if(log.isDebugEnabled()){

log.debug(message);

}

}public static voiddebug(String tag, Object message){

String className=getClassName();

Logger log=getLogger(className);if(log.isDebugEnabled()){

log.debug(new StringBuffer().append("【").append(tag).append("】").append(message).toString());

}

}public static voidinfo(Object message){

String className=getClassName();

Logger log=getLogger(className);if(log.isInfoEnabled()){

log.info(message);

}

}public static voidinfo(String tag, Object message){

String className=getClassName();

Logger log=getLogger(className);if(log.isInfoEnabled()){

log.info(new StringBuffer().append("【").append(tag).append("】").append(message).toString());

}

}public static voidwarn(Object message){

String className=getClassName();

Logger log=getLogger(className);

log.warn(message);

}public static voidwarn(String tag, Object message){

String className=getClassName();

Logger log=getLogger(className);

log.warn(new StringBuffer().append("【").append(tag).append("】").append(message).toString());

}public static voiderror(Object message){

String className=getClassName();

Logger log=getLogger(className);

log.error(message);

}public static voiderror(String tag, Object message){

String className=getClassName();

Logger log=getLogger(className);

log.error(new StringBuffer().append("【").append(tag).append("】").append(message).toString());

}/*** 获取最开始的调用者所在类

*@return

*/

private staticString getClassName(){

Throwable th= newThrowable();

StackTraceElement[] stes=th.getStackTrace();

StackTraceElement ste= stes[2];returnste.getClassName();

}/*** 根据类名获得logger对象

*@paramclassName

*@return

*/

private staticLogger getLogger(String className){

Logger log= null;if(loggerMap.containsKey(className)){

log=loggerMap.get(className);

}else{try{

log=Logger.getLogger(Class.forName(className));

loggerMap.put(className, log);

}catch(ClassNotFoundException e) {

e.printStackTrace();

}

}returnlog;

}

}

spring型(上个注释自己帮我们log了)

@Aspect

@Service

public class LoggerAdvice {

private Logger logger = Logger.getLogger(this.getClass());

@Before("within(com.example.webmanager..*) && @annotation(loggerManage)")

public void addBeforeLogger(JoinPoint joinPoint, LoggerManage loggerManage) {

logger.info("执行 " + loggerManage.description() + " 开始");

logger.info("地址 "+joinPoint.getSignature().toString());

logger.info("参数 "+this.parseParames(joinPoint.getArgs()));

}

@AfterReturning("within(com.example.webmanager..*) && @annotation(loggerManage)")

public void addAfterReturningLogger(JoinPoint joinPoint, LoggerManage loggerManage) {

logger.info("执行 " + loggerManage.description() + " 结束");

}

@AfterThrowing(pointcut = "within(com.example.webmanager..*) && @annotation(loggerManage)", throwing = "ex")

public void addAfterThrowingLogger(JoinPoint joinPoint, LoggerManage loggerManage, Exception ex) {

logger.error("执行 " + loggerManage.description() + " 异常", ex);

}

private String parseParames(Object[] parames) {

if (null == parames || parames.length <= 0) {

return "";

}

StringBuffer param = new StringBuffer("传入参数[");

for (Object obj : parames) {

param.append("{").append(ToStringBuilder.reflectionToString(obj)).append("} ");

}

param.append("]");

return param.toString();

}

}

@Target(ElementType.METHOD)

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface LoggerManage {

String description();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值