2017-01-23 4 views
1

Ich versuche, das Ziel der Syslog-Nachrichten dynamisch festzulegen, und ich kann nicht herausfinden, wie es geht. Ich möchte, dass die Nachrichten basierend auf dem Inhalt der Nachricht in bestimmten Ordnern protokolliert werden.Syslog-Ziel basierend auf Nachrichteninhalt

Zum Beispiel protokolliert mein fiktives Programm Nachrichten über Objekte im System basierend auf ihrer ID. Daher wird jede CRUD-Operation für ein Objekt mit seiner ID protokolliert. Ich würde gerne eine separate Protokolldatei für jedes Objekt basierend auf seiner ID haben.

Wenn es eine Möglichkeit gäbe, um die ID über einen regulären Ausdruck parsen, speichern Sie die ID und dann im Ziel verwenden, würde ich in der Lage sein, meine Anforderung gerecht zu werden.

So etwas (das offensichtlich Pseudocode ist und nicht funktioniert), wobei jede Protokollnachricht die Objekt-ID als Protokolldateiname hat, die in jeder Protokollnachricht in Klammern gespeichert ist und 4 Ziffern hat:

# somehow parse out value that matches the regex \[\s\d][\s\d][\s\d][\s\d]\] and store it in $id 
destination df_dest { file("/v/logs/${YEAR}${MONTH}${DAY}/$id.log"); }; 
filter f_program { program("program"); }; 
log { source(s_all); filter (f_program); destination (df_dest); flags(final); }; 

in diesem Fall gäbe es zwei Protokolldateien sein ...

1234.log

6789.log

... mit je 2 Nachrichten in ihm.

[1234] Updated. 
[1234] Deleted. 
[6789] Created. 
[6789] Fetched. 

Jede Hilfe wird sehr geschätzt.

Antwort

0

Syslog per se nicht erlaubt, was Sie im Sinn haben. syslog facilities ermöglichen Protokollierung, um Dateien unter Verwendung der localx Einrichtungen zu trennen. Aber sie beschränken sich auf 8.

Um das zu erreichen, was Sie wollen syslog verwenden, das heißt auf verschiedene Dateien Basis auf dem Inhalt der Log-Nachricht protokolliert wird, müssen Sie eine benutzerdefinierte schreiben syslog output plugin

+1

Dank @qux. Ich habe das $ {PROGRAM} beim Schreiben in syslog 'markiert'. Dann habe ich einen Filter verwendet, um die Nachricht an die richtige Protokolldatei weiterzuleiten. Es klappt. –