Страницы

Поиск по вопросам

воскресенье, 9 февраля 2020 г.

Можно ли писать прямиком в syslog?

#linux #c #логирование


Можно ли делать запись прямиком в /dev/log как в /dev/stdout? Например так:

echo test > /dev/log


У меня вылетает ошибка:


  bash: log: Нет такого устройства или адреса.


Если это вообще возможно, то что я делаю не так?
    


Ответы

Ответ 1



Мне надо писать в syslog внутри библиотеки используется write() Это кто Вас надоумил так делать?! :-) Два момента. Первый: $ ls -l /var/log/sys* -rw-r----- 1 syslog adm 20148 окт 8 09:05 /var/log/syslog -rw-r----- 1 syslog adm 380325 окт 8 08:22 /var/log/syslog.1 -rw-r----- 1 syslog adm 46102 окт 7 08:25 /var/log/syslog.2.gz -rw-r----- 1 syslog adm 51345 окт 4 08:26 /var/log/syslog.3.gz -rw-r----- 1 syslog adm 212595 окт 3 08:47 /var/log/syslog.4.gz -rw-r----- 1 syslog adm 71915 окт 1 08:28 /var/log/syslog.5.gz -rw-r----- 1 syslog adm 54724 сен 30 08:23 /var/log/syslog.6.gz -rw-r----- 1 syslog adm 82350 сен 27 08:29 /var/log/syslog.7.gz Понимаете, что это означает? То, что писать в этот файл может только демон syslog, а читать - только он и члены группы adm. Так что, записать с помощью write() у Вас не получится никак. Без прав root. Второе. Для того, что бы пользоваться услугами демона syslog существует набор стандартных системных функций: void openlog(const char *ident, int option, int facility); void syslog(int priority, const char *format, ...); void closelog(void); А тех программистов, которые пишут свои собственные "лог-файлы" с использованием write() я считаю не очень уными людьми. Ведь достаточно просто выполнить команду man 3 syslog и можно посмотреть готовое решение проблемы. Особенно не люблю программёров, которые сообщения об ошибках и отладочные сообщения выдают с помощью printf(). Когда в службу поддержки обращается клиент и говорит, что у него ВЧЕРА было что-то непонятное с программой, то эти сообщения в ЕГО stderr исчезнувшие ещё вчера - представляют просто таки "бесценную" помощь для программиста сопровождения. На самый крайний случай, если заменить write() на syslog() нет никакой возможности, рекомендую попробовать такой метод: Пишем программу, которая: С помощью inotify (man 7 inotify) устанавливает слежение за файлом, в который исходная программа пишет сообщения. Получив уведомление о записи в этот файл, программа считывает добавленный кусок текста. Это можно сделать, зная исходную и новую длину файла. Записывает полученный текст в системный лог, используя syslog().

Ответ 2



Linux команда logger даёт удобный способ писать в системный лог /var/log/syslog из командной строки, из скриптов или других файлов $ logger comment to be added to log $ tail -1 /vvar/log/syslog May 21 18:02:16 butterfly shs: comment to be added to log $ logger `who` $ tail -1 /var/log/syslog May 21 18:02:43 butterfly shs: shs pts/0 2018-05-21 15:57 (192.168.0.15) $cat msg Backups to off-site facility will run this coming weekend. System availability will not be affected. $ logger -f msg $ tail -2 /var/log/syslog May 21 18:06:01 butterfly shs: Backups to off-site facility will run this coming weekend. May 21 18:06:01 butterfly shs: System availability will not be affected

Комментариев нет:

Отправить комментарий