在aspectj日志记录中切换案例

时间:2014-01-05 16:26:30

标签: enums aspectj

我正在使用加载时间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;

我们担心这不是最有效的方式。有不同的方式吗?

2 个答案:

答案 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,你可以使用类型间声明来添加它。