Logique

Logement peu orthodoxe pour Python
Télécharger maintenant

Logique Classement & Résumé

Publicité

  • Rating:
  • Licence:
  • BSD License
  • Prix:
  • FREE
  • Nom de l'éditeur:
  • Michal Hordecki
  • Site Internet de l'éditeur:
  • http://github.com/MHordecki

Logique Mots clés


Logique La description

Lancement peu orthodoxe pour Python Logpy est une alternative pour les installations de fortage de python standard, sur la base de la log5 de LISP. Il est basé sur les principes du baiser - par conséquent, je voulais que cela soit aussi très transparent que possible. La principale différence par rapport à la journalisation de STDLIB est une architecture basée sur des balises. Dans la journalisation, chaque journal a attribué un certain niveau (qu'il s'agisse de débogage, d'erreur, etc.). C'est tout. Logpy, d'autre part, étiquettes de sport - vous pouvez attacher des chaînes courtes à chaque message. La balise peut représenter la variété de choses: niveau de gravité, nom du module ou une catégorisation de journal personnalisé.Logpy nécessite Python 2.6 ou plus. Cela fonctionne de manière transparente sur Python 3 (en fait, il est développé avec py3k à l'esprit puis rééquilibré à Python 2.6) .Gutation de la logie de Python 2.6) est morte Simple: De Logpet Import Logyimport Syslog = logpy () log.add_output (SYS.S.SDERR.WROITE ) Log ('Débogou') ('Hello World!') Voila! Les instances logiques sont appelables. Pour générer un journal, un journal d'appel "Deux fois" - Dans le premier appel, passez toutes les étiquettes du journal, et tout est passé sur le second sera considéré comme une partie du message. L'exemple de sortie des journaux à la sortie d'erreur standard. Facile, n'est-ce pas? Sous la Hoodlogpy a quelques couches d'abstraction: 1. Logpy - il accepte les données de l'utilisateur, les combine dans une instance de message et les transmet à toutes les sorties. 2. Sortie - Il filtre les messages basés sur certaines conditions prédéfinies et si le message les transmet tous, il est formaté par le formateur puis transmis à la sortie réelle. 3. Formatter - prend le message et le format;) (En implémentation standard, il utilise String.Format pour le travail). 4. Sortie réelle - A appelant que, par exemple, émet la sortie du formateur à l'écran.Tous ces couches / objets sont des callables.common TasksPlus de filtrage avec plusieurs sorties, vous souhaitez probablement filtrer quelques journaux dans chacun d'eux. Il y a une prise en charge: log = logpy () log.add_output (my_output, filtre = lambda m: 'Erreur' in m.tags) # équivalent à: log.add_output (my_output, filtre = ) Comme vous pouvez le constater, les filtres sont des appelables, prenant un objet de message comme argument et renvoyant BOOL. Plusieurs filtres peuvent être fournis par une liste de formatage de liste.Customyou peuvent personnaliser le formatage en remplaçant la chaîne de format ou en remplaçant l'objet de formatage tout à fait. Votre choix.custom Format StringThis on répondra à 90% de vos besoins. Vous pouvez modifier votre chaîne de format avec l'argument des mots clés sur la méthode add_output de logPy (également possible lorsque vous instantirez directement des objets de sortie): log.add_output (..., format = 'ma chaîne de format personnalisé!') Lors du traitement d'un message, format de méthode de la chaîne sera appelée avec suivant, arguments prédéfinis: * Date - Object DateTime * Tags - Liste de tags (String) * Args - Liste des arguments dans le message * KWARGS - dict de mots-clés Arguments dans le message * Message - l'objet de message réel. Tous les arguments ci-dessus sont en réalité juste un sucre syntaxique, car ils sont tous des attributs de cet objet.default Format String ressemble à ceci: {date}: {tags}: {args} {kwargs} \ NDon oubliez de mettre une nouvelle ligne à L'extrémité, ou vos journaux auront l'air criblé. Travelage avec plusieurs modulesVous pouvez vous aider tout en utilisant logpy avec plusieurs modules en prédéfinant certaines des balises: # Main Modulelog = logpy () # Enfant ModuleIlport MainModulelog = MainModule.log ('Module: ChildModule ', Curry = TRUE) # NOW: LOG ("Débogou") (' Hello World! ') # est équivalent Tolog ("Module: ChildModule'," Débogou ") ('Hello World') Objet de format personnalisé Vous voulez Puissance complète - Vous pouvez vous débarrasser de la formule par défaut: log.add_output (..., format = my_formatter_Object) Les objets des formateurs doivent être conformes au protocole simple: formateur de classe: def __Call __ (message: message) -> Message raisonnable: Passclass Message : tags = set (str) args = [] # transmis par l'utilisateur kwargs = {} # transmis par la date de l'utilisateur = DateTime.dateTime (je n'ai aucune idée de wh ATSoever s'il y a une notation formelle standard pour décrire les protocoles de Python à part, des choses comme Zope.interface. J'espère que mes ramblings sont clairs.) Où quelque chose de raisonnable signifie: tout ce qui sera accepté par la sortie de la sortie (sonne un peu stupide) - il signifie généralement Str, mais pas toujours.custom OBJECTIF Vous êtes prêt à réduire 50% du lock de Logpy, n'hésitez pas à le faire: log.add_raw_output (my_customized_output_Object) mérite d'être mentionné est le fait que logpy.add_output est juste une enveloppe pour: log.add_output (...) # équivalent tolog.add_raw_output (sortie (. ..)) Le protocole de sortie est comme suit: Sortie de classe: DEF __CALL __ (Message: Message): Passin Autres mots: Vous serez appelé avec chaque journal émis par l'utilisateur.Note: Veuillez traiter les messages comme objets immuables - ils sont en train d'être réutilisé pour toutes les sorties.thread Safetylogpy utilise une certaine sécurité de fil de base; Un threading.lock est utilisé dans __Call__ méthode de logie. Il peut être facilement remplacé: à partir de la filetage Importation RLOCKLOG = logpy () log.lock = ROCK () Exigences: · Python


Logique Logiciels associés