SYSLOG(2) Linux Programmeurs Handleiding SYSLOG(2)

syslog - lees en/of wis kernel bericht-ring-buffer; zet "console_loglevel"

#include <sys/klog.h>        /* Definitie van SYSLOG_* constanten */
#include <sys/syscall.h>     /* Definitie van SYS_* constanten */
#include <unistd.h>
int syscall(SYS_syslog, int type, char *bufp, int len);
/* Het glibc interface */
#include <sys/klog.h>
int klogctl(int type, char *bufw, int len);

Opmerking: Mogelijk zoekt u de C bibliotheek functie syslog(), die praat met syslogd(8), zie syslog(3) voor details.

Deze pagina beschrijft de kernel syslog() systeem aanroep, die wordt gebruikt om de kernel printk() buffer te controleren, de glibc omwikkel functie voor de systeem aanroep wordt klogctl() genoemd.

De kernel heeft een ring buffer met lengte LOG_BUF_LEN waarin berichten die opgegeven werden als argument aan de kernel functie printk() bewaard worden (ongeacht hun log niveau). In vroegere kernels had LOG_BUF_LEN de waarde 4096; vanaf kernel 1.3.54 was dit 8192; vanaf kernel 2.1.113 was het 16384; en vanaf kernel 2.4.23/2.6 is deze waarde de kernel configuratie optie (CONFIG_LOG_BUF_SHIFT, standaard waarde is afhankelijk van de architectuur). Vanaf Linux 2.6.6, kan de grootte worden opgevraagd met commando type 10 (zie hieronder).

Het type argument bepaald de actie die deze functie uitvoert. De lijst hieronder bepaald de waarden van type. De symbolische namen worden gedefinieerd in de kernel broncode, maar worden niet geëxporteerd naar de gebruiker; u zult ofwel getallen moeten gebruiken, of zelf de namen definiëren.

Sluit het log. Momenteel een NOP.
Open het log. Momenteel een NOP.
Lees van de log. De aanroep wacht totdat de kernel log buffer niet leeg is, en leest vervolgens op zijn meest len bytes in de buffer aangewezen door bufp. De aanroep retourneert het aantal gelezen bytes. Gelezen bytes van de log verdwijnen uit de log buffer: de informatie kan slecht eenmaal gelezen worden. Dit is de functie die uitgevoerd wordt door de kernel wanneer een gebruikers programma leest van proc/kmsg.
Lees alle resterende berichten van de ring buffer, en plaats ze in een buffer die aangewezen wordt door bufp. De aanroep leest de laatste len bytes van de log buffer (niet destructief), maar leest niet meer dan was geschreven in de buffer sinds het laatste "wis ring buffer" commando (zie commando 5 hieronder). De aanroep retourneert het aantal gelezen bytes.
Lees en wis alle resterende berichten in de ring buffer. De aanroep doet precies hetzelfde als voor een type van 3, maar voert ook het "wis ring buffer" commando uit.
De aanroep voert alleen het "wis ring buffer" commando uit. De bufp en len argumenten worden genegeerd.
Dit commando wist de ring buffer niet echt. In plaats daarvan zet het een boekhoud variabele in de kernel die de resultaten bepaald die teruggegeven worden door de commando´s 3 3 (SYSLOG_ACTION_READ_ALL) en 4 (SYSLOG_ACTION_READ_CLEAR). Dit commando heeft geen effect op commando´s 2 (SYSLOG_ACTION_READ) en 9 (SYSLOG_ACTION_SIZE_UNREAD).
Het commando bewaart de huidige waarde van console_loglevel en zet vervolgens console_loglevel op minimum_console_loglevel, zodat er geen berichten op de console getoond worden. Voor Linux 2.6.32, zet dit commando eenvoudig console_loglevel op minimum_console_loglevel. Zie de discussie over/proc/sys/kernel/printk, hieronder.
De bufp en len argumenten worden genegeerd.
Als een voorgaand SYSLOG_ACTION_CONSOLE_OFF commando wordt uitgevoerd, dan herstelt dit commando console_loglevel naar de waarde die werd bewaard door dat commando. Voor Linux 2.6.32, zette die commando eenvoudig weg console_loglevel op default_console_loglevel. Zie de discussie over /proc/sys/kernel/printk, hieronder.
De bufp en len argumenten worden genegeerd.
Deze aanroep zet console_loglevel op de waarde gegeven in len, dit dient een geheel getal te zijn met een waarde tussen 1 and 8 (inclusief). De kernel dwingt stilzwijgend een minimum waarde van minimum_console_loglevel al voor len. Zie de log level sectie voor details. Het bufp argument wordt genegeerd.
De aanroep retourneert het aantal bytes die momenteel beschikbaar zijn om te lezen van de kernel log buffer via het commando 2 (SYSLOG_ACTION_READ). De bufp en len argumenten worden genegeerd.
Het commando retourneert de totale grootte van de kernel log buffer. De bufp en len argumenten worden genegeerd.

