开发环境

JDK 1.8
Lombok - 1.18.16

背景
公司因为开源节流须要,须要辨别重要日志和非重要日志,一个月光日志的费用有30w之多的确恐怖了一些(PS:够几十个程序员的工资了)。所以,公司要求将日志辨别开,去除一些非必要的日志,记录的日志也最多保留15天,重要日志30天。
为了辨别场景日志,独自搞了个Logger日志记录器来采集日志,为了持续用注解的形式在我的项目中,这时就须要@CustomLog注解了,不便的将多个日志记录器集成在一起,话不多说,开干!
如果在我的项目中间接应用@CustomLog注解,你会看到如下图的报错信息:

这个时候须要增加配置文件lombok.config,在我的项目中就能够间接应用了!

特地留神:配置文件的地位须要在@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做的事件,就是帮咱们创立了一个实例,简略易懂。