Lombok的@CustomLog流畅的公司多场景日志
小龙_GO 人气:0开发环境
- 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…
加载全部内容