我正在解决有关功能日志记录(非开发人员看到的日志)的问题。一项要求是为每个日志条目添加唯一的 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/