开发环境

  • JDK 1.8
  • Lombok – 1.18.16

背景

公司因为开源节流需求,需求区别重要日志非重要日志,一个月光日志的费用有30w之多确实恐怖了一些(PS:够几十个程序员的薪酬了)。所以,公司要求将日志区别开,去除一些非必要的日志,记录的日志也最多保留15天,重要日志30天。

为了区别场景日志,独自搞了个Logger日志记录器来采集日志,为了持续用注解的方法在项目中,这时就需求@CustomLog注解了,便利的将多个日志记录器集成在一起,话不多说,开干!

如果在项目中直接运用@CustomLog注解,你会看到如下图的报错信息:

Lombok的@CustomLog,公司多场景日志爽多了!

这个时分需求增加装备文件lombok.config,在项目中就能够直接运用了!

特别留意:装备文件的位置需求在@CustomLog注解所在文件的上层目录,我为了便利一般直接放在模块的根目录项目的根目录进行运用。

Lombok的@CustomLog,公司多场景日志爽多了!

增加的装备信息如下:

lombok.log.custom.declaration=com.lombok.log.IntegrationLog com.lombok.log.IntegrationLog.getLogger(TYPE)

留意,com.lombok.log.IntegrationLog com.lombok.log.IntegrationLog.getLogger(TYPE)中心是有空格的,这样才干收效。至于getLogger的小括号内部,有两个值能够运用,分别是TYPE(类的类型)NAME(类的称号)

TYPE方法生成的代码
private static final IntegrationLog log = IntegrationLog.getLogger(LogPrintService.class);
NAME方法生成的代码
private static final IntegrationLog log = IntegrationLog.getLogger("com.lombok.service.LogPrintService");

装备成功的前提,是你的类要符合装备要求,也就是依照lombok的标准去界说类即可。

代码部分

为了便利鉴将多个日志记录器放在一起,必定需求一个集成类,这里我界说一个名为IntegrationLog的类,除了默许的Logger日志目标,还有一个业务记录器目标BusinessLog,用于记录比较重要的日志。当界说好此类后,完结上述的装备即可。

public class IntegrationLog {
    private final Logger logger;
    private final BusinessLog bizLogger;
    private IntegrationLog(Class<?> clazz) {
        this.logger = LoggerFactory.getLogger(clazz);
        this.bizLogger = BusinessLog.getLogger(clazz);
    }
    public static IntegrationLog getLogger(Class<?> clazz) {
        return new IntegrationLog(clazz);
    }
    public void info(String format, Object... args) {
        logger.info(format, args);
    }
    public void bizInfo(String format, Object... args) {
        bizLogger.info(format, args);
    }
}
再看看注解运用的代码部分

代码中咱们就能够畅快的运用了,一个log目标包含了咱们想要的方法。

@CustomLog
public class LogPrintService {
    public void printLog() {
        log.bizInfo("需求多付钱的日志");
        log.info("默许日志");
    }
}

通过查看源码,就能够看到Lombok给咱们生成了什么样的代码:

public class LogPrintService {
    private static final IntegrationLog log = IntegrationLog.getLogger(LogPrintService.class);
    public LogPrintService() {
    }
    public void printLog() {
        log.bizInfo("哈哈哈哈", new Object[0]);
    }
}

其实Lombok做的事情,就是帮咱们创建了一个实例,简单易懂。

参考文献

  • Lombok的Log介绍 – projectlombok.org/features/lo…