2024-01-10  阅读(5)
原文作者:猫巳 原文地址: https://moonce.blog.csdn.net/article/details/121972578

一、简介

lombok v0.10中添加了各种@Log的变体。lombok 0.10中的新内容:你可以用log注解来注解任何类,让lombok生成一个logger字段。

logger被命名为log,字段的类型取决于你选择了哪一个logger

lombok v1.16.24中的新内容:增加了谷歌的FluentLogger(通过@Flogger)。

lombok v1.18.10中的新功能:增加了@CustomLog,让你可以通过配置如何用配置键来创建任何日志记录器。

您将@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) 这将产生上述语句。

首先是一个类型,即你的记录器的类型,然后是一个空格,然后是你的记录器工厂的类型,然后是一个点,然后是记录器工厂方法的名称,然后是1或2个参数定义;最多一个带有TOPIC的定义,最多一个没有TOPIC的定义。每个参数定义都以括号内的逗号分隔的参数种类列表的形式指定。这些选项是 TYPE(传递这个@Log装饰的类型,作为一个类),NAME(传递这个@Log装饰的类型的完全合格的名称),TOPIC(传递在@CustomLog注释上设置的明确选择的主题字符串),以及NULL(传递空)。

logger类型是可选的;如果省略,则使用logger工厂类型。(因此,如果logger类具有创建logger的静态方法,则可以缩短logger定义)。

@CustomLog的主要目的是支持你的内部私有日志框架。

默认情况下,logger的主题(或名称)将是用@Log注解的类的(名称)。这可以通过指定topic参数进行定制。例如: @XSlf4j(topic="reporting")

二、示例比较

1. 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");
      }
    }

2. 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 = 一个标识符 (默认: log).
默认情况下,生成的记录器字段名为“log”,但您可以使用此设置将其更改为其他名称。

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

lombok.log.custom.declaration = LoggerType LoggerFactoryType.loggerFactoryMethod(loggerFactoryMethodParams)(loggerFactoryMethodParams)
配置在使用@CustomLog时要生成什么。(斜体部分是可选的)。 loggerFactoryMethodParams是一个用逗号分隔的列表,可以传递0到任意数量的参数种类。有效的种类:TYPENAMETOPICNULL。你可以为没有设置明确主题的情况(不要在参数列表中包括TOPIC)和设置明确主题的情况(在列表中包括TOPIC参数)包含一个参数定义。

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

lombok.log.custom.flagUsage = [warning | error] (默认: not set)
如果配置了,Lombok会将任何对@lombok.CustomLog的使用标记为警告或错误。

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

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

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

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

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

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

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

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

四、附属说明

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

lombok的多样化日志注释的一个未来功能是找到对logger字段的调用,如果所选的日志框架支持它,并且日志级别可以在编译时从日志调用中确定,则用if语句来保护它。这样,如果日志语句最终被忽略,就可以完全避免对日志字符串的潜在大量的计算。这确实意味着你不应该在你的日志表达式中加入任何其他操作。

参考文献

【1】@Log (and friends) | Captain’s Log, stardate 24435.7: “What was that line again?”


Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。

它的内容包括:

  • 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
  • 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
  • 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
  • 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
  • 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
  • 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
  • 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
  • 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw

目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:

想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询

同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。

阅读全文