2016-08-01 22 views
0

我正在處理有關功能性日誌記錄(由非開發人員看到的日誌)的問題。一個要求是每個日誌條目添加一個唯一的ID。這樣產品經理就可以查詢所述ID並獲得所有關聯的日誌條目。 A(僞)代碼示例如下所示:用於功能性日誌記錄的恆定UUID(設計)

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"); 
} 

我需要頻繁地做到這一點,我真的不喜歡有loglines硬編碼隨機的UUID。每個日誌語句的UUID都不相同。一種選擇是保持原樣,這是有效的,另一種是爲每個UUID創建常量,這看起來過度。

我的問題:有沒有什麼樣的設計或「好」的方法來做到這一點?

編輯

我已經使用過的想法:

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

但如果在某些時候我想改變的消息,該數據庫將不再是向後兼容。所以這個選項已經結束了。

回答

1

如果您有唯一的container.getId()並且您知道此ID,則可以創建UUID並連接container.getId()this.SERVICE_NAME,並補充生成的UUID中的字符。你所有的門戶都有唯一的ID,以container.getId()this.SERVICE_NAME開頭。

在日誌中,您可能會發現以container.getId()this.SERVICE_NAME開頭的特定日誌條目。

或者

創建public static final常量類,用名有意義,(LogEntryConstants.java),並使用在日誌條目這個常數。另外,如果可以接受的話,可以在這些常量的值中添加一些可讀的文本,其中包括this.SERVICE_NAME,使用這些文本可以簡化關鍵字(this.SERVICE_NAME)在日誌中的搜索。這太誇張了,但是你組織你的代碼,並在業務邏輯中正確地清除硬編碼,並將其移到公用類LogEntryConstants

+0

這也是我最初的想法,但containerId更改並且特定日誌條目的UUID應該保持不變,因此我無法使用它。 –