Alle commando´s behalve 3 en 10 vereisen privilege. In de Linux kernel voor 2.6.37, commando types 3 en 10 zijn toegestaan voor niet-geprivilegieerde processen; vanaf Linux 2.6.37, worden deze commando´s alleen toegestaan aan niet-geprivilegieerde processen als /proc/sys/kernel/dmesg_restrict de waarde 0 heeft. Voor Linux 2.6.37, betekende "geprivilegieerd" dat de aanroeper de CAP_SYS_ADMIN capacitiet had. Vanaf Linux 2.6.37 betekende "geprivilegieerd" dat de aanroeper hetzij de CAP_SYS_ADMIN capaciteit (nu verouderd voor dit doel) of de (nieuwe) CAP_SYSLOG capaciteit.

/proc/sys/kernel/printk is een schrijfbaar bestand dat vier gehele getallen bevat die het kernel printk() gedrag beïnvloed bij het tonen of loggen van fout meldingen. De vier waarden zijn:

Alleen berichten met een log niveau lager dan deze waarden worden getoond in de terminal. De standaard waarde voor dit veld is DEFAULT_CONSOLE_LOGLEVEL (7), maar wordt gezet op 4 als de kernel commando regel het woord "quiet" bevat, 10 als de kernel commando regel het worod "debug" bevat, en op 15 in het geval van een kernel fout (de 10 en 15 zijn een beetje gek, en equivalent aan 8). De waarde van console_loglevel kan worden gezet (op een waarde in het bereik van 1–8) met de syslog() aanroep met een type van 8.
Deze waarde zal worden gebruikt als het log niveau voor printk() berichten die geen expliciet niveau hebben. Tot en met Linux 2.6.38, was de hard-gecodeerde standaard waarde voor dit veld 4 (KERN_WARNING); vanaf Linux 2.6.39, is de standaard waarde gedefinieerd door een kernel configuratie optie CONFIG_DEFAULT_MESSAGE_LOGLEVEL, die standaard op 4 staat.
De waarde in dit veld is de minimale waarde op welke console_loglevel kan worden ingesteld.
Dit is de standaard waarde van console_loglevel.

Elke printk() bericht heeft zijn eigen log niveau. Als dit niveau niet expliciet werd gespecificeerd als onderdeel van het bericht, dan heeft dit de standaardwaarde default_message_loglevel. De gebruikelijke betekenis van het log niveau is als volgt:

Kernel constanten Niveau waarde Betekenis
KERN_EMERG 0 Systeem is onbruikbaar
KERN_ALERT 1 Actie moet onmiddellijk genomen worden
KERN_CRIT 2 Kritieke toestand
KERN_ERR 3 Fouttoestanden
KERN_WARNING 4 Waarschuwings toestanden
KERN_NOTICE 5 Normale maar belangwekkende toestanden
KERN_INFO 6 Informatie
KERN_DEBUG 7 Debug-niveau berichten

De printk kernel routine zal alleen een bericht op de console laten zien als het een log niveau heeft die kleiner is dan de waarde van console_loglevel.

Voor type gelijk aan 2,3 of 4 retourneert een succesvolle aanroep van syslog() het aantal gelezen bytes. Voor type 9, retourneert syslog() het aantal momentaan beschikbare bytes die van de kernel log buffer gelezen kunnen worden. Voor type 10, retourneert syslog() de totale grootte van de kernel log buffer. Voor andere waarden van type, wordt een 0 teruggegeven bij succes.

In het geval van een fout wordt -1 teruggegeven, en errno wordt gezet om de fout te indiceren.

Ongeldig argument (b.v. fout type; of voor type 2,3, of 4, buf is NULL, of len is kleiner dan nul; of voor type 8, het level is buiten het 1 tot 8 bereik.
De syslog() systeem aanroep is niet beschikbaar, omdat de kernel werd gecompileerd met de uitgeschakelde CONFIG_PRINTK kernel-configuratie optie.
Een poging werd gedaan om console_loglevel te veranderen of de kernel berichten ring buffer te wissen door een proces zonder voldoende privilege (preciezer: zonder de CAP_SYS_ADMIN of CAP_SYSLOG capaciteit).
Systeem aanroep werd onderbroken door een signaal; - niets werd gelezen. (Dit kan alleen worden gezien gedurende een trace.)

Deze functie is Linux-specifiek, en zou niet gebruikt moeten worden in programma's die als overdraagbaar bedoeld zijn.

Vanaf het begin merkten mensen op dat het ongelukkig was dat een systeem aanroep en een bibliotheek routine met dezelfde naam erg verschillende beesten zijn.

dmesg(1), syslog(3), capabilities(7)

Deze pagina is onderdeel van release 5.13 van het Linux man-pages-project. Een beschrijving van het project, informatie over het melden van bugs en de nieuwste versie van deze pagina zijn op https://www.kernel.org/doc/man-pages/ te vinden.

De Nederlandse vertaling van deze handleiding is geschreven door Jos Boersema <joshb@xs4all.nl>, Mario Blättermann <mario.blaettermann@gmail.com> en Luc Castermans <luc.castermans@gmail.com>

Deze vertaling is vrije documentatie; lees de GNU General Public License Version 3 of later over de Copyright-voorwaarden. Er is geen AANSPRAKELIJKHEID.

Indien U fouten in de vertaling van deze handleiding zou vinden, stuur een e-mail naar debian-l10n-dutch@lists.debian.org.

22 maart 2021 Linux