Re: Системный журнал
Добавлено: 16 авг 2012, 18:45
Т.е. как делает это любая программа, не обязательно демон службы...Olej писал(а): 2. как программа пишет лог, и как она определяет уровень логирования?
Это легко понять на простейшей программке:
Код: Выделить всё
#include <stdio.h>
#include <stdlib.h>
#include <syslog.h>
int main( int argc, char **argv, char **envp ) {
int i;
openlog( argv[ 0 ], LOG_NDELAY, LOG_USER );
// LOG_EMERG=0, LOG_ALERT=1, LOG_CRIT=2, LOG_ERR= 3
// LOG_WARNING=4, LOG_NOTICE=5, LOG_INFO=6, LOG_DEBUG=7
for( i = LOG_EMERG; i <= LOG_DEBUG; i++ ) {
syslog( i, "log. level = %d", i );
printf( "done: log. level = %d\n", i );
}
closelog();
return( EXIT_SUCCESS );
}
Соберите и запустите:
Код: Выделить всё
bash-4.2$ cc mylogs.c -o mylogs
bash-4.2$ ./mylogs
done: log. level = 0
done: log. level = 1
done: log. level = 2
done: log. level = 3
done: log. level = 4
done: log. level = 5
done: log. level = 6
done: log. level = 7
Теперь смотрим системный журнал:
Код: Выделить всё
bash-4.2$ sudo cat /var/log/messages | tail -n7
Aug 16 18:30:12 notebook ./mylogs: log. level = 0
Aug 16 18:30:12 notebook ./mylogs: log. level = 1
Aug 16 18:30:12 notebook ./mylogs: log. level = 2
Aug 16 18:30:12 notebook ./mylogs: log. level = 3
Aug 16 18:30:12 notebook ./mylogs: log. level = 4
Aug 16 18:30:12 notebook ./mylogs: log. level = 5
Aug 16 18:30:12 notebook ./mylogs: log. level = 6
Вот так (очень огрублённо) работает отсылка в журнал из любой программы + фильтрация уровней демоном журналирования.