Package: zpp-logs
zpp-logsInformationsModule pour la gestion des logs (Ã  l'image de logging) avec des tuning personnalisÃ©s par niveau de logsPrÃ©requisPython 3Installationpip install zpp-logsUtilisationLoggerUn logger est un objet qui permet de dÃ©finir des options (handler, formatter, filter) pour un log.fromzpp_logsimportLoggerlog=Logger()Il est possible de lui donner en paramÃ¨tre un fichier de configuration au format yaml pour configurer directement les diffÃ©rentes optionsfromzpp_logsimportLoggerlog=Logger(configfile='config.yaml')Exemple de fichier yaml:formatters:
    standard:
        format: "%(fore:deep_sky_blue_3a)%[%(date:%d/%m/%Y %H:%M:%S)%]%(attr:0)% - %(fore:medium_purple_4)%%(levelname)%%(attr:0)% - %(fore:grey_46)%%(msg)%%(attr:0)%"
    test:
        format: "%(epoch)% - %(msg)%"

filters:
    testfunc: test3.test

handlers:
    console:
        class: zpp_logs.Console_handler
        level: zpp_logs.CRITICAL
        ops: "<"
        formatter: test
        output: sys.stdout


logger:
    handlers: [console]
    filters: [testfunc]Dans un Logger, nous pouvons ajouter/supprimer des handler et des filtres, afficher le compteur de log et appeler les mÃ©thodes de log.
Toutes ces options sont dÃ©taillÃ©es dans la suite.HandlerDiffÃ©rents handler sont disponibles pour permettre d'envoyer les logs dans la console, dans un fichier ou par mail.
Tous les handler disposent des mÃ©thodes:setFormatter()pour ajouter un formattercons.setFormatter(form)la mÃ©thode attend un objet FormattersetLevel()pour dÃ©finir le niveau de log Ã  appliquercons.setLevel(zpp_logs.DEBUG)la mÃ©thode attend un niveau de logs.
Il est possible de lui envoyer un argument ops pour dÃ©finir le comportement du handler. (Par dÃ©faut ==)cons.setLevel(zpp_logs.ERROR,ops="<=")le ops permet de comparaison pour trigger le handler. Dans l'exemple du dessus, le handler se dÃ©clenche si le log est de niveau ERROR ou infÃ©rieur.addFilter()pour ajouter un filtre.
Le filter est soit un script (qui peut Ãªtre une regex), soit une fonction (dans ce cas, le filter attends un retour True pour se dÃ©clencer)deftest(message):if"bjr"inmessage:returnTruereturnFalsecons.addFilter(MonModule.test)removeFilter()pour supprimer un filtre.
Cette mÃ©thode permet de supprimer un filtre configurÃ©Console_handlerUn Console_handler permet d'envoyer des messages dans la console.
Par dÃ©faut, le handler n'attend pas de paramÃ¨tre mais peut recevoir:output: pour dÃ©finir la destination (Par dÃ©faut sys.stdout)level: pour dÃ©finir le niveau de logs attendu (Par dÃ©faut NOTSET)ops: pour dÃ©finir le comportement du handler. (Par dÃ©faut ==) (Voir setLevel)log=Logger()cons=Console_handler()log.add_handler(cons)File_handlerUn File_handler permet d'envoyer des messages dans un fichier.
Par dÃ©faut, le handler attend le chemin du fichier de destination. (Peut recevoir un nom de fichier dynamique avec la syntaxe des formatter)Il peut aussi recevoir:rewrite: pour dÃ©finir si le handler rÃ©Ã©crit sur un fichier existant (Par dÃ©faut False)level: pour dÃ©finir le niveau de logs attendu (Par dÃ©faut NOTSET)ops: pour dÃ©finir le comportement du handler. (Par dÃ©faut ==) (Voir setLevel)log=Logger()cons=File_handler('content.log')log.add_handler(cons)RotateFile_handlerUn RotateFile_handler permet d'envoyer des messages dans un fichier en prenant en charge une rotation de logs en fonction d'une taille max.
Par dÃ©faut, le handler attend le chemin du fichier de destination. (Peut recevoir un nom de fichier dynamique avec la syntaxe des formatter)Il peut aussi recevoir:rewrite: pour dÃ©finir si le handler rÃ©Ã©crit sur un fichier existant (Par dÃ©faut False)level: pour dÃ©finir le niveau de logs attendu (Par dÃ©faut NOTSET)ops: pour dÃ©finir le comportement du handler. (Par dÃ©faut ==) (Voir setLevel)maxBytes: pour dÃ©finir la taille max du fichier de logbackupCount: pour dÃ©finir le nombre maximum de fichier de log. Si la limite est atteinte, il supprime le fichier le plus ancien.log=Logger()cons=RotateFile_handler('content.log')log.add_handler(cons)SMTP_handlerUn SMTP_handler permet d'envoyer des messages par mail.
Par dÃ©faut, le handler attend les paramÃ¨tres:smtphost: l'ip ou l'adresse du serveur SMTP sous forme de str. PossibilitÃ© de lui envoyer un tuple pour dÃ©finir le port Ã  utiliser (HOST, PORT)fromaddr: l'adresse mail de l'expÃ©diteur sous forme de strtoaddrs: la/les adresses mail des destinataires sous forme de str pour un destination ou une liste pour plusieurssubject: l'objet du mail (Peut recevoir un objet dynamique avec la syntaxe des formatter)Il peut aussi recevoir:credentials: pour dÃ©finir les login de connexion sous forme de liste ou tuple (USERNAME, PASSWORD)secure: pour dÃ©finir si la connexion doit Ãªtre sÃ©curisÃ©e (Par dÃ©faut None)timeout: pour dÃ©finir le temps timeout pour la rÃ©ponse du serveur SMTP (Par dÃ©faut 5.0)level: pour dÃ©finir le niveau de logs attendu (Par dÃ©faut NOTSET)ops: pour dÃ©finir le comportement du handler. (Par dÃ©faut ==) (Voir setLevel)log=Logger()cons=SMTP_handler(smtphost='smtp.local.com',fromaddr='private@local.com',toaddrs=['user1@gmail.com','user2@gmail.com'],subject="Test de notification")log.add_handler(cons)FormatterUn formatter est un objet qui permet de dÃ©finir le format du message de log envoyÃ©
Dans un formatter, les trigger doivent Ãªtre de la forme%(trigger_name)%Si on veut formater un peu de texte pour aligner les logs, on peut dÃ©finir un padding en ajoutant la taille avec le 2Ã¨me %
Par exemple,%(trigger_name)5%Voici la liste des trigger disponiblesNameDescriptionasctimeDate au format %d/%m/%Y %H:%M:%S:%fdate: strftime_formatDate dans le format qu'on veutepochDate au format epochexc_infoRÃ©cupÃ©ration du tracebacklevelnameNom du niveau de loglevelnoID du niveau de logmsgMessage de logfilenameNom du fichier d'exÃ©cutionfilepathRÃ©pertoire parent du fichier d'exÃ©cutionlinenoNumÃ©ro de la ligne du fichier d'exÃ©cutionfunctnameNom de la fonctionpathChemin actuelprocessNom du processprocessidPID du processusernameNom d'utilisateur qui exÃ©cute le scriptuiduid de l'utilisateur qui exÃ©cute le script (only linux)os_nameNom de l'OSos_versionVersion de l'OSos_archiArchitecture de l'OSmem_totalCapacitÃ© max de RAMmem_availableCapacitÃ© disponible de RAMmem_usedCapacitÃ© utilisÃ©e de RAMmem_freeCapacitÃ© disponible de RAMmem_percentCapacitÃ© utilisÃ©e de RAM en pourcentageswap_totalCapacitÃ© max de Swapswap_usedCapacitÃ© utilisÃ©e de Swapswap_freeCapacitÃ© disponible de Swapswap_percentCapacitÃ© utilisÃ©e de Swap en pourcentagecpu_countNombre de core physiquecpu_logical_countNombre de core logiquecpu_percentPourcentage de CPU utilisÃ©current_disk_deviceNom du disque oÃ¹ se trouve le scriptcurrent_disk_mountpointPoint de montage du disque oÃ¹ se trouve le scriptcurrent_disk_fstypeFormat du disque oÃ¹ se trouve le scriptcurrent_disk_totalCapacitÃ© max du disque oÃ¹ se trouve le scriptcurrent_disk_usedCapacitÃ© utilisÃ©e du disque oÃ¹ se trouve le scriptcurrent_disk_freeCapacitÃ© disponible du disque oÃ¹ se trouve le scriptcurrent_disk_percentCapacitÃ© utilisÃ©e en pourcentage du disque oÃ¹ se trouve le scriptfore: colorCouleur de la police d'Ã©critureback: colorCouleur du fond de la police d'Ã©critureattr: attributeStyle de la police d'Ã©criturePour son utilisation, il suffit de crÃ©er un objet Formatter et de l'ajouter dans un handler.fromzpp_logsimportLogger,Formatter,Console_handlerlog=Logger()form=Formatter("%(fore:deep_sky_blue_3a)%[%(date:%d/%m/%Y %H:%M:%S)%]%(attr:0)% - %(fore:medium_purple_4)%%(levelname)%%(attr:0)% - %(fore:grey_46)%%(msg)%%(attr:0)%")cons=Console_handler()cons.setFormatter(form)Envoi des logsLes mÃ©thodes pour envoyer des logs se dÃ©clinent en 7 niveaux:log(message): zpp_logs.NOTSETgood(message): zpp_logs.GOODdebug(message): zpp_logs.DEBUGinfo(message): zpp_logs.INFOwarning(message): zpp_logs.WARNINGerror(message): zpp_logs.ERRORcritical(message): zpp_logs.CRITICALCes mÃ©thodes peuvent Ãªtre appelÃ©es soit en direct, soit depuis un logger.fromzpp_logsimportLoggerlogger=Logger(configfile="config.yaml")logger.warning("Test de logs")Compteur des logsIl est possible de rÃ©cupÃ©rer un dictionnaire contenant le compteur des logs envoyÃ©s par un logger.>>>logger.count(){'CRITICAL':0,'ERROR':0,'WARNING':1,'INFO':0,'GOOD':0,'DEBUG':0,'NOTSET':0}