Стандартним способом входу з програми С є syslog.
Почніть з включення заголовкового файлу:
#include <syslog.h>
Потім на початку вашої програми слід налаштувати syslog, зателефонувавши openlog:
openlog("programname", 0, LOG_USER);
Перший аргумент - ідентифікація або тег, який автоматично додається на початку кожного повідомлення. Поставте тут назву вашої програми.
Другий аргумент - це варіанти, які ви хочете використовувати, або 0для нормальної поведінки. Повний список опцій знаходиться в man 3 syslog. Можливо, вам здасться корисним LOG_PID, що робить syslog також записом ідентифікатора процесу у повідомленні журналу.
Потім, кожного разу, коли ви хочете написати журнальне повідомлення, ви телефонуєте syslog:
syslog(LOG_INFO, "%s", "Message");
Перший аргумент - пріоритет. Першочергове варіюється від DEBUG( НЕ менш важливо) до EMERG(тільки для надзвичайних ситуацій) з DEBUG, INFOі ERRбудучи найбільш широко використовуваним. Дивіться man 3 syslogсвої варіанти.
Другий і третій аргументи - це формат і повідомлення, подібно до printf.
У якому файлі журналу це відображається, залежить від ваших налаштувань системного журналу.
З налаштуваннями за замовчуванням це, ймовірно, входить /var/log/messages.
Ви можете налаштувати користувальницький файл журналу, скориставшись однією із засобів у діапазоні LOG_LOCAL0до LOG_LOCAL7.
Ви використовуєте їх, змінюючи:
openlog("programname", 0, LOG_USER);
до
openlog("programname", 0, LOG_LOCAL0);
або
openlog("programname", 0, LOG_LOCAL1);
тощо.
і додавання відповідного запису /etc/syslog.conf, наприклад,
local1.info /var/log/programname.log
і перезапуск сервера syslog, наприклад
pkill -HUP syslogd
.infoЧастина local1.infoвище означає , що всі повідомлення, які INFOабо більш важливими будуть записуватися, в тому числі INFO, NOTICE, ERR(помилка), CRIT(критична) і т.д., але не DEBUG.
Або, якщо у вас є rsyslog, ви можете спробувати фільтр на основі властивостей , наприклад
:syslogtag, isequal, "programname:" /var/log/programname.log
Системосигнал повинен містити ":".
Або, якщо ви плануєте поширювати програмне забезпечення іншим людям, напевно, не варто покладатися на використання LOG_LOCALчи rsyslogфільтрування.
У такому випадку вам слід скористатися LOG_USER(якщо це звичайна програма) або LOG_DAEMON(якщо це сервер), записати свої запуску та повідомлення про помилки за допомогою syslog, але записати всі ваші повідомлення журналу у файл поза syslog. Наприклад, Apache HTTPd записує до /var/log/apache2/*або /var/log/httpd/*, я вважаю, використовуючи звичайні open/ fopenта write/ printfдзвінки.