J'ai une journalisation configurée à l'aide de Logging.fileconfig (). J'ai un enregistreur racine allant à un gestionnaire qui utilise sysloghandler ('/ dev / log', manueleurs.sysloghandler.log_user) p>
Tout cela fonctionne parfaitement bien et je vois mes entrées de journalisation dans /var/log/user.log p>
La question est de savoir comment puis-je définir la chaîne d'identification SysLog à autre chose que Python? Il apparaît que le module SysLog dans la LIB standard permet de définir cela lors de l'ouverture d'un journal, mais le gestionnaire de journalisation n'offre pas cette fonctionnalité. P>
La solution serait-elle à Sysloghandler et à utiliser la bibliothèque SysLog à l'intérieur de sa méthode EMIT? Il s'agit d'un programme UNIX uniquement, d'utiliser Syslog directement ne pose aucun problème de portabilité. P>
4 Réponses :
afaik, la chaîne d'identification est un artefact de l'API Syslog, voir Cette page . Il suffit d'utiliser le c argv [0] qui serait bien sûr "python". P>
Je suis surpris que vous obtenez cela à l'aide de sysloghandler code> avec une prise de domaine, car le message envoyé à Syslog Daemons à travers le domaine ou les sockets TCP est juste une chaîne avec la priorité des
sysloghandler code>, car il n'utilise pas l'API Syslog (qui possède des problèmes de sécurité thread-sécurité dans certaines versions, IIRC). P>
Vinay merci pour la réponse approfondie. Il vous appartient que vous aviez raison, ce qui était principalement une mauvaise communication avec mon équipe d'opérations. Nous utilisons un nouveau formateur pour mettre un faux drapeau "identité" comme premier argument et rsysslog ne pouvait pas être plus heureux.
Ceci est des informations obsolètes, je marquerais la réponse de FirefighterBlu3 comme le correct.
Il n'y a aucune raison de savoir que les informations deviennent obsolètes. C'était la bonne réponse à l'époque et, grâce à FirefighterBlu3 Code> pour fournir la mise à jour.
Ceci est un peu vieux mais de nouvelles informations doivent être enregistrées ici pour que les gens ne ressentent pas la nécessité d'écrire leur propre gestionnaire de syslog.
Depuis Python 3.3, le SysLoghandler a un attribut de classe de exemple: p> id. / Code> précisément à cette fin; La valeur par défaut est ''. p>
Ceci est Python 3.3+ cependant.
Juste un fyi pour d'autres personnes qui pourraient courir dans le même problème. Si vous faites dicconfig code> à partir d'un fichier YAML, la façon dont vous définissez
Ident code> est en mettant la touche
Ident code> sous un
. < / code> clé. Donc, ce sera quelque chose comme
gestionnaires: \ n \ t syslog: \ n \ t \ t.: \ N \ t \ t id Imp: Appname code>.
Pour Python 2.7, vous pouvez faire quelque chose comme ceci: Ceci produira dans le syslog: p> Sep 3 16:28:53 HostName My [14]: Info: Bonjour World Code> P> P>
implémentations syslog acceptant Les messages RFC3164 doivent Reconnaître la première partie du message ( La partie MSG a deux champs appelés champ de balises et le contenu
champ. La valeur dans le champ Tag sera le nom du programme ou
processus qui a généré le message. p>
blockQquote> code python .. p> À son tour, le produit dans le journal de SystemD. P> "FOO:" code> dans l'exemple) comme étiquette.
{
..
"PRIORITY" : "3",
"SYSLOG_FACILITY" : "1",
"SYSLOG_IDENTIFIER" : "foo",
"MESSAGE" : "bar",
"_PID" : "1928",
}
C'est économiseur de vie