Je ne peux pas comprendre le logging
module de Python . Mes besoins sont très simples: je veux juste tout enregistrer dans syslog. Après avoir lu la documentation, j'ai créé ce script de test simple:
import logging
import logging.handlers
my_logger = logging.getLogger('MyLogger')
my_logger.setLevel(logging.DEBUG)
handler = logging.handlers.SysLogHandler()
my_logger.addHandler(handler)
my_logger.debug('this is debug')
my_logger.critical('this is critical')
Mais ce script ne produit aucun enregistrement de journal dans syslog. Qu'est-ce qui ne va pas?
Réponses:
Changez la ligne en ceci:
Cela fonctionne pour moi
la source
'/var/run/syslog'
est la bonne chose sur OS X.logging.Formatter(fmt='myscriptname[%(process)d]: %(levelname)s: %(message)s', ...)
, une condition rsyslog comme$programname == 'myscriptname'
works.Vous devez toujours utiliser l'hôte local pour la journalisation, que ce soit vers / dev / log ou localhost via la pile TCP. Cela permet au démon de journalisation système entièrement compatible RFC et fonctionnel de gérer le syslog. Cela élimine la nécessité pour le démon distant d'être fonctionnel et fournit les capacités améliorées des démons syslog tels que rsyslog et syslog-ng par exemple. La même philosophie vaut pour SMTP. Il suffit de le remettre au logiciel SMTP local. Dans ce cas, utilisez le «mode programme» et non le démon, mais c'est la même idée. Laissez le logiciel le plus performant le gérer. Une nouvelle tentative, une mise en file d'attente, une mise en file d'attente locale, l'utilisation de TCP au lieu d'UDP pour syslog et ainsi de suite deviennent possibles. Vous pouvez également [re] configurer ces démons séparément de votre code comme il se doit.
Enregistrez votre codage pour votre application, laissez d'autres logiciels faire leur travail de concert.
la source
J'ai trouvé le module syslog pour faciliter l'obtention du comportement de journalisation de base que vous décrivez:
Il y a d'autres choses que vous pourriez faire aussi, mais même les deux premières lignes vous permettront d'obtenir ce que vous avez demandé si je comprends bien.
la source
En assemblant des éléments d'ici et d'autres endroits, c'est ce que j'ai trouvé qui fonctionne sur unununtu 12.04 et centOS6
Créez un fichier
/etc/rsyslog.d/
qui se termine par .conf et ajoutez le texte suivantRedémarrez
rsyslog
, le rechargement ne semble PAS fonctionner pour les nouveaux fichiers journaux. Peut-être qu'il ne recharge que les fichiers de configuration existants?Ensuite, vous pouvez utiliser ce programme de test pour vous assurer qu'il fonctionne réellement.
la source
sudo service rsyslog restart
J'ajoute un petit commentaire supplémentaire au cas où cela aiderait quelqu'un parce que j'ai trouvé cet échange utile mais j'avais besoin de ce petit supplément d'informations pour que tout fonctionne.
Pour vous connecter à une installation spécifique à l'aide de SysLogHandler, vous devez spécifier la valeur de la fonction. Disons par exemple que vous avez défini:
local3.* /var/log/mylog
dans syslog, vous voudrez alors utiliser:
handler = logging.handlers.SysLogHandler(address = ('localhost',514), facility=19)
et vous devez également avoir syslog à l'écoute sur UDP pour utiliser localhost au lieu de / dev / log.
la source
Votre syslog.conf est-il configuré pour gérer Facility = user?
Vous pouvez définir la fonction utilisée par le logger python avec l'argument facilité, quelque chose comme ceci:
la source
LOG_DAEMON
vous fournissez comme valeur pour lefacility
paramètre.SysLogHandler.LOG_DAEMON
.le script ci-dessus se connectera à l'installation LOCAL0 avec notre "LOG_IDENTIFIER" personnalisé ... vous pouvez utiliser LOCAL [0-7] à des fins locales.
la source
Depuis https://github.com/luismartingil/per.scripts/tree/master/python_syslog
la source
Voici la méthode yaml dictConfig recommandée pour la version 3.2 et les versions ultérieures.
Dans le journal
cfg.yml
:Chargez la configuration en utilisant:
Configuré à la fois syslog et un fichier direct. Notez que le
/dev/log
est spécifique au système d'exploitation.la source
Je le répare sur mon cahier. Le service rsyslog n'a pas écouté sur le service socket.
J'ai configuré cette ligne ci-dessous dans le
/etc/rsyslog.conf
fichier et j'ai résolu le problème:$SystemLogSocketName /dev/log
la source
Vous pouvez également ajouter un gestionnaire de fichiers ou un gestionnaire de fichiers rotatif pour envoyer vos journaux vers un fichier local: http://docs.python.org/2/library/logging.handlers.html
la source