Audit Logging

Audit Logging kann verwendet werden, um automatisch Audit-Logs für API-Anfragen zu erstellen und zu speichern. Die Konfiguration ist auf drei Ebenen aufgeteilt:

  • Globale Ebene, die hier beschrieben wird. Die globale Konfiguration gilt für alle APIs.
  • API-Ebene, die unter API-Konfiguration ausführlicher beschrieben wird. Die Konfiguration auf API-Ebene dient dazu, die Konfiguration für eine bestimmte API zu verfeinern.
  • Provider-Ebene, die aus der Schema-Option audit besteht, die unter Schema-Definitionen ausführlicher beschrieben wird. Sie wird verwendet, um anzugeben, welche properties geloggt werden sollen.

Nachfolgend ist eine detaillierte Beschreibung der globalen Konfigurationsoptionen, Hinweise zur Speicherung und ein Beispiel, das die relevanten Teile aller Konfigurationsebenen enthält.

Optionen

NameDefaultBeschreibungTypSeit
enabled
false
Wenn true, wird das Audit-Logging für alle APIs eingeschaltet. Einzelne APIs können in der API-Konfiguration explizit deaktiviert werden. Audit-Logging ist global deaktiviert, wenn false.
boolean
4.8
retries
3
Gibt an, wie oft der Schreibprozess bei Fehlern wiederholt werden soll. Sollte auf 0 gesetzt werden, falls keine Wiederholungen erwünscht sind. Wenn das Schreiben nach der angegebenen Anzahl von Wiederholungen fehlschlägt, wird der Log-Eintrag ins Anwendungsprotokoll geschrieben.
number
4.8
pathPrefix
{api}/{date}
Gibt den Pfad an, der der Log-Datei vorangestellt werden soll. Dabei werden {api} und {date} jeweils mit der API-ID bzw. dem ISO-Datum der Anfrage ersetzt. Beispielsweise könnten die Log-Dateien für {api}/foo/{date}/bar unter logs/audit/vineyards/foo/2026-06-03/bar gespeichert werden.
string
4.8
type
JSON
Gibt an, in welchem Format die Logs gespeichert werden. Unterstützt werden momentan JSON und JSON_PRETTY (formatiertes JSON).
string
4.8
headers
included: [ '*' ], excluded: []
Die included-Liste gibt an, welche Header geloggt werden sollen. Die excluded-Liste gibt an, welche Header aus included nicht geloggt werden sollen. Der spezielle Wert * kann für beide Listen verwendet werden und umfasst alle Header. Wenn excluded: [ '*' ], werden keine Header geloggt.
object
4.8
claims
included: [], excluded: []
Gibt an, welche Claims aus dem Token geloggt werden sollen und welche explizit nicht geloggt werden sollen. Verwendet die gleiche included/excluded-Logik wie headers.
object
4.8
httpStatus
included: [ '200' ], excluded: []
Gibt an, für welche HTTP-Statuscodes Anfragen geloggt werden sollen und welche explizit nicht geloggt werden sollen. Verwendet die gleiche included/excluded-Logik wie headers.
object
4.8

Speicherung

Die Log-Einträge werden im Ressourcen-Store im Verzeichnis logs/audit abgelegt. Der Dateiname entspricht der Request-ID aus dem Anwendungsprotokoll.

Beispiele

Im Folgenden werden Beispiele für die globale, API- und Provider-Konfiguration gezeigt sowie ein Audit-Log-Beispiel, das sich aus diesen Konfigurationen ergeben kann. Hier wurde die Vineyardsopen in new window-API aus den Demosopen in new window verwendet.

Globale Konfiguration:


auditLog:
 enabled: true
 retries: 3
 type: JSON_PRETTY
 pathPrefix: "mysubdirectory/{api}/{date}"
 headers:
   included: [ "User-Agent", "Host" ]
   excluded: [ ]
 claims:
   included: [ "realm_access", "resource_access" ]
   excluded: [ ]
 httpStatus:
   included: [ "200" ]
   excluded: [ ]

API-Konfiguration:


auditLog:
 enabled: true
 operations:
   - "data:read::vineyards"
   - "write"

Provider-Konfiguration:


types:
 vineyards:
   sourcePath: /Weinlagen
   type: OBJECT
   properties:
     registerId:
       sourcePath: wlg_nr
       type: INTEGER
       role: ID
       label: Vineyard register number
       audit: true
     name:
       sourcePath: wlg_name
       type: STRING
       label: Vineyard name
       audit: true

Als Ergebnis der obigen Konfigurationen entsteht beispielsweise das folgende Audit-Log, das als logs/audit/mysubdirectory/vineyards/2026-06-15/48f4923c-b52c-4dfb-b45e-3e892995a473.json gespeichert werden würde:


{
 "id" : "48f4923c-b52c-4dfb-b45e-3e892995a473",
 "started" : "2026-06-15T08:27:05.372819295Z",
 "finished" : "2026-06-15T08:27:05.416584477Z",
 "api" : "vineyards",
 "actor" : {
   "type" : "USER",
   "id" : "johndoe",
   "claims" : {
     "realm_access" : {
       "roles" : [
         "offline_access",
         "authorization"
       ]
     },
     "resource_access" : {
       "roles" : [
         "read",
         "manage-account",
         "manage-account-links",
         "view-profile"
       ]
     }
   }
 },
 "operation" : {
   "method" : "GET",
   "path" : "/collections/vineyards/items",
   "headers" : {
     "User-Agent" : "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0",
     "Host" : "localhost:7080"
   },
   "parameter" : {
     "f" : "json"
   },
   "status" : "200"
 },
 "target" : {
   "features" : [
     {
       "id" : "460258",
       "name" : "Kupp"
     },
     {
       "id" : "511109",
       "name" : "Höll"
     }
   ]
 }
}