java - 用于功能日志记录的恒定 UUID(设计)

标签 java logging uuid

我正在解决有关功能日志记录(非开发人员看到的日志)的问题。一项要求是为每个日志条目添加唯一的 ID。这样产品经理就可以查询该 ID 并获取所有关联的日志条目。 (伪)代码示例如下所示:

if (something starts or happens here){
    //arguments: container id, service name, message, message uuid
    functionalLogService.addLog(container.getId(), this.SERVICE_NAME, "this happened", "124e3314-ffad-4b5d-be76-fc6b0f82aeea");
}

我必须经常这样做,而且我不太喜欢在日志行中硬编码随机 UUID。每个日志语句的 UUID 都不同。一种选择是保持原样,这可行,另一种选择是为每个 UUID 创建常量,这似乎有点过分了。

我的问题:有什么设计或“好的”方法可以做到这一点吗?

编辑

我已经有了使用的想法:

UUID.nameUUIDFromBytes(message.getBytes()).toString();

但是,如果在某个时候我想更改消息,数据库将不再向后兼容。所以这个选项已经被淘汰了。

最佳答案

如果您有唯一的 container.getId() 并且知道此 ID,则可以通过连接 container.getId()this.SERVICE_NAME 创建 UUID 并补充生成的 UUID 中的字符。您输入的所有内容都将具有以 container.getId()this.SERVICE_NAME 开头的唯一 ID。

在日志中,您可能会找到以 container.getId()this.SERVICE_NAME 开头的特定日志条目。

或者

使用 public static final 常量创建类,并使用有意义的名称 (LogEntryConstants.java),并在日志条目中使用此常量。另外,如果可以接受,请在这些常量的值中添加一些可读文本,其中可能包括 this.SERVICE_NAME,使用此文本您可以通过关键字 (this.SERVICE_NAME) 简化搜索在日志中。这有点过分了,但是您可以组织代码并在业务逻辑中摆脱硬编码,将其移动到实用程序类 LogEntryConstants

关于java - 用于功能日志记录的恒定 UUID(设计),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38693573/

相关文章:

java - Cypher 不重复相同的结果

java - 我应该如何信任 Apache Maven?

设计excel文件的java android错误

java - 如何在 log4j 中记录第二个参数

logging - 是否有一种工具可以轻松地以聚合方式从 AWS Elastic Beanstalk 搜索 S3 中每小时轮换的日志?

Android通过蓝牙接收接收文本

ruby-on-rails - Ruby on Rails-使用现有模式将UUID实现为主键

android - 如何以编程方式创建 A2DP 连接或如何将 Android 手机模拟为 A2DP 接收器?

java - 如何在 Python 中生成 long 类型的 UUID(由 java 程序使用)?

java - 读取> 50mb文件时如何减少java堆使用?