9
votes

Comment définir la chaîne d'identification lorsque vous utilisez Logging.SysLoghandler à Python 2.6?

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)

Tout cela fonctionne parfaitement bien et je vois mes entrées de journalisation dans /var/log/user.log

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é.

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é.


0 commentaires

4 Réponses :


4
votes

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".

Je suis surpris que vous obtenez cela à l'aide de sysloghandler 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 suivi du message formaté et d'un octet nul. Il n'y a pas de chaîne d'identification spécifiée par sysloghandler , car il n'utilise pas l'API Syslog (qui possède des problèmes de sécurité thread-sécurité dans certaines versions, IIRC).


3 commentaires

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 pour fournir la mise à jour.



9
votes

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 id. / Code> précisément à cette fin; La valeur par défaut est ''.

exemple: xxx


2 commentaires

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 à partir d'un fichier YAML, la façon dont vous définissez Ident est en mettant la touche Ident sous un . < / code> clé. Donc, ce sera quelque chose comme gestionnaires: \ n \ t syslog: \ n \ t \ t.: \ N \ t \ t id Imp: Appname .



2
votes

Pour Python 2.7, vous pouvez faire quelque chose comme ceci: xxx

Ceci produira dans le syslog:

Sep 3 16:28:53 HostName My [14]: Info: Bonjour World


0 commentaires

8
votes

implémentations syslog acceptant Les messages RFC3164 doivent Reconnaître la première partie du message ( "FOO:" code> dans l'exemple) comme étiquette.

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> xxx pré>

À son tour, le produit dans le journal de SystemD. P>

{
  ..
  "PRIORITY" : "3",
  "SYSLOG_FACILITY" : "1",
  "SYSLOG_IDENTIFIER" : "foo",
  "MESSAGE" : "bar",
  "_PID" : "1928",
}


1 commentaires

C'est économiseur de vie