开发环境
- 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做的事情,就是帮咱们创建了一个实例,简单易懂。
参考文献
- Lombok的Log介绍 – projectlombok.org/features/lo…