Формирование сообщений для протокола
При создании программ на языке Си их разработчики имеют возможность в необходимых случаях вставить вызов специальных библиотечных функций openlog, setlogmask, syslog и closelog, посылающих сообщения о тех или иных событиях при выполнении программы специальному системному демону syslogd, ведущему системный протокол. Функция openlog устанавливает связь с этим демоном, функция syslog формирует конкретное сообщение для записи в протокол, а функция closelog закрывает связь. Сообщения, формируемые функцией syslog, состоят из нескольких полей, разделяемых пробелами. Каждое сообщение начинается с поля PRI, которое в закодированном виде содержит информацию о категории сообщения (facility) и уровне серьезности (severity level) или приоритете (priority) сообщения.
Категория (facility) - информация о том, к какому классу относится данное сообщение (от 0 до 23). Категории определяются в файле /usr/include/sys/syslog.h), например: 0 (kern) - сообщения ядра; 1 (user) - сообщения от программ пользователя; 3 (daemon) - сообщения системных демонов, которые в отличие от FTP или LPR не имеют выделенных специально для них категорий; 9 (cron) - сообщения от системного планировщика и т.п. Категория не имеет, вообще говоря, никакого отношения к имени программы, которая шлет сообщения демону syslogd. Более того, некоторые программы могут порождать сообщения разных категорий. Например, демон telnetd в случае неудачных попыток входа в систему порождает сообщения категории authpriv, а в других случаях относит свои сообщения к категории daemon.
Второй параметр, на основе которого формируется значение поля PRI - это уровень или приоритет сообщения (priority). Стандартно заданы 8 уровней важности (они тоже определены в файле /usr/include/sys/syslog.h), например: 0 (emerg) - чрезвычайная ситуация, система неработоспособна; 2 (crit) - критическая ошибка; 6 (info) - информационное сообщение. При формировании сообщения функцией syslog числовое значение категории умножается на 8 и складывается с числовым значением приоритета, получившееся число заключается в угловые скобки и записывается в поле PRI.
Вслед за полем PRI в сообщение включаются поля: TIMESTAMP - время формирования сообщения, HOSTNAME - имя или IP-адрес хоста, MSG - произвольный текст сообщения в коде ASCII. Время записывается в формате: без указания года, что необходимо учесть при организации долговременного хранения файлов протокола. Имя хоста включается в сообщение, чтобы обеспечить возможность ведения протоколов на одном из выделенных компьютеров в сети. Если компьютер имеет несколько интерфейсов с различными IP-адресами, то в качестве имени или адреса хоста может быть использовано любое из них. Текст сообщения (MSG) содержит этикетку (TAG) и тело сообщения (CONTENT). Обычно в качестве этикетки используется простое имя программы, иногда дополненное идентификатором процесса, заключенным в квадратные скобки.