舰长日志,星历24435.7:“怎么又是这行?”

在lombok v0.10中添加了各种@Log变体。 lombok 0.10中的新功能:您可以使用日志注释对任何类进行注释,以使lombok生成logger字段。

记录器名为log,字段的类型取决于您选择的记录器。

lombok v1.16.24中的新功能:添加了Google的FluentLogger(flogger)

引言

你把@Log的变体放在你的类上(无论哪一个适用于你使用的日志系统); 然后,您将得到一个静态的最终日志字段,以当前类名作为初始化参数,然后您可以使用它来编写日志语句。

当前有这几种变体:

@CommonsLog
创建 private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);

@Flogger
创建 private static final com.google.common.flogger.FluentLogger log = com.google.common.flogger.FluentLogger.forEnclosingClass();

@JBossLog
创建 private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class);

@Log
创建 private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());

@Log4j
创建 private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);

@Log4j2
创建 private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);

@Slf4j
创建 private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);

@XSlf4j
创建 private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);

默认情况下,记录器的主题(或名称)将是使用@Log注释注释的类的类名。 可以通过指定topic参数来自定义。 例如:@XSlf4j(topic = "reporting")

使用Lombok

import lombok.extern.java.Log;
import lombok.extern.slf4j.Slf4j;

@Log
public class LogExample {
  
  public static void main(String... args) {
    log.severe("Something's wrong here");
  }
}

@Slf4j
public class LogExampleOther {
  
  public static void main(String... args) {
    log.error("Something else is wrong here");
  }
}

@CommonsLog(topic="CounterLog")
public class LogExampleCategory {

  public static void main(String... args) {
    log.error("Calling the 'CounterLog' with a message");
  }
}

普通Java代码

public class LogExample {
  private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
  
  public static void main(String... args) {
    log.severe("Something's wrong here");
  }
}

public class LogExampleOther {
  private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExampleOther.class);
  
  public static void main(String... args) {
    log.error("Something else is wrong here");
  }
}

public class LogExampleCategory {
  private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog("CounterLog");

  public static void main(String... args) {
    log.error("Calling the 'CounterLog' with a message");
  }
}

支持的配置项

lombok.log.fieldName = an identifier (default: log).
生成的记录器fieldname默认为“log”,但您可以使用此设置将其更改为其他名称。

lombok.log.fieldIsStatic = [true | false] (default: true)
通常,生成的记录器是静态字段。 通过将此键设置为false,生成的字段将是实例字段。

lombok.log.flagUsage = [warning | error] (default: not set)
如果已配置,Lombok会将任何各种日志注释的使用标记为警告或错误。

lombok.log.apacheCommons.flagUsage = [warning | error] (default: not set)
如果已配置,Lombok会将@lombok.extern.apachecommons.CommonsLog的任何用法标记为警告或错误。

lombok.log.flogger.flagUsage = [warning | error] (default: not set)
如果已配置,Lombok会将@lombok.extern.flogger.Flogger的任何用法标记为警告或错误。

lombok.log.jbosslog.flagUsage = [warning | error] (default: not set)
如果已配置,Lombok会将@lombok.extern.jbosslog.JBossLog的任何用法标记为警告或错误。

lombok.log.javaUtilLogging.flagUsage = [warning | error] (default: not set)
如果已配置,Lombok会将@lombok.extern.java.Log的任何用法标记为警告或错误。

lombok.log.log4j.flagUsage = [warning | error] (default: not set)
如果已配置,Lombok会将@lombok.extern.log4j.Log4j的任何用法标记为警告或错误。

lombok.log.log4j2.flagUsage = [warning | error] (default: not set)
如果已配置,Lombok会将@lombok.extern.log4j.Log4j2的任何用法标记为警告或错误。

lombok.log.slf4j.flagUsage = [warning | error] (default: not set)
如果已配置,Lombok会将@lombok.extern.slf4j.Slf4j的任何用法标记为警告或错误。

lombok.log.xslf4j.flagUsage = [warning | error] (default: not set)
如果已配置,Lombok会将@lombok.extern.slf4j.XSlf4j的任何用法标记为警告或错误。

小提示

如果已存在名为log的字段,则将发出警告,并且不会生成任何代码。

Lombok各种日志注解有一个将来特性(future feature),在调用logger字段是将进行判断是否支持,如果日志框架支持,则可最直接编译通过,这个特性使用if语句进行隔离。这样,如果最终忽略了日志语句,则完全避免了可能昂贵的日志字符串计算。这意味着您不应该在日志记录的表达式中添加任何其他功能。

——————————————————————————
行路不知花开处,蓦然回首芷兰香。