个人文章-编程思维

开发环境

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做的事情,就是帮我们创建了一个实例,简单易懂。

版权声明:本文版权归作者所有,遵循 CC 4.0 BY-SA 许可协议, 转载请注明原文链接
https://segmentfault.com/a/1190000043374072

码猿技术专栏-编程思维

大家好,我是不才陈某~不知道大家在项目中有没有遇到过这样的场景,根据传入的类型,调用接口不同的实现类或者说服务,比如根据文件的类型使用 CSV解析器或者JSON解析器,在调用的客户端一般都是用if else去做判断,比如类型等于JSON,我就用JSON解析器,那如果新加一个类型的解析器,是不是调用的客户端还要修改呢?这

个人文章-编程思维

众所周知目前前后端交互基本都采用标准的JSON结构{"code": 200, "message": "成功", "data": null}不认识@ControllerAdvice注解之前接口是这样返回的 @GetMapping("/") public BaseResponse<String>

个人文章-编程思维

MYSQL执行过程一个UPDATE语句正在执行:UPDATE test SET idx = 2 WHERE id=10,执行流程如下(这里主要以InnoDB存储引擎体系结构中的组件为主):在Server层进行词法解析,解析成MySQL认识的语法,查询什么表、什么字段,并生成查询路径树,选择最优查询路径。到了InnoDB

个人文章-编程思维

本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~Github地址:https://github.com/Tyson031

九旬的博客-编程思维

前言我们在 Web 开发过程中,有很多用到音频元素audio的场景,如音乐播放器、语音播放等功能,但是由于原生组件有以下缺点:原生UI样式丑,在追求美观的页面中需要重写元素样式,而且支持重写的样式不多。浏览器兼容问题,不同浏览器的音频元素展示不同。因为以上两个问题,这就导致我们需要对原生的audio进行修改时比较困难。

九旬的博客-编程思维

浏览器截图方案分析页面截屏是前端经常遇到的需求,比如页面生成海报,弹窗图片分享等。以下是我整理三种截图方案:html2canvasdom-to-imagewebRTChtml2canvashtml2canvas 用的比较广泛的前端截图方案,先将 DOM 一个个 转为 Canvas 然后导出图片(使用 canvas 自带

九旬的博客-编程思维

前端图片压缩方案压缩图片原理:先通过 js 中 img 构造函数,实例化 img 对象,后将图片的路径给转移到中,再建立一个 canvas 画布,后对画布进行各方面的数值的设置。如代码所示:<!DOCTYPE html> <html lang="en"> <head>

个人文章-编程思维

预览服务器上的html静态网页远程服务器中html静态文件不方便直接查看使用vscode快速预览远程服务器上的html静态文件我遇到的场景:我使用windows电脑办公,使用vscode的ssh远程到一台ubuntu主机上开发近期使用pytest+allure做一些测试实验,生成的报告是静态html在本地windows

html iframe 的优缺点-编程思维

一、优点 iframe 有以下优点: 封装性:iframe 可以在页面中封装和隔离不同的内容,使页面更清晰和易于维护。 资源利用:iframe 可以在页面中复用相同的内容,节省了开发时间和资源。 容错性:iframe 中的内容发生错误时,不会影响整个页面的正常使用。 二、缺点 iframe 有以下缺点: