我正在处理有关功能日志记录的问题(非开发人员看到的日志)。一个要求是为每个日志条目添加唯一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创建常量,这似乎有点过分。
我的问题:是否有任何设计或者#34;很好"这样做的方法?
修改
我已经有了使用的想法:
UUID.nameUUIDFromBytes(message.getBytes()).toString();
但是如果在某些时候我想要更改消息,则数据库将不再向后兼容。所以这个选项就出来了。
答案 0 :(得分:1)
如果您有唯一的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
。
答案 1 :(得分:0)
以下代码可帮助您...
//创建UUID
UUID uid = UUID.fromString(“ 38400000-8cf0-11bd-b23e-10b96e4ef00d”);
https://www.tutorialspoint.com/java/util/uuid_fromstring.htm