Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 50

Автор НСйл ΠœΡΡ‚ΡŒΡŽ

Для просмотра рСгистрируСмых сообщСний Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²Π° ΡΡƒΠΏΠ΅Ρ€ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

НСкоторыС систСмы UNIX Π½Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ„Π°ΠΉΠ»ΠΎΠ² с ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ для чтСния сообщСниями, Π½ΠΎ ΠΎΠ½ΠΈ ΡΠ½Π°Π±ΠΆΠ°ΡŽΡ‚ администраторов срСдствами для чтСния Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… систСмных событий. Π‘ΠΌ. подробности Π² систСмной Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ систСмных сообщСний ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ, ΠΌΠ΅Ρ‚ΠΎΠ΄ формирования сообщСний стандартный. Π’ спСцификации UNIX прСдставлСн доступный всСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ интСрфСйс формирования рСгистрируСмых сообщСний с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ syslog.

#include <syslog.h>

void syslog(int priority, const char *message, arguments...);

Ѐункция syslog посылаСт рСгистрируСмоС сообщСниС срСдству вСдСния систСмного ΠΆΡƒΡ€Π½Π°Π»Π° (logging facility). Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сообщСния Π΅ΡΡ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ priority, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ поразрядной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ OR ΠΈΠ· стСпСни ваТности сообщСния (severity level) ΠΈ Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ сообщСниС (facility value). Π‘Ρ‚Π΅ΠΏΠ΅Π½ΡŒ ваТности опрСдСляСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ дСйствия, Π° Ρ‚ΠΈΠΏ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ фиксируСт ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΎΡ€Π° сообщСния.

Π’ΠΈΠΏΡ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (ΠΈΠ· Ρ„Π°ΠΉΠ»Π° syslog.h) Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ константу LOG_USER, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡƒΡŽ для обозначСния сообщСния, ΠΏΡ€ΠΈΡˆΠ΅Π΄ΡˆΠ΅Π³ΠΎ ΠΈΠ· прилоТСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ), ΠΈ константы LOG_LOCAL0, LOG_LOCAL1, ..., LOG_LOCAL7, Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ для локального администратора.

Π’ Ρ‚Π°Π±Π». 4.6 пСрСчислСны стСпСни ваТности сообщСний Π² порядкС убывания ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°.


Π’Π°Π±Π»ΠΈΡ†Π° 4.6

ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ОписаниС LOG_EMERG ΠšΡ€ΠΈΠ·ΠΈΡΠ½Π°Ρ ситуация LOG_ALERT ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с высоким ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… LOG_CRIT ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ ошибка, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ оборудования LOG_ERR Ошибки LOG_WARNING ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ LOG_NOTICE ΠžΡΠΎΠ±Ρ‹Π΅ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½ΠΎΠ³ΠΎ внимания LOG_INFO Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ сообщСния LOG_DEBUG ΠžΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Π΅ сообщСния

Π’ зависимости ΠΎΡ‚ настройки систСмы сообщСния Ρ‚ΠΈΠΏΠ° LOG_EMER ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅ΡΡ‹Π»Π°Ρ‚ΡŒΡΡ всСм ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ систСмы, сообщСния LOG_ALERT ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ ΠΏΠΎ элСктронной ΠΏΠΎΡ‡Ρ‚Π΅ администратору, сообщСния LOG_DEBUG ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Π° сообщСния Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ Π² Ρ„Π°ΠΉΠ». Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая примСняСт срСдство рСгистрации сообщСний, просто вызывая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ syslog, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ рСгистрируСмоС сообщСниС.

Π£ сообщСния, создаваСмого syslog, Π΅ΡΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈ Ρ‚Π΅Π»ΠΎ сообщСния. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ создаСтся ΠΈΠ· ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ сообщСниС, ΠΈ Π΄Π°Ρ‚Ρ‹ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π’Π΅Π»ΠΎ сообщСния создаСтся ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° message, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ syslog, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ дСйствуСт ΠΊΠ°ΠΊ строка format Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ printf. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ syslog ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² соотвСтствии со спСцификаторами ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ Π² стилС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ printf, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² строкС message. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ спСцификатор %m для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ строки сообщСния ΠΎΠ± ошибкС, ассоциированной с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ errno. Π­Ρ‚Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ для рСгистрации сообщСний ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ….

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 4.13.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 4.13. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ syslog

Π’ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ осущСствляСтся ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ».

#include <syslog.h>

#include <stdio.h>

#include <stdlib.h>


int main() {

 FILE *f;

 f = fopen("not_here", "r");

 if (!f) syslog(LOG_ERR|LOG_USER, "oops - %m\n");

 exit(0);

}

Когда Π²Ρ‹ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ syslog.с, Ρ‚ΠΎ Π½Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π²Ρ‹Π²ΠΎΠ΄Π°, Π½ΠΎ Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ„Π°ΠΉΠ»Π° /var/log/messages Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ содСрТится ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ строка:

Jun 9 09:24:50 suse103 syslog: oops β€” No such file or directory

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅Ρ‚. Когда ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° заканчиваСтся Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ, Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ syslog для записи ΡΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠ΅Π³ΠΎΡΡ Π² систСмный ΠΆΡƒΡ€Π½Π°Π».

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ рСгистрируСмоС сообщСниС Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, какая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π·Π²Π°Π»Π° срСдство рСгистрации; ΠΎΠ½ΠΎ просто констатируСт Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»Π° Π²Ρ‹Π·Π²Π°Π½Π° функция syslog с сообщСниСм. Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ прСобразования %m Π±Ρ‹Π» Π·Π°ΠΌΠ΅Π½Π΅Π½ описаниСм ошибки, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‰ΠΈΠΌ ΠΎΠ± отсутствии Ρ„Π°ΠΉΠ»Π°. Π­Ρ‚ΠΎ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Π΅Π΅, Ρ‡Π΅ΠΌ простой ΠΎΡ‚Ρ‡Π΅Ρ‚, содСрТащий Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ€ ошибки.

