Стандартный способ входа из программы на Си есть syslog.
Начните с включения заголовочного файла:
#include <syslog.h>
Затем в начале вашей программы вы должны настроить syslog, вызвав openlog:
openlog("programname", 0, LOG_USER);
Первым аргументом является идентификация или тег, который автоматически добавляется в начале каждого сообщения. Введите название вашей программы здесь.
Второй аргумент - это параметры, которые вы хотите использовать, или 0для нормального поведения. Полный список опций находится в man 3 syslog. Один из них может оказаться полезным: LOG_PIDсистемный журнал также записывает идентификатор процесса в сообщении журнала.
Затем каждый раз, когда вы хотите написать сообщение журнала, вы звоните 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
и перезапуск сервера системного журнала, например
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.