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>
Ensuite, 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 deuxième argument est les options que vous souhaitez utiliser, ou 0
pour le comportement normal. La liste complète des options est en man 3 syslog
. Un que vous pourriez trouver utile est LOG_PID
, ce qui permet à syslog d'enregistrer également l'identifiant du processus dans le message de journal.
Ensuite, chaque fois que vous voulez écrire un message de log, vous appelez syslog
:
syslog(LOG_INFO, "%s", "Message");
Le premier argument est la priorité. La priorité va de DEBUG
(le moins important) à EMERG
(seulement pour les urgences) avec DEBUG
, INFO
, et ERR
étant le plus couramment utilisé. Voir man 3 syslog
pour vos choix.
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 passe probablement en /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 changeant :
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
Le .info
partie de local1.info
ci-dessus signifie que tous les messages INFO
ou plus important sera enregistré, y compris INFO
, NOTICE
, ERR
(erreur), CRIT
(critique), etc., mais pas DEBUG
.
Ou, si vous avez 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 compter sur l'utilisation de LOG_LOCAL
ou un rsyslog
filtre.
Dans ce cas, vous devez utiliser LOG_USER
(si c'est un programme normal) ou LOG_DAEMON
(si c'est un serveur), écrivez vos messages de démarrage et vos messages d'erreur en utilisant syslog
, mais écrivez tous vos messages de journal dans un fichier en dehors de syslog
. Par exemple, Apache HTTPd se connecte à /var/log/apache2/*
ou /var/log/httpd/*
, je suppose en utilisant le open
normal /fopen
et write
/printf
appels.
Vous voudrez #include <syslog.h>
, puis utilisez le syslog()
fonctions pour envoyer des données à n'importe quel programme de journalisation système actif.
Voir la page de manuel ici.