syslog, klogctl - Lire et/ou effacer les tampons circulaires de messages du
noyau ; définir console_loglevel
Bibliothèque C standard (
libc,
-lc)
#include <sys/klog.h> /* Définition des constantes SYSLOG_* */
#include <sys/syscall.h> /* Définition des constantes SYS_* */
#include <unistd.h>
int syscall(SYS_syslog, int type, char *bufp, int len);
/* L'interface de la glibc */
#include <sys/klog.h>
int klogctl(int type, char *bufp, int len);
Note : vous cherchez sans doute la fonction de la
bibliothèque C
syslog() qui communique avec
syslogd(8) ; reportez-vous à
syslog(3) pour plus
de détails.
Cette page décrit l'appel système du noyau
syslog() qui est
utilisé pour contrôler le tampon du noyau
printk() ; la fonction d'enveloppe de la glibc correspondant
à cet appel système est
klogctl().
Le noyau dispose d'un tampon circulaire d'une longueur
LOG_BUF_LEN dans
lequel il stocke les messages fournis en paramètre à la fonction
du noyau
printk() (sans tenir compte du niveau de journalisation). Dans
les premiers noyaux,
LOG_BUF_LEN avait pour valeur 4096 ;
à partir de Linux 1.3.54, elle valait 8192 ; à 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 défaut dépendant de l'architecture). Depuis
Linux 2.6.6, la commande de type 10 (voir plus bas) renvoie la taille
du tampon.
L'argument
type détermine quelle action est réalisée
par cette fonction. La liste ci-dessous précise les valeurs que peut
prendre
type. Les noms symboliques sont définis dans les sources
du noyau, mais ne sont pas exportés dans l'espace utilisateur ;
vous devrez donc utiliser les identifiants numériques ou
redéfinir vous-même 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. Dès 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 supprimés du tampon du journal : les
informations ne peuvent être lues qu'une seule fois. C'est la
fonction exécutée 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 déplacés dans le tampon vers lequel
pointe bufp. L'appel lit les len derniers octets dans le
tampon du journal (de manière non destructive). Il ne lira pas plus
que ce qui a été écrit dans le tampon depuis la
dernière exécution 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 même chose que la
commande de type 3, mais exécute également la
commande « clear ring buffer ».
-
SYSLOG_ACTION_CLEAR (5)
- L'appel ne fait qu'exécuter la commande
« clear ring buffer ». Les arguments
bufp et len ne sont pas pris en compte.
- Cette fonction ne vide pas réellement le tampon
circulaire. Plus exactement, elle définit une variable de suivi
d'activité du noyau qui détermine 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 à console_loglevel afin que
les messages soient affichés sur la console. Avant Linux 2.6.32, la
commande affectait seulement la valeur minimum_console_loglevel
à console_loglevel. Reportez-vous aux explications relatives
à /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
été exécutée précédemment, cette
commande réaffecte à console_loglevel la valeur
sauvegardée au moment de cette exécution. Avant Linux
2.6.32, cette commande réaffectait la valeur
default_console_loglevel à console_loglevel.
Reportez-vous aux explications relatives à
/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 à la
valeur indiquée dans len, qui doit être 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
détails. L'arguments bufp n'est pas pris en compte.
-
SYSLOG_ACTION_SIZE_UNREAD (9) (à 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) (à 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, excepté 3 et 10, nécessitent des
privilèges. Dans les noyaux Linux avant Linux 2.6.37, seules les
commandes de type 3 à 10 étaient permises aux processus
non privilégiés ; depuis Linux 2.6.37, les commandes de
type 3 et 10 sont permises à ces processus seulement si
/proc/sys/kernel/dmesg_restrict vaut 0. Avant Linux 2.6.37,
« privilégié » signifiait que
l'appelant avait la capacité
CAP_SYS_ADMIN. Depuis
Linux 2.6.37, « privilégié »
signifie que l’appelant soit la capacité
CAP_SYS_ADMIN
(maintenant obsolète pour cet usage), soit la (nouvelle)
capacité
CAP_SYSLOG.
/proc/sys/kernel/printk est un fichier accessible en écriture 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
inférieur à cette valeur seront affichés sur la
console. La valeur par défaut du champ est
DEFAULT_CONSOLE_LOGLEVEL (7), mais elle est ramenée
à 4 si la ligne de commande du noyau contient le mot clef
« quiet », à 10 si la ligne de
commande contient le mot « debug », et
à 15 en cas d'erreur du noyau (les valeurs 10 et 15
n'ont en fait pas de sens car elles équivalent à 8).
La valeur console_loglevel peut prendre une valeur (comprise
entre 1 et 8) définie par un appel à
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 défini. Jusqu'à Linux 2.6.38
inclus, la valeur par défaut inscrite dans le code pour ce champ
était 4 ( KERN_WARNING) ; à partir de
Linux 2.6.39, la valeur par défaut est
déterminée par l'option de configuration du noyau
CONFIG_DEFAULT_MESSAGE_LOGLEVEL, qui par défaut
vaut 4.
- minimum_console_loglevel
- Ce champ contient la valeur minimale qui peut être
affectée à console_loglevel.
- default_console_loglevel
- La valeur par défaut de
console_loglevel.
Chaque message de
printk() a son propre niveau de journalisation. Si le
niveau de journalisation n'est pas explicitement précisé comme
partie du message, il vaut par défaut
default_message_loglevel.
Le niveau de journalisation a par convention les significations
suivantes :
Constante du noyau |
Valeur du niveau |
Signification |
KERN_EMERG |
0 |
Le système est inutilisable |
KERN_ALERT |
1 |
Des actions doivent être entreprises immédiatement |
KERN_CRIT |
2 |
Les conditions sont critiques |
KERN_ERR |
3 |
Des erreurs se produisent |
KERN_WARNING |
4 |
Des avertissements se présentent |
KERN_NOTICE |
5 |
Condition normale, mais message significatif |
KERN_INFO |
6 |
Message d'information simple |
KERN_DEBUG |
7 |
Messages de débogage |
La routine du noyau
printk() n'affiche un message sur la console que si
son niveau de journalisation est inférieur à la valeur
console_loglevel.
Quand
type est égal à 2, 3 ou 4, un appel réussi
à
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 renvoyé en cas de
succès.
En cas d'erreur,
-1 est renvoyé et
errno est défini
pour préciser l'erreur.
- EINVAL
- Mauvais paramètres (par exemple, mauvais
type ; ou type égal à 2, 3 ou 4,
buf est NULL ou len est inférieur à 0 ;
ou pour type égal à 8, le niveau level est en
dehors de l'intervalle allant de 1 à 8).
- ENOSYS
- L'appel système syslog() n'est pas disponible
car le noyau a été compilé sans que l'option
CONFIG_PRINTK de configuration du noyau n'ait été
activée.
- EPERM
- Un changement de console_loglevel ou un effacement
du tampon circulaire de messages du noyau par un processus sans les
privilèges suffisants (plus précisément sans la
capacité CAP_SYS_ADMIN ou CAP_SYSLOG) a
été tenté.
- ERESTARTSYS
- L'appel système a été interrompu par
un signal, et rien n'a été lu. (Cela ne peut être vu
que pendant un suivi de processus).
Cet appel système est spécifique à Linux et ne devrait pas
être employé dans des programmes destinés à
être portables.
Depuis longtemps, des gens trouvent regrettable qu'un appel système et
une routine de bibliothèque aient le même nom bien qu'ils
n'aient pas de rapport entre eux.
dmesg(1),
syslog(3),
capabilities(7)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]>,
Cédric Boutillier <
[email protected]>,
Frédéric Hantrais <
[email protected]> et Jean-Pierre
Giraud <
[email protected]>
Cette traduction est une documentation libre ; veuillez vous reporter
à la
GNU
General Public License version 3 concernant les conditions de copie
et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
[email protected]