Enums aspectj日志记录中的开关情况
我使用加载时aspectj来记录我的方法,我使用“后置”注释来记录我的异常。在后述方法中,我有一个开关案例来确定要使用的日志级别类型(信息、警告、调试…),日志级别作为枚举实现Enums aspectj日志记录中的开关情况,enums,aspectj,Enums,Aspectj,我使用加载时aspectj来记录我的方法,我使用“后置”注释来记录我的异常。在后述方法中,我有一个开关案例来确定要使用的日志级别类型(信息、警告、调试…),日志级别作为枚举实现 switch (Exp.getLoggingLevel()) { case INFO: logger.info( String.format( ERROR_MESSAGE,
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上的框架、注释或模式)定制“执行(**(字符串,…)”;但是,为什么要在后面的注释中使用级别信息或调试?你有使用错误吗?!?非常感谢。我没有使用错误,因为我们有例外,我们不定义为错误