Стандартним способом входу з програми С є 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
дзвінки.