Как мне убедить вывод системного журнала на консоли включить метки времени?

Рассмотрим следующую программу:

#include <syslog.h>

int main()
{
openlog("test-app", LOG_CONS | LOG_NDELAY | LOG_PERROR | LOG_PID, LOG_USER);
setlogmask(LOG_UPTO(LOG_DEBUG));

syslog(LOG_DEBUG, "Testing!");
}

Обратите внимание на использование LOG_PERROR, который испускает сообщения STDERR а также любой файл syslogd настроен для заполнения (в моем случае, /var/log/messages).

Консольный вывод:

test-app[28072]: Testing!

Файл системного журнала содержит:

Apr 17 13:20:14 cat test-app[28072]: Testing!

Можно настроить syslog чтобы вывод консоли содержал также временные метки? Если так, то как?

-1

Решение

Это невозможно при использовании syslog Звоните самостоятельно. Причина в том, что отметка времени, которую вы видите в файле журнала, происходит после того, как сообщение журнала было отправлено демону. Это демон системного журнала, который фактически выполняет добавление метки времени. Демон регистрации — это то, что применяет метку времени.

Когда вы используете LOG_CONS а также LOG_PERROR параметры сообщение отправляется на консоль или stderr без отметки времени, потому что отметка времени не происходит в момент регистрации.

По сути использование LOG_CONS а также LOG_PERROR полностью обойти демона; вам нужно изменить саму реализацию вызова системного журнала, чтобы добавить собственную метку времени. К счастью, это довольно просто, поскольку реализация вызова библиотеки syslog находится в исходном коде glibc, и источник не очень сложный.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]