Informazioni raggruppate in Proprietà
Le informazioni associabili ai topic devono essere definite attraverso la sintassi descritta nella sezione Informazioni Tracciabili.
Di seguito un esempio di definizione di 2 topic:
format.topic.erogazioni.inputRequest="req"|"${log:transactionId}"|"govway"|"${log:inRequestDateZ(yyyy-MM-dd HH:mm:ss:SSS,UTC)}"|"${log:inRequestDate(Z)}"|"${log:forwardedIP}"|"HTTP/1.1"|"${log:httpMethod}" format.topic.erogazioni.inputResponse="res"|"${log:transactionId}"|"govway"|"${log:inRequestDateZ(yyyy-MM-dd HH:mm:ss:SSS,UTC)}"|"${log:inRequestDate(Z)}"|"${log:forwardedIP}"|"HTTP/1.1"|"${log:httpMethod}"|"${log:outHttpStatus}"
Nell’esempio appena riportato si può notare come i 2 topic utilizzano una parte comune ripetuta. È possibile migliorare la scrittura del file di definizione dei topic esplicitando una volta sola l’insieme di informazioni comuni tramite una proprietà che potrà essere riferita nella definizione di ogni topic.
Per definire una proprietà deve essere utilizzata la sintassi:
“format.property.<posizione>.<nomeProprietà>=<valoreProprietà>”
Le proprietà verranno risolte in ordine lessicografico rispetto alla posizione indicata, in modo da garantire la corretta risoluzione se si hanno proprietà che sono definite tramite altre proprietà.
Di seguito il precedente esempio ridefinito tramite proprietà.
# properties format.property.001.commons.govway-id=govway format.property.002.commons.id="${log:transactionId}"|"${log:property(commons.govway-id)}" format.property.003.commons.data="${log:inRequestDateZ(yyyy-MM-dd HH:mm:ss:SSS,UTC)}"|"${log:inRequestDate(Z)}" format.property.004.commons.remoteIP-protocol-method="${log:forwardedIP}"|"HTTP/1.1"|"${log:httpMethod}" format.property.005.commons=${log:property(commons.id)}|${log:property(commons.data)}|${log:property(commons.remoteIP-protocol-method)} # topic format.topic.erogazioni.inputRequest="req"|${log:property(commons)} format.topic.erogazioni.inputResponse="res"|${log:property(commons)}|"${log:outHttpStatus}"
È inoltre possibile definire l’escape di caratteri che possono essere presenti nelle informazioni da tracciare tramite la proprietà “format.escape.<char>=<charEscaped>”.
Di seguito un esempio di configurazione che effettua l’escape del carattere “\»” sostituendolo con “\\»”:
format.escape."=\\"
Infine è possibile cifrare le informazioni registrate su file di log utilizzando una proprietà definita tramite la seguente sintassi:
“format.encryptedProperty.<posizione>.<nomeProprietà>=<valoreProprietàDaCifrare>”
La modalità con cui verranno cifrati i valori della proprietà deve essere indicata tramite un’altra riga definita tramite la seguente sintassi:
“format.encrypt.<posizione>.<nomeProprietà>=<encryptionMode>”
La modalità “<encryptionMode>” indicata deve corrispondere ad una di quelle definite all’interno del file di configurazione stesso dei topic come descritto nella sezione Cifratura delle Proprietà.
Rimane valida la considerazione che le proprietà (semplici o cifrate che siano) verranno risolte in ordine lessicografico rispetto alla posizione indicata, in modo da garantire la corretta risoluzione se si hanno proprietà che sono definite tramite altre proprietà.
Di seguito viene riportato l’esempio precedente modificato per cifrare la parte relativa agli indirizzi IP:
# encryption modes encrypt.encTEST.mode=java encrypt.encTEST.keystore.type=symm encrypt.encTEST.key.path=/tmp/symmetric.secretkey encrypt.encTEST.key.algorithm=AES encrypt.encTEST.algorithm=AES/CBC/PKCS5Padding encrypt.encTEST.encoding=base64 # properties format.property.001.commons.govway-id=govway format.property.002.commons.id="${log:transactionId}"|"${log:property(commons.govway-id)}" format.property.003.commons.data="${log:inRequestDateZ(yyyy-MM-dd HH:mm:ss:SSS,UTC)}"|"${log:inRequestDate(Z)}" format.encryptedProperty.004.commons.remoteIP-protocol-method="${log:forwardedIP}"|"HTTP/1.1"|"${log:httpMethod}" format.encrypt.004.commons.remoteIP-protocol-method=encTEST format.property.005.commons=${log:property(commons.id)}|${log:property(commons.data)}|${log:property(commons.remoteIP-protocol-method)} # topic format.topic.erogazioni.inputRequest="req"|${log:property(commons)} format.topic.erogazioni.inputResponse="res"|${log:property(commons)}|"${log:outHttpStatus}"
Di seguito viene fornito un esempio di informazioni prodotte per il topic “inputRequest” senza cifrare i valori della proprietà “commons.remoteIP-protocol-method”:
"req"|"b6cdd758-342c-4599-ae95-33a781730b3f"|"govway"|"2020-06-26 12:46:50:629"|"+0200"|"192.168.1.2"|"HTTP/1.1"|"POST" "req"|"2a9dc253-9dd5-458b-8689-edee7c9ba139"|"govway"|"2020-06-26 12:47:50:561"|"+0200"|"192.168.1.2"|"HTTP/1.1"|"POST"
Introducendo la cifratura si avrà un log simile al seguente:
"req"|"b6cdd758-342c-4599-ae95-33a781730b3f"|"govway"|"2020-06-26 12:46:50:629"|"+0200"|Olq0UhaXq7OF2wAfwh+XuA==.DTAZdcP3keHRN97tWRoPVmlcMG91aScUFU2/r2TOwg0= "req"|"2a9dc253-9dd5-458b-8689-edee7c9ba139"|"govway"|"2020-06-26 12:47:50:561"|"+0200"|Olq0UhaXq7OF2wAfwh+XuA==.DTAZdcP3keHRN97tWRoPVmlcMG91aScUFU2/r2TOwg0=