开发环境
- JDK 1.8
- Lombok - 1.18.16
背景
公司因为开源节流需要,需要区分重要日志
和非重要日志
,一个月光日志的费用有30w之多确实恐怖了一些(PS:够几十个程序员的工资了)。所以,公司要求将日志区分开,去除一些非必要的日志,记录的日志也最多保留15天,重要日志30天。
为了区分场景日志,单独搞了个Logger日志记录器来采集日志,为了继续用注解的方式在项目中,这时就需要@CustomLog
注解了,方便的将多个日志记录器集成在一起,话不多说,开干!
如果在项目中直接使用@CustomLog
注解,你会看到如下图的报错信息:
这个时候需要添加配置文件lombok.config
,在项目中就可以直接使用了!
特别注意:配置文件的位置需要在
@CustomLog
注解所在文件的上层目录,我为了方便通常直接放在模块的根目录
或项目的根目录
进行使用。
添加的配置信息如下:
代码语言:javascript复制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方式生成的代码
代码语言:javascript复制private static final IntegrationLog log = IntegrationLog.getLogger(LogPrintService.class);
复制代码
NAME方式生成的代码
代码语言:javascript复制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给我们生成了什么样的代码:
代码语言:javascript复制public class LogPrintService {
private static final IntegrationLog log = IntegrationLog.getLogger(LogPrintService.class);
public LogPrintService() {
}
public void printLog() {
log.bizInfo("哈哈哈哈", new Object[0]);
}
}
复制代码
其实Lombok做的事情,就是帮我们创建了一个实例,简单易懂。