Existe-t-il un moyen de créer un fichier journal pour conserver certaines données dans / var / log / à l'aide d'une fonction de bibliothèque ou d'un appel système en langage c sous linux. Et je veux aussi connaître les normes que nous devons suivre pour écrire et traiter le journal. Merci
22
Réponses:
La manière standard de se connecter à partir d'un programme C est
syslog
.Commencez par inclure le fichier d'en-tête:
Puis au début de votre programme, vous devez configurer syslog en appelant
openlog
: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 disponibleman 3 syslog
. Celui que vous pourriez trouver utile estLOG_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
:Le premier argument est la priorité. Les plages prioritaires de
DEBUG
( le moins important) àEMERG
(uniquement pour les situations d' urgence) avecDEBUG
,INFO
etERR
étant les plus couramment utilisés. Voirman 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:
à
ou
etc.
et en ajoutant une entrée correspondante
/etc/syslog.conf
, par exempleet redémarrer le serveur syslog, par exemple
La
.info
partie deslocal1.info
moyens ci - dessus que tous les messages qui sontINFO
ou plus importants seront enregistrés, y comprisINFO
,NOTICE
,ERR
(erreur),CRIT
(critique), etc., mais pasDEBUG
.Sinon,
rsyslog
vous pouvez essayer un filtre basé sur les propriétés , par exempleLe 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 unrsyslog
filtre.Dans ce cas, vous devez utiliser
LOG_USER
(s'il s'agit d'un programme normal) ouLOG_DAEMON
(s'il s'agit d'un serveur), écrire vos messages de démarrage et vos messages d'erreur en utilisantsyslog
, 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éguliersopen
/fopen
etwrite
/printf
.la source
rpm -qa | grep syslog
oudpkg -l '*syslog*'
vous dira probablement lequel.sysklogd
était le seul jeu en ville pour le logiciel syslog. De nos jours , des logiciels commesyslog-ng
,rsyslog
etdsyslog
existent et ont des capacités de filtrage beaucoup plus sophistiquées que tout le service / niveau.Vous voudrez
#include <syslog.h>
, puis utilisez lessyslog()
fonctions pour envoyer des données à n'importe quel programme de journalisation système actif.Voir la page de manuel ici .
la source
Il y a beaucoup de possibilités, quel est votre plan? Avez-vous juste besoin d'une option pour vous connecter à partir de la ligne de commande? Jetez un oeil à
logger
(inclus dans bsdutils ). Tapez simplement:et il enregistrera quelque chose comme ceci dans votre
/var/log/syslog
:voir aussi
man logger
. Selon votre démon de journalisation, vous pouvez trier ces messages dans des fichiers spécifiques ou les filtrer par priorité.Il existe également des solutions pour différents langages de programmation, alors dites-moi ce que vous voulez faire ;-)
la source
Le filtrage par nom de programme est écrit différemment de ce qui est mentionné ci-dessus, pour les versions récentes de
rsyslog
(la version sur ma machine est 5.8.6) comme indiqué ci-dessous:Pour plus d'informations, regardez ici
la source