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

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
2月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
535 5
|
4月前
|
JSON 安全 网络安全
LoongCollector 安全日志接入实践:企业级防火墙场景的日志标准化采集
LoonCollector 是一款轻量级日志采集工具,支持多源安全日志的标准化接入,兼容 Syslog、JSON、CSV 等格式,适用于长亭 WAF、FortiGate、Palo Alto 等主流安全设备。通过灵活配置解析规则,LoonCollector 可将原始日志转换为结构化数据,写入阿里云 SLS 日志库,便于后续查询分析、威胁检测与合规审计,有效降低数据孤岛问题,提升企业安全运营效率。
|
7月前
|
监控 算法 测试技术
突破极限: 高负载场景下的单机300M多行正则日志采集不是梦
在当今数字化时代,日志数据已成为企业 IT 运营和业务分析的关键资源。然而,随着业务规模的扩大和系统复杂度的提升,日志数据的体量呈现爆发式增长,给日志采集和处理系统带来了巨大挑战。
546 99
|
10月前
|
存储 运维 监控
金融场景 PB 级大规模日志平台:中信银行信用卡中心从 Elasticsearch 到 Apache Doris 的先进实践
中信银行信用卡中心每日新增日志数据 140 亿条(80TB),全量归档日志量超 40PB,早期基于 Elasticsearch 构建的日志云平台,面临存储成本高、实时写入性能差、文本检索慢以及日志分析能力不足等问题。因此使用 Apache Doris 替换 Elasticsearch,实现资源投入降低 50%、查询速度提升 2~4 倍,同时显著提高了运维效率。
546 3
金融场景 PB 级大规模日志平台:中信银行信用卡中心从 Elasticsearch 到 Apache Doris 的先进实践
|
SQL 数据采集 JSON
使用对比!SLS 数据加工 SPL 与旧版 DSL 场景对照
本文讨论在不同的数据处理需求中,新版数据加工 SPL 与旧版数据加工 DSL 的使用对照。
7759 97
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
211 2
|
消息中间件 存储 Oracle
共识协议的技术变迁问题之能不能介绍下Share Log应用场景Pub/Sub
共识协议的技术变迁问题之能不能介绍下Share Log应用场景Pub/Sub
169 3
|
消息中间件 容灾
共识协议的技术变迁问题之Share Log在哪些场景中被广泛应用
共识协议的技术变迁问题之Share Log在哪些场景中被广泛应用
275 3
|
存储 Kubernetes Java
阿里泛日志设计与实践问题之在写多查少的降本场景下,通过SLS Scan方案降低成本,如何实现
阿里泛日志设计与实践问题之在写多查少的降本场景下,通过SLS Scan方案降低成本,如何实现
174 0
|
监控 存储
日志存储问题之志格式的乱象如何解决
日志存储问题之志格式的乱象如何解决
153 0

热门文章

最新文章