Bonjour à tous,
Je vous propose une petite introduction au logger Python: http://deusyss.developpez.com/tutoriels/Python/Logger/
Voir aussi les Cours et tutoriels pour apprendre la programmation Python
N'hésiter pas à commenter
Bonjour à tous,
Je vous propose une petite introduction au logger Python: http://deusyss.developpez.com/tutoriels/Python/Logger/
Voir aussi les Cours et tutoriels pour apprendre la programmation Python
N'hésiter pas à commenter
Bonne initiative
J'ai modifié le titre et j'ai rajouté la balise qui va bien. J'ai aussi déplacer dans le sous-forum "Contribuez". Je présume que ton article sera bientôt en actualité ?
En lisant, je suis tombé sur une petite faute :
J'aurais écrit logguée.Le résultat de cette structure est que nous pouvons gérer de manière très fine la redirection de chaque information logger.
Je ne suis pas complètement convaincu par la séparation en fonction des niveaux dans différents fichiers :
Tu le dis très justement : cela complique l'analyse du déroulement. A mon humble avis, il est plus efficace de faire un seul fichier de log complet. Ensuite, on écrit des scripts pour traiter ce log. Avec grep par exemple, il est très simple d'extraire les messages critiques dans leur propre fichier ou de filtrer les messages d'un niveau qui n'intéresse pas. Une idée plus intéressante dans une telle séparation est faire un fichier avec tous les logs et d'avoir un handler spécial pour les critiques mais plutôt que ce soit un FileHandler, ce serait un STMPHandler pour envoyer un mail à la personne qui est d'astreinteLe but est de compartimenter les messages afin d'en faciliter le traitement. Cette solution possède néanmoins un inconvénient de taille : si vous désirez mieux comprendre le déroulement des opérations ayant entraîné l'anomalie, vous êtes obligé de jouer avec plusieurs logs au lieu d'un seul.
Par ailleurs, sans tester et juste en lisant, j'ai l'impression que ton code ne sépare pas exactement les logs par niveau : il fait un fichier pour les critiques et un fichiers pour tout sauf debug. Non ?
Oui la demande est en cours.
Effectivement, personellement, je prefere un seul fichier. Mais d'autres personnes prefere des logs séparés, donc c'était important de l'expliquer. Sinon pour les mails, c'est quelque chose que je ne désirais pas aborder dans cet article car je visais le tout public, et même si en Python ce n'est pas compliqué, ce n'est quand même pas à la portée du débutant.
Sinon, si si, il y a bien un filtrage, avec creation de deux fichiers. Tout d'abord le logger filtre au niveau info, ensuite chaque filehandler filtre à son niveau, info et critique.
Je comprends que tu ne souhaitais pas aborder dans ce cours le cas des envois de mails. Je raisonnais ici uniquement sur un plan "métier" et non un plan "contenu du cours".
Quand tu fais ça, le handler écrit dans le fichier tous les messages de niveaux INFO et plus ou juste ceux de niveau INFO ?handler_info.setLevel(logging.INFO)
@Bktero
Sur un plan metier effectivement, je te rejoint à 3000%. Passer un certains seuil, il faut un envoi automatique de mail afin de pouvoir intervenir au plus vite et limiter les degats, surtout si les chaines tournent de nuit ou le week end.
Du côté de ta question, j'en voit un qui a pas bien lu a fond le tuto .
La reponse est dans le II-B: "Comme nous pouvons le constater, lorsqu'on définit un niveau, correspondant en réalité à un seuil de sensibilité, nous loggons ce niveau ainsi que tous les niveaux supérieurs de criticité". Dans les faits, mais je ne suis jamais monté à ce niveau par manque de besoin, je pense qu'il est possible de définir un niveau bas (ce qu'on fait dans le tuto) et un niveau haut, car tel qu'est tourné la documentation officielle on a l'impression qu'il est sous entendu qu'on peut définir un seuil maximal. Peu etre pour un futur article
Ma formulation sera éventuellement incorrecte et incompréhensible car approximative.
Est-il possible de descendre à un niveau bas dans le language, non pas pour journaliser mais pour répliquer/neutraliser avec l'envoi de courriels ?
Bravo pour le tutoriel surtout.
Salut,
Evidemment tout dépend de ce que tu appelle bas niveau. J'aovue ne pas parfaitement comprendre ton exemple. Pourrais tu détailler s'il te plait?
Salut,
Chaque matériel dispose d'une carte d'identité flashable. Y compris à l'intérieur d'un quelconque produit. BSD comme GRUB s'appuie dessus. Afin d'obtenir un paramétrage plus fin, est-il possible d'expulser les hors domaine autant en intra qu'en extra.
L'objectif particulier reste de mettre à l'écart les écoutes.
L'objectif généraliste réside en la réduction de la surface d'attaque par prévention.
En espérant que mettre mon projet à jour de manière aussi précise restera bénéfique à tous.
Alors du coup descendre aussi bas j'avoue ne pas pourvoir te répondre.
J'aurais tendance à penser que Python peut le faire à travers d'autre outil mais pas directement. Après, il s'agit surtout de mon avis personnel, sans recherches effectuées.
J'attendais ce type de tutoriel depuis plusieurs années. Je ne parle pas que pour Python, mais aussi sur Qt car un serveur de log à qui toutes les instances peuvent envoyer des traces est l'outil indispensable.Que ce soit en développement, ou en utilisation pour du Debug post mortem par exemple.Même si je passe plus de temps en C++, Python reste un langage de choix et du coup j'ai appris pas mal de choses au delà du simple logging que je faisait.Merci.
A noter d'ailleurs les API de base de Java, dans java.util.logging, sont très proches et on retrouve les mêmes concepts (voire les mêmes noms de classes) qu'avec PythonJe ne parle pas que pour Python
Une suite vraiment sympa serait un analyseur des logs générés pour faire de l'analyse post mortem :
- * pouvoir afficher les logs générés (soit avec fichier unique, soit en concaténant les fichiers si nécessaire)* avoir la coloration syntaxique customisable* pouvoir filtrer les données d'un log : n'afficher que les message de niveau error, ou que warning, etc...
Merci pour le tuto, très intéressant
Petite question, c'est pour Python 2 ou 3 ? ou les 2 ?
Merci beaucoup pour tous ces retours. Le tuto à l'air de plaire et tant mieux.
Alors pour repondre à la question, cela fonctionne aussi bien avec Python 2 que 3.
Partager