Enums aspectj日志记录中的开关情况

Enums aspectj日志记录中的开关情况,enums,aspectj,Enums,Aspectj,我使用加载时aspectj来记录我的方法,我使用“后置”注释来记录我的异常。在后述方法中,我有一个开关案例来确定要使用的日志级别类型(信息、警告、调试…),日志级别作为枚举实现 switch (Exp.getLoggingLevel()) { case INFO: logger.info( String.format( ERROR_MESSAGE,

我使用加载时aspectj来记录我的方法,我使用“后置”注释来记录我的异常。在后述方法中,我有一个开关案例来确定要使用的日志级别类型(信息、警告、调试…),日志级别作为枚举实现

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;

我们担心这不是最有效的方式。还有别的办法吗

为什么不呢?不幸的是,当你打电话时

   logger.warn (String.format(...
首先java execute String.format(相当昂贵)第二次执行方法warn;如果日志级别为ERROR,“String.format”调用完全没有必要

我认为问题出在其他地方:

  • 由于日志算法
  • 由于反射

使用哪种日志框架?

< P>如果您使用Java8,请考虑用一种方法编写代码接口<代码>日志记录方法< /代码> <代码>无效日志(字符串MSG,Exp Exp)< /代码>。然后,您可以在类似
method=logger::warn
的情况下分配
LoggingMethod
。然后只调用一次
method.log(string.format(…),exp)


更好的是,让
LoggingLevel
返回LoggingMethod。您不需要java8,您可以使用类型间声明来添加它。

我使用的是slf4j。如何在切换前进行日志级别检查?这不是一个混乱的代码吗?lior,slf4j是logback或log4j的外观;您可以使用本机方法“info/debug/warn/error(字符串格式、对象…参数)”,您可以将代码链接到实现4个日志级别的不同方面。有没有办法通过日志级别切入一个方面?您可以详细说明您提出的第二个建议吗?是的,您可以为每个不同的日志级别定义一个方法,然后您可以使用切入点(取决于spring上的框架、注释或模式)定制“执行(**(字符串,…)”;但是,为什么要在后面的注释中使用级别信息或调试?你有使用错误吗?!?非常感谢。我没有使用错误,因为我们有例外,我们不定义为错误