Π’ Ρ„Π°ΠΉΠ»Π΅ syslog.h ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, примСняСмыС для измСнСния повСдСния срСдств вСдСния систСмных ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ².

К Π½ΠΈΠΌ относятся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

#include <syslog.h> void closelog(void);

void openlog(const char *ident, int logopt, int facility);

int setlogmask(int maskpri);

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ способ прСдставлСния Π²Π°ΡˆΠΈΡ… рСгистрируСмых сообщСний, Π²Ρ‹Π·Π²Π°Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ openlog. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π·Π°Π΄Π°Ρ‚ΡŒ строку ident, которая Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒΡΡ ΠΊ вашим рСгистрируСмым сообщСниям. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π΅ для ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, создавшСй сообщСниС. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ facility записываСт Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ принятый ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ‚ΠΈΠΏ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ сообщСниС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²Π°Ρ… syslog. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ устанавливаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ LOG_USER. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ logopt настраиваСт ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ syslog. Он прСдставляСт собой Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ поразрядной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ OR Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ большСго числа ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π». 4.7.


Π’Π°Π±Π»ΠΈΡ†Π° 4.7

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ logopt ОписаниС LOG_PID Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сообщСния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ процСсса, ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€, выдСляСмый систСмой ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ процСссу LOG_CONS ΠŸΠΎΡΡ‹Π»Π°Π΅Ρ‚ сообщСния Π½Π° консоль, Ссли ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ записаны LOG_ODELAY ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ срСдство рСгистрации сообщСний ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ syslog LOG_NDELAY ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ срСдство рСгистрации сообщСний Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Π½Π΅ доТидаясь ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ рСгистрируСмого сообщСния

Ѐункция openlog Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ ΠΈ ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ дСскриптор Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для записи Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ вСдСния систСмного ΠΆΡƒΡ€Π½Π°Π»Π°. Π’Ρ‹ смоТСтС Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΅Π³ΠΎ, Π²Ρ‹Π·Π²Π°Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ closelog. Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ openlog ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ syslog, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ послСдняя ΠΏΡ€ΠΈ нСобходимости ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ срСдство вСдСния систСмного ΠΆΡƒΡ€Π½Π°Π»Π°.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ рСгистрируСмых Π²Π°ΠΌΠΈ сообщСний с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ установки маски рСгистрации, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ setlogmask. ВсС Π±ΡƒΠ΄ΡƒΡ‰ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ syslog с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°ΠΌΠΈ, Π½Π΅ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² маскС рСгистрации, Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚Π±Ρ€ΠΎΡˆΠ΅Π½Ρ‹, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ смоТСтС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ маску для ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ сообщСний Ρ‚ΠΈΠΏΠ° LOG_DEBUG Π±Π΅Π· нСобходимости ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚Π΅Π»ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ маску для рСгистрируСмых сообщСний, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ LOG_MASK(priority), ΡΠΎΠ·Π΄Π°ΡŽΡ‰Π΅Π΅ маску Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°, ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ LOG_UPTO(priority), ΡΠΎΠ·Π΄Π°ΡŽΡ‰Π΅Π΅ маску для всСх ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠ² Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ.

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 4.14.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 4.14. Маска рСгистрации (logmask)

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ logmask Π² дСйствии.

#include <syslog.h>

#include <stdio.h>

#include <unistd.h>

#include <stdlib.h>


int main() {

 int logmask;

 openlog("logmask", LOG_PID|LOG_CONS, LOG_USER);

 syslog(LOG_INFO, "informative message, pid = %d", getpid());

 syslog(LOG_DEBUG, "debug message, should appear");

 logmask = setlogmask(LOG_UPTO(LOG_NOTICE));

 syslog(LOG_DEBUG, "debug message, should not appear");

exit(0);

}

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° logmask.c Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚, Π½ΠΎ Π² Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠΉ систСмС Linux Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π² Ρ„Π°ΠΉΠ»Π΅ /var/log/messages, Π±Π»ΠΈΠΆΠ΅ ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ строку:

Jun 9 09:28:52 suse103 logmask[19339] : informative message, pid = 19339

Π€Π°ΠΉΠ», настроСнный Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ рСгистрируСмых сообщСний ΠΎΠ± ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ (Π² зависимости ΠΎΡ‚ настройки рСгистрации, это Ρ‡Π°Ρ‰Π΅ всСго Ρ„Π°ΠΉΠ» /var/log/debug ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° Ρ„Π°ΠΉΠ» /var/log/messages), Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ строку:

Jun 9 09:28:52 susel03 logmask[19339]: debug message, should appear

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ срСдство вСдСния систСмного ΠΆΡƒΡ€Π½Π°Π»Π°, Π½Π°Π·Π²Π°Π½Π½ΠΎΠ΅ logmask, ΠΈ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° процСсса Π² рСгистрируСмыС сообщСния. Π˜Π½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ сообщСниС записываСтся Π² Ρ„Π°ΠΉΠ» /var/log/messages, Π° ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠ΅ сообщСниС β€” Π² Ρ„Π°ΠΉΠ» /var/log/debug. Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠ΅ сообщСниС Π½Π΅ появляСтся, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π²Ρ‹Π·Π²Π°Π»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ setlogmask с ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ всСх сообщСний с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ Π½ΠΈΠΆΠ΅ LOG_NOTICE. (Π£Ρ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ€Π°Π½Π½ΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ… ядра Linux.)