2017-12-04 1 views
2

Ich muss Log4j 2.x Protokollierung mit Verschlüsselungsschlüssel (AES) konfigurieren. Ich habe diesen Teil in den log4j2.xml:Ich habe das Präfix 'sd:' vor einigen der Eigenschaften in log4j2.xml bemerkt - wofür stehen sie?

<Encryption keyId="${sd:encryptionKeyId}" key="${sd:encryptionKey}"> 
    .... 
</Encryption> 

Für Testzwecke ich ein Online-Generierungs-Tool verwendet, um einen AES-Schlüssel zu generieren und ich habe es direkt dort statt ${sd:encryptionKey}. Es hat funktioniert, dh. Ich habe keine Ausnahmen bekommen.

Dann wollte ich den Schlüssel bis zu den Eigenschaften bewegen, etwa so:

<Property name="sd:encryptionKey">---my key here---</Property> 

Es hat nicht funktioniert. Ich habe das Präfix sd: entfernt und es hat wieder funktioniert.

Meine Frage ist: Was bedeutet dieses Präfix und setzt den Schlüssel direkt in dieser Datei als eine Eigenschaft der richtige Weg, um es zu tun?

Antwort

1

Das Präfix ${sd:... ist für Log4j2 eingebaut Structured Data lookup.

Aus dem Handbuch:

Die StructuredDataLookup ist sehr ähnlich dem MapLookup, dass sie Werte von StructuredDataMessages abruft.

Log4j2 bietet weitere Lookups, so dass Sie Elemente aus Systemeigenschaften, Umgebungsvariablen erhalten könnten, die Log4j2 Thread-Kontext-Karte usw.

Es ist auch einfach ein custom lookup zu erstellen, die Daten aus der Anwendung erhält.

Wichtig: Ein Lookup benötigt die Dollar- und geschweiften Klammern, um zu funktionieren.

Für den Zweck, was Sie erreichen möchten, würde ich eine einfache Eigenschaft definieren, wie Sie in Ihrer Frage tun, aber möglicherweise den Schlüssel in eine Umgebungsvariable, um andere Personen zu verhindern, den Schlüssel durch Lesen des Protokolls zu entdecken Aufbau.

Definition von Umgebungsvariablen ist Betriebssystem-spezifisch, aber in Linux könnten Sie es in Ihrem ~/profile tun, in Windows würden Sie zu Systemsteuerung> System> Erweitert> Umgebungsvariablen gehen.

Verwenden Sie dann environment variable lookup, damit Log4j2 den Wert abrufen kann.

<Property name="encryptionKey">${env:MY_AES_KEY}</Property> 
+0

Danke. Aber wie funktioniert mein Beispiel nicht mit dem Präfix? Ich vermute dann, dass ich den Wert woanders halten sollte? Können Sie bitte einen Standort vorschlagen, der mit dem Präfix arbeiten soll? – developer10

+0

Haben Sie tatsächlich ein StructuredDataMessage-Objekt protokolliert? –

+0

Die '$ {sd: key}' - Suche kann nur einen Wert für Log-Ereignisse mit einer 'StructuredDataMessage' rendern. Dies ist nicht die Standardnachricht. Wenn Sie logger.log ("Hello {}", "world") verwenden, erhalten Sie eine 'ParametrizedMessage'. Die SD-Suche wird damit nicht funktionieren. Sie müssen explizit ein 'StructuredDataMessage'-Objekt erstellen und dieses protokollieren. –

Verwandte Themen