关于前端:Lombok的CustomLog公司多场景日志爽多了

45次阅读

共计 1870 个字符,预计需要花费 5 分钟才能阅读完成。

开发环境

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 做的事件,就是帮咱们创立了一个实例,简略易懂。

正文完
 0