команда системного журнала в коде C - PullRequest
8 голосов
/ 13 декабря 2011
#include<syslog.h>
syslog(LOG_INFO, "Start logging");

Приведенная выше команда syslog не входит в системный журнал. Итак, я попытался,

openlog("Logs", "", LOG_USER);
syslog(LOG_INFO, "Start logging");
closelog();

Это ничего не регистрирует, и я получаю следующую ошибку:

syslog: unknown facility/priority: 8049584

Ответы [ 3 ]

16 голосов
/ 13 декабря 2011

Эта строка неверна:

openlog("vyatta-conntrack", "", LOG_USER);

"" должен был целым числом:

void openlog(const char *ident, int option, int facility);

Целое число должно быть любой из этих констант ORedвместе:

   LOG_CONS       Write directly to system console if there is
                  an error while sending to system logger.

   LOG_NDELAY     Open the connection immediately (normally, the
                  connection is opened when the first message is
                  logged).

   LOG_NOWAIT     Don't wait for child processes that may have
                  been created while logging the message.  (The
                  GNU C library does not create a child process,
                  so this option has no effect on Linux.)

   LOG_ODELAY     The converse of LOG_NDELAY; opening of the
                  connection is delayed until syslog() is
                  called.  (This is the default, and need not be
                  specified.)

   LOG_PERROR     (Not in POSIX.1-2001.)  Print to stderr as
                  well.

   LOG_PID        Include PID with each message.

Попробуйте еще раз что-то вроде:

openlog("vyatta-conntrack", LOG_PID, LOG_USER);

Обратите внимание, что ваша конфигурация syslogd может быть не настроена для хранения сообщений уровня журнала LOG_INFO.Попробуйте LOG_ALERT или что-то еще для устранения этой проблемы - если это работает, вернитесь к LOG_INFO и настройте syslogd для хранения сообщений журнала, которые вы хотите сохранить.Добавление строки вроде:

*.* /var/log/all_messages.log

сделает работу за rsyslogd(8).Обязательно прочитайте справочную страницу rsyslog.conf(5), если ваша система использует rsyslogd(8).Если ваша система использует другой демон системного журнала, проверьте подробности в руководствах системы.

7 голосов
/ 13 декабря 2011

Вы действительно должны скомпилировать все включенные предупреждения и отладку, то есть gcc -Wall -g.

Прочтите еще раз openlog man page .Он объявлен как:

 void openlog(const char *ident, int option, int facility);

, поэтому передача "" в качестве второго аргумента неверна (и компилятор предупреждал вас об этом).Это должно быть, например, LOG_PERROR|LOG_PID или некоторые другие флаги.

1 голос
/ 20 мая 2019
openlog("vyatta-conntrack", "", LOG_USER);

Эта строка неверна в качестве передаваемой строки в качестве второго параметра.проверьте справочную страницу, второй параметр имеет тип int.

попробуйте это:

    #include <syslog.h>
      int main() {
      openlog("Logs", LOG_PID, LOG_USER);
      syslog(LOG_INFO, "Start logging");
      closelog();
    }

вывод:

May 20 16:36:19 prabha-VirtualBox Logs[8114]: Start logging
...