syslog(2) System Calls Manual syslog(2) NOM syslog, klogctl - Lire et/ou effacer les tampons circulaires de messages du noyau ; definir console_loglevel BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include /* Definition des constantes SYSLOG_* */ #include /* Definition des constantes SYS_* */ #include int syscall(SYS_syslog, int type, char *bufp, int len); /* L'interface de la glibc */ #include int klogctl(int type, char *bufp, int len); DESCRIPTION Note : vous cherchez sans doute la fonction de la bibliotheque C syslog() qui communique avec syslogd(8) ; reportez-vous a syslog(3) pour plus de details. Cette page decrit l'appel systeme du noyau syslog() qui est utilise pour controler le tampon du noyau printk() ; la fonction d'enveloppe de la glibc correspondant a cet appel systeme est klogctl(). Le tampon de journalisation du noyau. Le noyau dispose d'un tampon circulaire d'une longueur LOG_BUF_LEN dans lequel il stocke les messages fournis en parametre a la fonction du noyau printk() (sans tenir compte du niveau de journalisation). Dans les premiers noyaux, LOG_BUF_LEN avait pour valeur 4096 ; a partir de Linux 1.3.54, elle valait 8192 ; a partir de Linux 2.1.113, elle valait 16384 ; depuis Linux 2.4.23/2.6, la valeur est une option de configuration du noyau (CONFIG_LOG_BUF_SHIFT, valeur par defaut dependant de l'architecture). Depuis Linux 2.6.6, la commande de type 10 (voir plus bas) renvoie la taille du tampon. Commandes L'argument type determine quelle action est realisee par cette fonction. La liste ci-dessous precise les valeurs que peut prendre type. Les noms symboliques sont definis dans les sources du noyau, mais ne sont pas exportes dans l'espace utilisateur ; vous devrez donc utiliser les identifiants numeriques ou redefinir vous-meme les noms. SYSLOG_ACTION_CLOSE (0) Ferme le journal. Actuellement, cette instruction est sans effet. SYSLOG_ACTION_OPEN (1) Ouvre le journal. Actuellement, cette instruction est sans effet. SYSLOG_ACTION_READ (2) Lecture du journal. Des que le tampon du journal n'est plus vide, l'appel lit au plus len octets qu'il place dans le tampon vers lequel pointe bufp. Il renvoie le nombre d'octets lus. Les octets lus sont supprimes du tampon du journal : les informations ne peuvent etre lues qu'une seule fois. C'est la fonction executee par le noyau quand un programme utilisateur lit /proc/kmsg. SYSLOG_ACTION_READ_ALL (3) Lecture de tous les messages restant dans le tampon circulaire, qui sont deplaces dans le tampon vers lequel pointe bufp. L'appel lit les len derniers octets dans le tampon du journal (de maniere non destructive). Il ne lira pas plus que ce qui a ete ecrit dans le tampon depuis la derniere execution de la commande de nettoyage (commande << clear ring buffer >>, voir plus bas la commande 5). L'appel renvoie le nombre d'octets lus. SYSLOG_ACTION_READ_CLEAR (4) Lecture et suppression de tous les messages du tampon circulaire. L'appel effectue exactement la meme chose que la commande de type 3, mais execute egalement la commande << clear ring buffer >>. SYSLOG_ACTION_CLEAR (5) L'appel ne fait qu'executer la commande << clear ring buffer >>. Les arguments bufp et len ne sont pas pris en compte. Cette fonction ne vide pas reellement le tampon circulaire. Plus exactement, elle definit une variable de suivi d'activite du noyau qui determine ce que renvoient les commandes 3 (SYSLOG_ACTION_READ_ALL) et 4 (SYSLOG_ACTION_READ_CLEAR). Cette commande est sans effet sur les commandes 2 (SYSLOG_ACTION_READ) et 9 (SYSLOG_ACTION_SIZE_UNREAD). SYSLOG_ACTION_CONSOLE_OFF (6) La commande sauvegarde la valeur actuelle de console_loglevel puis affecte la valeur minimum_console_loglevel a console_loglevel afin que les messages soient affiches sur la console. Avant Linux 2.6.32, la commande affectait seulement la valeur minimum_console_loglevel a console_loglevel. Reportez-vous aux explications relatives a /proc/sys/kernel/printk plus bas. Les arguments bufp et len ne sont pas pris en compte. SYSLOG_ACTION_CONSOLE_ON (7) Si la commande SYSLOG_ACTION_CONSOLE_OFF a ete executee precedemment, cette commande reaffecte a console_loglevel la valeur sauvegardee au moment de cette execution. Avant Linux 2.6.32, cette commande reaffectait la valeur default_console_loglevel a console_loglevel. Reportez-vous aux explications relatives a /proc/sys/kernel/printk plus bas. Les arguments bufp et len ne sont pas pris en compte. SYSLOG_ACTION_CONSOLE_LEVEL (8) L'appel positionne console_loglevel a la valeur indiquee dans len, qui doit etre un entier compris entre 1 et 8 (inclus). Le noyau applique implicitement une valeur minimale minimum_console_loglevel pour len Consultez la section Le niveau de journalisation (log level) pour plus de details. L'arguments bufp n'est pas pris en compte. SYSLOG_ACTION_SIZE_UNREAD (9) (a partir de Linux 2.4.10) L'appel renvoie le nombre d'octets disponibles en lecture dans le tampon de journalisation du noyau au moment de l'appel, au moyen de la commande 2 (SYSLOG_ACTION_READ). Les arguments bufp et len ne sont pas pris en compte. SYSLOG_ACTION_SIZE_BUFFER (10) (a partir de Linux 2.6.6) Cette commande renvoie la taille totale du tampon du journal du noyau. Les arguments bufp et len ne sont pas pris en compte. Toutes les commandes, excepte 3 et 10, necessitent des privileges. Dans les noyaux Linux avant Linux 2.6.37, seules les commandes de type 3 a 10 etaient permises aux processus non privilegies ; depuis Linux 2.6.37, les commandes de type 3 et 10 sont permises a ces processus seulement si /proc/sys/kernel/dmesg_restrict vaut 0. Avant Linux 2.6.37, << privilegie >> signifiait que l'appelant avait la capacite CAP_SYS_ADMIN. Depuis Linux 2.6.37, << privilegie >> signifie que l'appelant soit la capacite CAP_SYS_ADMIN (maintenant obsolete pour cet usage), soit la (nouvelle) capacite CAP_SYSLOG. /proc/sys/kernel/printk /proc/sys/kernel/printk est un fichier accessible en ecriture qui contient quatre valeurs qui affectent le comportement la fonction printk() du noyau lors de l'affichage ou de la journalisation des messages d'erreur. Ces quatre valeurs sont : console_loglevel Seuls les messages dont le niveau de journalisation est inferieur a cette valeur seront affiches sur la console. La valeur par defaut du champ est DEFAULT_CONSOLE_LOGLEVEL (7), mais elle est ramenee a 4 si la ligne de commande du noyau contient le mot clef << quiet >>, a 10 si la ligne de commande contient le mot << debug >>, et a 15 en cas d'erreur du noyau (les valeurs 10 et 15 n'ont en fait pas de sens car elles equivalent a 8). La valeur console_loglevel peut prendre une valeur (comprise entre 1 et 8) definie par un appel a syslog() avec un type valant 8. default_message_loglevel Cette valeur fournira le niveau de journalisation des messages de printk() pour lesquels un niveau de journalisation n'est pas explicitement defini. Jusqu'a Linux 2.6.38 inclus, la valeur par defaut inscrite dans le code pour ce champ etait 4 (KERN_WARNING) ; a partir de Linux 2.6.39, la valeur par defaut est determinee par l'option de configuration du noyau CONFIG_DEFAULT_MESSAGE_LOGLEVEL, qui par defaut vaut 4. minimum_console_loglevel Ce champ contient la valeur minimale qui peut etre affectee a console_loglevel. default_console_loglevel La valeur par defaut de console_loglevel. Le niveau de journalisation (log level) Chaque message de printk() a son propre niveau de journalisation. Si le niveau de journalisation n'est pas explicitement precise comme partie du message, il vaut par defaut default_message_loglevel. Le niveau de journalisation a par convention les significations suivantes : Constante du noyau Valeur du niveau Signification KERN_EMERG 0 Le systeme est inutilisable KERN_ALERT 1 Des actions doivent etre entreprises immediatement KERN_CRIT 2 Les conditions sont critiques KERN_ERR 3 Des erreurs se produisent KERN_WARNING 4 Des avertissements se presentent KERN_NOTICE 5 Condition normale, mais message significatif KERN_INFO 6 Message d'information simple KERN_DEBUG 7 Messages de debogage La routine du noyau printk() n'affiche un message sur la console que si son niveau de journalisation est inferieur a la valeur console_loglevel. VALEUR RENVOYEE Quand type est egal a 2, 3 ou 4, un appel reussi a syslog() renvoie le nombre d'octets lus. Pour le type 9, syslog() renvoie le nombre d'octets disponibles actuellement en lecture dans le tampon de journalisation du noyau. Pour le type 10, syslog() renvoie la taille totale du tampon de journalisation du noyau. Pour les autres valeurs de type, 0 est renvoye en cas de succes. En cas d'erreur, -1 est renvoye et errno est defini pour preciser l'erreur. ERREURS EINVAL Mauvais parametres (par exemple, mauvais type ; ou type egal a 2, 3 ou 4, buf est NULL ou len est inferieur a 0 ; ou pour type egal a 8, le niveau level est en dehors de l'intervalle allant de 1 a 8). ENOSYS L'appel systeme syslog() n'est pas disponible car le noyau a ete compile sans que l'option CONFIG_PRINTK de configuration du noyau n'ait ete activee. EPERM Un changement de console_loglevel ou un effacement du tampon circulaire de messages du noyau par un processus sans les privileges suffisants (plus precisement sans la capacite CAP_SYS_ADMIN ou CAP_SYSLOG) a ete tente. ERESTARTSYS L'appel systeme a ete interrompu par un signal, et rien n'a ete lu. (Cela ne peut etre vu que pendant un suivi de processus). STANDARDS Linux. HISTORIQUE Depuis longtemps, des gens trouvent regrettable qu'un appel systeme et une routine de bibliotheque aient le meme nom bien qu'ils n'aient pas de rapport entre eux. VOIR AUSSI dmesg(1), syslog(3), capabilities(7) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot , Cedric Boutillier , Frederic Hantrais et Jean-Pierre Giraud Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 syslog(2)