@Log (以及它的朋友们)
舰长日志,星历 24435.7: “那句话怎么说的来着?”
各种 @Log
变体是在 lombok v0.10 中添加的。lombok 0.10 版本的新特性: 您可以使用日志注解来注解任何类,让 lombok 生成一个 logger 字段。
logger 被命名为 log
,字段的类型取决于您选择的 logger。
lombok v1.16.24 版本的新特性: 添加了 google 的 FluentLogger (通过 @Flogger
)。
lombok v1.18.10 版本的新特性: 添加了 @CustomLog
,它允许您通过配置一个配置键来添加任何 logger,以指定如何创建它们。
概述
您将 @Log
的变体放在您的类上(无论哪个适用于您使用的日志系统);然后您就拥有一个静态 final 的 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);
-
@CustomLog
- 创建
private static final com.foo.your.Logger log = com.foo.your.LoggerFactory.createYourLogger(LogExample.class);
此选项需要您在
lombok.config
文件中添加配置,以指定@CustomLog
应该做什么。例如:
lombok.log.custom.declaration = com.foo.your.Logger com.foo.your.LoggerFactory.createYourLog(TYPE)(TOPIC)
这将生成上述语句。首先是类型,即您的 logger 的类型,然后是一个空格,然后是您的 logger 工厂的类型,然后是一个点,然后是 logger 工厂方法的名称,然后是 1 个或 2 个参数定义;最多一个带有TOPIC
的定义,以及最多一个没有TOPIC
的定义。每个参数定义都被指定为一个带括号的逗号分隔的参数种类列表。选项包括:TYPE
(传递此@Log
注解的类型,作为一个类),NAME
(传递此@Log
注解的类型的完全限定名称),TOPIC
(传递在@CustomLog
注解上显式选择的主题字符串),以及NULL
(传递null
)。logger 类型是可选的;如果省略,则使用 logger 工厂类型。(因此,如果您的 logger 类有一个创建 logger 的静态方法,您可以缩短您的 logger 定义)。
如果存在我们尚未提供显式注解的公共、开源、且相对常用的日志框架,请联系我们。
@CustomLog
的主要目的是支持您内部的、私有的日志框架。
默认情况下,logger 的主题(或名称)将是使用 @Log
注解注解的类的(名称)。这可以通过指定 topic
参数进行自定义。例如:@XSlf4j(topic="reporting")
。
使用 Lombok
import lombok.extern.java.Log;
|
原生 Java
public class LogExample {
|
支持的配置键
-
lombok.log.fieldName
= 一个标识符 (默认值:log
)。 - 生成的 logger 字段名默认是 '
log
',但您可以使用此设置将其更改为不同的名称。 -
lombok.log.fieldIsStatic
= [true
|false
] (默认值: true) - 通常,生成的 logger 是一个
static
字段。通过将此键设置为false
,生成的字段将改为实例字段。 -
lombok.log.custom.declaration
= LoggerType LoggerFactoryType.loggerFactoryMethod(loggerFactoryMethodParams)(loggerFactoryMethodParams) - 配置使用
@CustomLog
时要生成的内容。(斜体部分是可选的)。loggerFactoryMethodParams 是一个逗号分隔的列表,包含零个或多个要传递的参数种类。有效种类:TYPE、NAME、TOPIC 和 NULL。您可以包含一个参数定义,用于在未设置显式主题的情况下(参数列表中不包含 TOPIC),以及用于在设置了显式主题的情况下(参数列表中包含 TOPIC)。 -
lombok.log.flagUsage
= [warning
|error
] (默认值: 未设置) - 如果配置了,Lombok 将标记任何对各种日志注解的使用,将其作为警告或错误。
-
lombok.log.custom.flagUsage
= [warning
|error
] (默认值: 未设置) - 如果配置了,Lombok 将标记任何对
@lombok.CustomLog
的使用,将其作为警告或错误。 -
lombok.log.apacheCommons.flagUsage
= [warning
|error
] (默认值: 未设置) - 如果配置了,Lombok 将标记任何对
@lombok.extern.apachecommons.CommonsLog
的使用,将其作为警告或错误。 -
lombok.log.flogger.flagUsage
= [warning
|error
] (默认值: 未设置) - 如果配置了,Lombok 将标记任何对
@lombok.extern.flogger.Flogger
的使用,将其作为警告或错误。 -
lombok.log.jbosslog.flagUsage
= [warning
|error
] (默认值: 未设置) - 如果配置了,Lombok 将标记任何对
@lombok.extern.jbosslog.JBossLog
的使用,将其作为警告或错误。 -
lombok.log.javaUtilLogging.flagUsage
= [warning
|error
] (默认值: 未设置) - 如果配置了,Lombok 将标记任何对
@lombok.extern.java.Log
的使用,将其作为警告或错误。 -
lombok.log.log4j.flagUsage
= [warning
|error
] (默认值: 未设置) - 如果配置了,Lombok 将标记任何对
@lombok.extern.log4j.Log4j
的使用,将其作为警告或错误。 -
lombok.log.log4j2.flagUsage
= [warning
|error
] (默认值: 未设置) - 如果配置了,Lombok 将标记任何对
@lombok.extern.log4j.Log4j2
的使用,将其作为警告或错误。 -
lombok.log.slf4j.flagUsage
= [warning
|error
] (默认值: 未设置) - 如果配置了,Lombok 将标记任何对
@lombok.extern.slf4j.Slf4j
的使用,将其作为警告或错误。 -
lombok.log.xslf4j.flagUsage
= [warning
|error
] (默认值: 未设置) - 如果配置了,Lombok 将标记任何对
@lombok.extern.slf4j.XSlf4j
的使用,将其作为警告或错误。
小字印刷
如果名为 log
的字段已存在,则会发出警告,并且不会生成任何代码。
lombok 的各种日志注解的未来功能是查找对 logger 字段的调用,并且如果所选的日志框架支持它,并且可以从日志调用中编译时确定日志级别,则使用 if
语句保护它。这样,如果日志语句最终被忽略,则可以完全避免可能代价高昂的日志字符串计算。这确实意味着您不应将任何副作用放在您记录的表达式中。