GNU/Linux >> Tutoriels Linux >  >> Linux

créer un fichier journal

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.


Linux
  1. Linux - Comment configurer le fichier Syslog.conf, pour consigner les messages Iptables dans un fichier séparé ?

  2. Comment vider un fichier journal sous Linux

  3. Rotation du journal de stdout ?

  4. Comment rendre un fichier NON modifiable ?

  5. Trouver quel processus modifie un fichier

Comment rendre un fichier exécutable sous Linux

Configuration de logrotate sous Linux

Rotation des fichiers journaux

Linux make Commande avec des exemples

Comment faire en sorte que ssh se connecte avec le bon utilisateur ?

cp -L vs cp -H