用于功能日志记录的常量UUID(设计)

时间:2016-08-01 07:52:05

标签: 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创建常量,这似乎有点过分。

我的问题:是否有任何设计或者#34;很好"这样做的方法?

修改

我已经有了使用的想法:

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

但是如果在某些时候我想要更改消息,则数据库将不再向后兼容。所以这个选项就出来了。

2 个答案:

答案 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