Как записать пользовательские поля / свойства из программы на C / C ++ в Rsyslog - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь отправить некоторые данные в 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 из исходного сообщения.Все свойства сообщения начинаются с буквы. ".

...