2017-01-23 14 views
1

Я пытаюсь динамически установить назначение сообщений syslog, и я не могу понять, как это сделать. Я хотел бы, чтобы сообщения регистрировались в определенных папках на основе содержимого сообщения.назначение syslog на основе содержимого сообщения

Например, моя вымышленная программа будет регистрировать сообщения об объектах в системе на основе их идентификатора. Таким образом, каждая операция CRUD на объекте регистрируется с его идентификатором. Я хотел бы иметь отдельный файл журнала для каждого объекта на основе его идентификатора.

Если был способ проанализировать идентификатор через регулярное выражение, сохраните идентификатор, а затем используйте его в пункте назначения, я смогу удовлетворить свои требования.

Что-то вроде этого (что, очевидно, псевдокод и не работает), где каждое сообщение журнала имеет идентификатор объекта в виде имени файла журнала, который находится в каждом сообщении журнала, хранящемся в скобках, и составляет 4 цифры:

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

В этом случае будет 2 лог-файлы ...

1234.log

6789.log

... каждый с 2 ​​сообщений в нем.

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

Любая помощь очень ценится.

ответ

0

Syslog per se не позволяет то, что вы имеете в виду. syslog facilities позволяют вести журнал для разделения файлов, используя объекты localx. Но они ограничены 8.

Чтобы добиться того, что вы хотите использовать системный журнал, то есть ведение журнала в различные файлы базы на содержание сообщения журнала, вам придется написать собственный syslog output plugin

+1

Благодаря @qux. Я закончил «пометку» $ {PROGRAM} при записи в syslog. Затем я использовал фильтр для маршрутизации сообщения в правый файл журнала. Оно работает. –