我正在使用加载时间aspectj来记录我的方法,并使用“afterThrowing”注释来记录我的异常。在afterThrowing方法中,我有一个switch case来确定要使用的日志级别类型(INFO,WARN,DEBUG ....),日志级别是作为枚举实现的。
switch (Exp.getLoggingLevel()) {
case INFO:
logger.info(
String.format(
ERROR_MESSAGE,
joinPoint.getSignature().getDeclaringTypeName(),
joinPoint.getSignature().getName()),
Exp);
break;
case DEBUG:
logger.debug(
String.format(
ERROR_MESSAGE,
joinPoint.getSignature().getDeclaringTypeName(),
joinPoint.getSignature().getName()),
netoExp);
break;
case TRACE:
logger.trace(
String.format(
ERROR_MESSAGE,
joinPoint.getSignature().getDeclaringTypeName(),
joinPoint.getSignature().getName()),
Exp);
break;
case WARN:
logger.warn(
String.format(
ERROR_MESSAGE,
joinPoint.getSignature().getDeclaringTypeName(),
joinPoint.getSignature().getName()),
Exp);
break;
我们担心这不是最有效的方式。有不同的方式吗?
答案 0 :(得分:0)
为什么不呢?你致电
时不幸 logger.warn (String.format(...
fisrtly java执行String.format(相当昂贵)第二次执行方法警告;如果日志级别为ERROR,则“String.format”调用完全没必要。
我认为问题出在其他地方:
您正在使用哪种日志框架?
答案 1 :(得分:0)
如果您使用的是java8,请考虑使用一种方法LoggingMethod
创建功能接口void log(String msg, Exp exp)
。然后,您可以在LoggingMethod
之类的情况下指定method = logger::warn
。然后只有一个电话method.log(string.format(...), exp)
。
更好的是,让LoggingLevel
返回LoggingMethod。你不需要java8,你可以使用类型间声明来添加它。