2016-08-01 3 views
0

Ich arbeite an einem Problem in Bezug auf funktionale Protokollierung (Protokoll von Nicht-Entwicklern gesehen). Eine Voraussetzung ist das Hinzufügen einer eindeutigen ID pro Protokolleintrag. Auf diese Weise können die Produktmanager diese ID abfragen und alle zugehörigen Protokolleinträge abrufen. A (Pseudo-) Code-Beispiel ist unten dargestellt:Konstante UUIDs für funktionale Protokollierung (Design)

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

Ich habe dies sehr oft zu tun, und ich weiß nicht wirklich wie zufällige UUIDs in loglines fest einprogrammiert hat. Die UUID ist für jede Protokollanweisung unterschiedlich. Eine Option besteht darin, sie so zu belassen, wie sie ist, was funktioniert, eine andere besteht darin, für jede UUID Konstanten zu erstellen, was übertrieben erscheint.

Meine Frage: Gibt es irgendeine Art von Design oder "nette" Möglichkeit, dies zu tun?

EDIT

Ich habe bereits die Idee der Verwendung:

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

Aber wenn ich irgendwann die Meldung geändert werden soll, wird die Datenbank nicht mehr abwärtskompatibel sein. Also diese Option ist out.

Antwort

1

Wenn Sie einzigartige container.getId() haben und Sie wissen, diese ID können Sie UUID mit verketten container.getId() und this.SERVICE_NAME und ergänzen mit Figuren aus erzeugt UUID erstellen. Alle Enteries haben eine eindeutige ID, die mit container.getId() und this.SERVICE_NAME beginnt.

In Protokollen finden Sie möglicherweise bestimmte Protokolleintrag, die mit container.getId() und this.SERVICE_NAME beginnen.

Oder

erstellen Klasse mit public static final Konstanten, mit Namen, die Sinn machen, (LogEntryConstants.java) und diese Konstanten in Log-Eintrag verwenden. Auch, wenn dies akzeptabel, zu Wert dieser Konstanten einige lesbaren Text hinzufügen, die vielleicht this.SERVICE_NAME10 enthalten, mit diesem Text können Sie die Suche nach Schlüsselwort (this.SERVICE_NAME) in Protokollen zu vereinfachen. Es ist Overkill, aber Sie organisieren Ihren Code und entfernen Sie Hardcode direkt in der Geschäftslogik, verschieben Sie es in Dienstprogramme Klasse LogEntryConstants.

+0

Das war meine ursprüngliche Idee, aber containerId ändert sich und die UUID für einen bestimmten Protokolleintrag sollte konstant bleiben, daher kann ich das nicht verwenden. –

Verwandte Themen