Twiggy es un proyecto en fase inicial de construir un paquete de registro más Pythonic. Uso: Hacer el trabajo de visualización: >>> import sys; sys.stderr = sys.stdout La configuración es sencilla En su main.py: >>> Twiggy importación >>> Twiggy.quick_setup () mensajes de registro >>> From twiggy import * Interfaz principal es el registro de la magia: >>> Ingrese #doctest: + ELLIPSIS Funciona fuera de la caja, con niveles estándar: >>> Log.DEBUG ('Usted no puede cuidar') DEBUG: Es posible que no les importa >>> Log.error ("OMFG! Pantalones en el fuego! ') ERROR: OMFG! Pantalones en el fuego! Es compatible con una variedad de cadenas de formato, el impago de nuevo estilo: >>> Log.info ('me pongo {0} en mi {donde}', 'pantalones', donde = 'piernas') INFO: me pongo los pantalones en las piernas Viejo estilo funciona bien sin embargo: >>> Log.options (style = 'ciento'). Info ('Me gusta% s', "bicicletas") INFO: Me gustan las bicicletas Como hacer las plantillas: >>> Log.options (style = "dólar"). Info ('$ lo kill', lo que = 'Cars') INFO: Coches matan Usted puede nombrar a sus registradores: >>> Mylog = log.name ('Alfredo') >>> Mylog.debug ('hola') DEBUG: alfredo: hola Pero el nombre no tiene ninguna relación con el objeto; es sólo para uso humano: >>> Mylog es log.name ('Alfredo') Falso Mensajes emiten Emisores están débilmente acoplados: >>> Twiggy.emitters #doctest: + ELLIPSIS {'*': } Puede establecer un min_level sobre emisores: >>> twiggy.emitters ['*']. min_level = twiggy.Levels.INFO >>> Log.DEBUG ("Ayuda, ayuda que estoy siendo suprimido") >>> Log.info ("Aún no estoy bien muerto") INFO: Yo todavía no estoy del todo muerto Puedes realizar un filtrado de expresiones regulares, o con funciones arbitrarias: >>> twiggy.emitters ['*']. filtro = ". * pantalones. *" >>> Log.info ("Tengo mi {0} del", "pantalones") INFO: Consiguió mis pantalones >>> Log.info ("Tengo mi {0} en", "camisa") Vamos a restablecer todos que: >>> twiggy.emitters ['*']. filtro = True >>> twiggy.emitters ['*']. min_level = twiggy.Levels.DEBUG Mejor salida Nuevas líneas se suprimen de forma predeterminada; que se puede apagar por mensaje: >>> Log.info ('user ninput nannoys nus') INFO: user ninput nannoys nus >>> log.options (suppress_newlines = false) .info ("nosotros ndeal ') INFO: nosotros acuerdo Las excepciones son prefijados. También se puede pasar exc_info. Utilice ' n' como prefijo para doblar en una sola línea: >>> Try: ... 1/0 ... Excepto: ... Log.trace ('error') advertencia ("¡Oh no ') #doctest.: + ELLIPSIS ADVERTENCIA: oh noes TRACE Rastreo (la mayoría de llamadas recientes última): TRACE Archivo "", la línea 2, en TRACE 1/0 TRACE ZeroDivisionError: división entera o módulo por cero Método encadenamiento Me gusta este estilo encadenado mucho. >>> Log.name ('benito'). Info ('hola') INFO: benito: hola Hace que la tala estructurada fácil: >>> log.fields (caminos = 42) .info ("Salir a caminar ') INFO: caminos = 42: Salir a caminar Atajo. Excelente para la recopilación de estadísticas en tiempo de ejecución. >>> Log.struct (caminos = 42, delfines = 'agradecido') INFO: delfines = agradecidos: caminos = 42: Parcial de unión puede ser útil para aplicaciones web: >>> Per_request_log = log.fields (request_id = '12345') >>> Per_request_log.fields (filas = 100, el usuario = 'frank'). Info ('frobnicating base de datos') INFO: request_id = 12345: filas = 100: user = franca: la base de datos frobnicating >>> per_request_log.fields (bytes = 5678) .info ('enviar la página sobre los tubos') INFO: bytes = 5678: request_id = 12345: enviar la página sobre los tubos Encadenado estilo es impresionante: >>> Campos log.name ('donjuan'). (Pantalones = 'sexy'). Info ("hola, {que} {quieren lo}?", Que = 'señoras, lo =' baile ') INFO: donjuán: pantalones = sexy: hola, señoras quieren bailar? Dynamic! Cualquier función en args / campos son llamados y el valor sustituidas: >>> os importación >>> From twiggy.lib thread_name importación >>> Thread_name () 'TrenzadoPrincipal' >>> log.fields (pid = os.getpid) .info ("Estoy en el hilo de {0}", thread_name) #doctest: + ELLIPSIS INFO: pid = 1076: Estoy en TrenzadoPrincipal hilo Esto puede ser útil con los madereros en parte con destino a, que vamos a hacer algunas cosas interesantes: >>> ThreadTracker clase (objeto): ... Def __init __ (self, obj): ... Self .__ obj = obj ... # Un registrador parcialmente atado ... Self .__ log = log.name ("seguimiento"). Campos (obj_id = id (obj), hilo = thread_name) ... Self .__ Log.DEBUG ("comenzó el seguimiento") ... Def __getattr __ (self, attr): ... Self .__ Log.DEBUG ("visitada {0}", attr) ... Volver getattr (self .__ obj, attr) ... >>> Clase Bunch (objeto): ... Pasar ... >>> Foo = Bunch () >>> Foo.bar = 42 >>> Rastreado = ThreadTracker (foo) DEBUG: perseguidor: obj_id = 14063980: hilo = TrenzadoPrincipal: comenzó el seguimiento >>> Tracked.bar DEBUG: perseguidor: obj_id = 14063980: hilo = TrenzadoPrincipal: bar visitada 42 >>> Enhebrado de importaciones >>> T = threading.Thread (target = lambda: tracked.bar * 2, name = "TheDoubler") >>> T.Start () DEBUG: perseguidor: obj_id = 14063980: hilo = TheDoubler: bar visitada Si usted realmente desea registrar un exigible, repr () o envolverlo en lambda. Optimizaciones Como una optimización, un min_level se puede establecer en los madereros: >>> Mylog.min_level = twiggy.Levels.INFO >>> Mylog.info ("Usted ve esto") INFO: alfredo: Usted ve esto >>> Mylog.debug ("Esto es oculto") También tienen un filtro que opera en format_spec. El caso de uso se está cerrando de manera eficiente fuera mensajes específicos en una biblioteca que está haciendo algo estúpido: >>> Mylog.filter = lambda s: "chanchullos" no en s >>> Mylog.info ("Inicio estupidez") INFO: alfredo: estupidez partir >>> For i in xrange (3): # para valores grandes de 3 ... Mylog.info ("Me llaman travesuras!") >>> Mylog.info ("End estupidez") INFO: alfredo: Fin estupidez
Requisitos
11 May 15
Comentarios que no se encuentran