La manière standard de se connecter à partir d'un programme C est syslog
.
Commencez par inclure le fichier d'en-tête:
#include <syslog.h>
Puis au début de votre programme, vous devez configurer syslog en appelant openlog
:
openlog("programname", 0, LOG_USER);
Le premier argument est l'identification ou la balise, qui est automatiquement ajoutée au début de chaque message. Mettez le nom de votre programme ici.
Le second argument est les options que vous souhaitez utiliser, ou 0
pour le comportement normal. La liste complète des options est disponible man 3 syslog
. Celui que vous pourriez trouver utile est LOG_PID
, ce qui fait que syslog enregistre également l'ID du processus dans le message du journal.
Ensuite, chaque fois que vous souhaitez écrire un message de journal, vous appelez syslog
:
syslog(LOG_INFO, "%s", "Message");
Le premier argument est la priorité. Les plages prioritaires de DEBUG
( le moins important) à EMERG
(uniquement pour les situations d' urgence) avec DEBUG
, INFO
et ERR
étant les plus couramment utilisés. Voir man 3 syslog
pour vos options.
Les deuxième et troisième arguments sont un format et un message, tout comme printf.
Le fichier journal dans lequel cela apparaît dépend de vos paramètres Syslog.
Avec une configuration par défaut, il entre probablement dans /var/log/messages
.
Vous pouvez configurer un fichier journal personnalisé en utilisant l'une des fonctionnalités de la plage LOG_LOCAL0
à LOG_LOCAL7
.
Vous les utilisez en modifiant:
openlog("programname", 0, LOG_USER);
à
openlog("programname", 0, LOG_LOCAL0);
ou
openlog("programname", 0, LOG_LOCAL1);
etc.
et en ajoutant une entrée correspondante /etc/syslog.conf
, par exemple
local1.info /var/log/programname.log
et redémarrer le serveur syslog, par exemple
pkill -HUP syslogd
La .info
partie des local1.info
moyens ci - dessus que tous les messages qui sont INFO
ou plus importants seront enregistrés, y compris INFO
, NOTICE
, ERR
(erreur), CRIT
(critique), etc., mais pas DEBUG
.
Sinon, rsyslog
vous pouvez essayer un filtre basé sur les propriétés , par exemple
:syslogtag, isequal, "programname:" /var/log/programname.log
Le syslogtag doit contenir un ":".
Ou, si vous prévoyez de distribuer votre logiciel à d'autres personnes, ce n'est probablement pas une bonne idée de s'appuyer sur l'utilisation LOG_LOCAL
ou un rsyslog
filtre.
Dans ce cas, vous devez utiliser LOG_USER
(s'il s'agit d'un programme normal) ou LOG_DAEMON
(s'il s'agit d'un serveur), écrire vos messages de démarrage et vos messages d'erreur en utilisant syslog
, mais écrire tous vos messages de journal dans un fichier extérieur à syslog
. Par exemple, Apache HTTPd se connecte à /var/log/apache2/*
ou /var/log/httpd/*
, je suppose, en utilisant des appels réguliers open
/ fopen
et write
/ printf
.