Рассмотрим следующую программу:
#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
чтобы вывод консоли содержал также временные метки? Если так, то как?
Это невозможно при использовании syslog
Звоните самостоятельно. Причина в том, что отметка времени, которую вы видите в файле журнала, происходит после того, как сообщение журнала было отправлено демону. Это демон системного журнала, который фактически выполняет добавление метки времени. Демон регистрации — это то, что применяет метку времени.
Когда вы используете LOG_CONS
а также LOG_PERROR
параметры сообщение отправляется на консоль или stderr без отметки времени, потому что отметка времени не происходит в момент регистрации.
По сути использование LOG_CONS
а также LOG_PERROR
полностью обойти демона; вам нужно изменить саму реализацию вызова системного журнала, чтобы добавить собственную метку времени. К счастью, это довольно просто, поскольку реализация вызова библиотеки syslog находится в исходном коде glibc, и источник не очень сложный.
Других решений пока нет …