Я пытаюсь отправить некоторые данные в Rsyslog / syslog из моей программы на C / C ++, в которой есть дополнительные поля, отличные от «msg», «hostname» и т. Д.
Например, у меня есть полекоторая хранит «используемую память» и хотела бы, чтобы она сохранялась в своем собственном поле / свойстве в сообщении системного журнала.
Я экспериментировал с конфигурацией Rsyslog и смог вывести оба официальных свойства,и пользовательское свойство через шаблон, например, так:
template(name="test-template" type="list") {
constant(value="the test variable is: ")
property(name="$!testvar")
constant(value="\n")
constant(value="the message is: ")
property(name="msg")
constant(value="\n")
}
Затем я выводю все журналы через шаблон следующим образом:
*.* /var/log/test;test-template
Теперь, если я установлю это свойство теста в rsyslog.conf вот так:
set $!testvar = 'Testing variable';
Это работает, но в моей программе на c как мне заполнить это поле "testvar"?Файл syslog.h довольно прост и, похоже, позволяет заполнять только поле «msg».Моя программа выглядит следующим образом:
#include <syslog.h>
int main(int argc, char** argv) {
setlogmask (LOG_UPTO (LOG_NOTICE));
openlog("exampleprog", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
syslog(LOG_NOTICE, "testvar=%s msg=%s", "testvarfromc", "message from c");
closelog();
std::cout << "hello world\n";
return 0;
}
Но когда я запускаю ее и проверяю / var / log / test, только поле "msg" заполняется "testvar = testvarfromc msg = message from c", и"поле / свойство testvar пусто".
Я помню, как в прошлом я подключал некоторые маршрутизаторы к серверу системного журнала, и у них были настраиваемые поля / параметры, такие как "отправленные пакеты" и т. д. Поэтому мне интересно,может быть, другие программы / устройства просто помещают свои пользовательские поля в поле сообщения в виде отформатированной строки?Или, если вообще возможно, использовать пользовательские поля / свойства?И если да, то как я могу это сделать?
Я в основном ссылаюсь на официальную документацию Rsyslog: https://www.rsyslog.com/doc/master/configuration/properties.html Где говорится «Свойства сообщения» Они извлекаются анализаторами rsyslog из исходного сообщения.Все свойства сообщения начинаются с буквы. ".