Есть ли способ сделать файл журнала для обслуживания некоторых данных в / var / log / с помощью некоторой библиотечной функции или системного вызова на языке c в linux. И я также хочу знать стандарты, которым мы должны следовать, чтобы писать и обрабатывать журнал. Благодарность
22
Ответы:
Стандартный способ входа из программы на Си есть
syslog
.Начните с включения заголовочного файла:
Затем в начале вашей программы вы должны настроить syslog, вызвав
openlog
:Первым аргументом является идентификация или тег, который автоматически добавляется в начале каждого сообщения. Введите название вашей программы здесь.
Второй аргумент - это параметры, которые вы хотите использовать, или
0
для нормального поведения. Полный список опций находится вman 3 syslog
. Один из них может оказаться полезным:LOG_PID
системный журнал также записывает идентификатор процесса в сообщении журнала.Затем каждый раз, когда вы хотите написать сообщение журнала, вы звоните
syslog
:Первый аргумент является приоритетом. Первоочередная варьируется от
DEBUG
( не менее важно) доEMERG
(только для чрезвычайных ситуаций) сDEBUG
,INFO
иERR
будучи наиболее широко используемым. Смотритеman 3 syslog
для ваших вариантов.Второй и третий аргументы - это формат и сообщение, как и printf.
В каком файле журнала это появляется, зависит от настроек системного журнала.
С настройкой по умолчанию, это, вероятно, входит в
/var/log/messages
.Вы можете настроить собственный файл журнала с помощью одного из средств в диапазоне
LOG_LOCAL0
доLOG_LOCAL7
.Вы используете их, изменяя:
в
или
и т.п.
и добавление соответствующей записи
/etc/syslog.conf
, например, ви перезапуск сервера системного журнала, например
.info
Частьlocal1.info
выше означает , что все сообщения, которыеINFO
или более важными будут записываться, в том числеINFO
,NOTICE
,ERR
(ошибка),CRIT
(критическая) и т.д., но неDEBUG
.Или, если у вас есть
rsyslog
, вы можете попробовать фильтр на основе свойств , например,Системный журнал должен содержать «:».
Или, если вы планируете распространять свое программное обеспечение среди других людей, вероятно, не стоит полагаться на использование
LOG_LOCAL
илиrsyslog
фильтр.В этом случае вы должны использовать
LOG_USER
(если это обычная программа) илиLOG_DAEMON
(если это сервер), писать свои сообщения запуска и сообщения об ошибках, используяsyslog
, но записывать все свои сообщения журнала в файл за пределамиsyslog
. Например, Apache HTTPd регистрирует/var/log/apache2/*
или/var/log/httpd/*
, я предполагаю, используя регулярные вызовыopen
/fopen
иwrite
/printf
.источник
rpm -qa | grep syslog
илиdpkg -l '*syslog*'
, вероятно, скажет вам, что.sysklogd
времен, когда это была единственная игра в городе для программного обеспечения системного журнала. В настоящее время программное обеспечение , какsyslog-ng
,rsyslog
иdsyslog
существуют и гораздо более сложные возможности фильтрации , чем просто сервис / уровень.Вы захотите
#include <syslog.h>
, а затем используйтеsyslog()
функции для отправки данных в любую активную программу регистрации системы.Смотрите страницу руководства здесь .
источник
Есть много возможностей, каков твой план? Вам просто нужна опция для входа в систему из командной строки? Взгляните на
logger
(включен в bsdutils ). Просто введите:и он будет записывать что-то вроде этого на ваш
/var/log/syslog
:Смотрите также
man logger
. В зависимости от вашего демона регистрации вы можете сортировать эти сообщения по определенным файлам или фильтровать их по приоритету.Есть также несколько решений для разных языков программирования, поэтому, пожалуйста, скажите мне, что вы хотите сделать ;-)
источник
Фильтрация по имени программы написана не так, как указано выше, для последних версий
rsyslog
(версия на моем компьютере 5.8.6), как показано ниже:Для получения дополнительной информации, смотрите здесь
источник