Lombok的@CustomLog,公司多场景日志爽多了!

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 公司因为开源节流需要,需要区分重要日志和非重要日志,一个月光日志的费用有30w之多确实恐怖了一些(PS:够几十个程序员的工资了)。所以,公司要求将日志区分开,去除一些非必要的日志,记录的日志也最多保留15天,重要日志30天。

开发环境

JDK 1.8
Lombok - 1.18.16

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

这个时候需要添加配置文件lombok.config,在项目中就可以直接使用了!

特别注意:配置文件的位置需要在@CustomLog注解所在文件的上层目录,我为了方便通常直接放在模块的根目录或项目的根目录进行使用。

0.4.png

添加的配置信息如下:
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做的事情,就是帮我们创建了一个实例,简单易懂。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
11天前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
|
2月前
|
SQL 数据采集 JSON
使用对比!SLS 数据加工 SPL 与旧版 DSL 场景对照
本文讨论在不同的数据处理需求中,新版数据加工 SPL 与旧版数据加工 DSL 的使用对照。
7346 10
|
3月前
|
消息中间件 存储 Oracle
共识协议的技术变迁问题之能不能介绍下Share Log应用场景Pub/Sub
共识协议的技术变迁问题之能不能介绍下Share Log应用场景Pub/Sub
|
3月前
|
消息中间件 容灾
共识协议的技术变迁问题之Share Log在哪些场景中被广泛应用
共识协议的技术变迁问题之Share Log在哪些场景中被广泛应用
|
2月前
|
存储 Kubernetes Java
阿里泛日志设计与实践问题之在写多查少的降本场景下,通过SLS Scan方案降低成本,如何实现
阿里泛日志设计与实践问题之在写多查少的降本场景下,通过SLS Scan方案降低成本,如何实现
|
3月前
|
监控 存储
日志存储问题之志格式的乱象如何解决
日志存储问题之志格式的乱象如何解决
|
5月前
|
存储 监控 Apache
查询提速11倍、资源节省70%,阿里云数据库内核版 Apache Doris 在网易日志和时序场景的实践
网易的灵犀办公和云信利用 Apache Doris 改进了大规模日志和时序数据处理,取代了 Elasticsearch 和 InfluxDB。Doris 实现了更低的服务器资源消耗和更高的查询性能,相比 Elasticsearch,查询速度提升至少 11 倍,存储资源节省达 70%。Doris 的列式存储、高压缩比和倒排索引等功能,优化了日志和时序数据的存储与分析,降低了存储成本并提高了查询效率。在灵犀办公和云信的实际应用中,Doris 显示出显著的性能优势,成功应对了数据增长带来的挑战。
查询提速11倍、资源节省70%,阿里云数据库内核版 Apache Doris 在网易日志和时序场景的实践
|
5月前
|
存储 数据采集 弹性计算
日志服务的典型应用场景
日志服务的典型应用场景
88 3
|
11月前
|
存储 数据采集 监控
从存储统一到数据融合,SLS在可观测场景的思考和行动
介绍SLS在可观测数据融合分析的一系列技术升级,融合Trace、全栈监控、Continuous Profiling、移动端监控等功能,帮助大家更快速地构筑全栈、自动化的观测能力。
127808 52
|
5月前
|
设计模式 Java 数据库连接
设计模式与面向对象编程:举例说明在Java中应用工厂模式的场景,并编写一个简单的工厂模式实现。编写一个Java装饰器,用于添加日志记录功能到现有方法上。
设计模式与面向对象编程:举例说明在Java中应用工厂模式的场景,并编写一个简单的工厂模式实现。编写一个Java装饰器,用于添加日志记录功能到现有方法上。
35 0
下一篇
无影云桌面