<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Mariano Guerra's Log (Publicaciones sobre doodles)</title><link>http://marianoguerra.org/</link><description></description><atom:link href="http://marianoguerra.org/es/categories/doodles.xml" rel="self" type="application/rss+xml"></atom:link><language>es</language><lastBuildDate>Mon, 18 Nov 2024 17:56:23 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>mlog, logging for human beings</title><link>http://marianoguerra.org/es/posts/201108mlog-logging-for-human-beings/</link><dc:creator>Mariano Guerra</dc:creator><description>&lt;p&gt;siempre empiezo un modulo y empiezo a poner prints, pienso "tendría que usar logging", pero el hecho de no poder recordar como se configura un logger y tanta verbositud hace que siempre termine usando prints.&lt;br&gt;&lt;br&gt;peor cuando tengo que cambiar a logging tengo que leer la documentación y termino haciendo copy paste del código de los ejemplos.&lt;br&gt;&lt;br&gt;para eso cree un wrapper que me hace la vida mas simple en mis casos de uso simples.&lt;br&gt;&lt;br&gt;pego acá parte del readme del modulo (en ingles por fiaca a traducirlo).&lt;br&gt;&lt;br&gt;si les gusta el código esta acá:&lt;br&gt;&lt;br&gt;&lt;a href="https://github.com/marianoguerra/doodles/tree/master/python"&gt;https://github.com/marianoguerra/doodles/tree/master/python &lt;/a&gt;&lt;br&gt;&lt;br&gt;si ven algún error, problema o tienen alguna observación para hacer son bienvenidos, nunca termino de entender el modelo de logging ya sea en python o en java (el único que entiendo es console.log y console.error de js :D)&lt;br&gt;&lt;br&gt;acá va un ejemplo de uso:&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;pre&gt;import time
&lt;br&gt;import mlog
&lt;br&gt;&lt;br&gt;# create a logger for the console with default logging level, default format
&lt;br&gt;# and default everything (but nice defaults)
&lt;br&gt;log = mlog.console()
&lt;br&gt;# log some stuff
&lt;br&gt;log.info("hey!")
&lt;br&gt;log.warn("warning...")
&lt;br&gt;log.error("something went wrong! (no it didn't just testing log.error)")
&lt;br&gt;&lt;br&gt;# add a file handler to the logger we where using (see how I pass the logger?)
&lt;br&gt;# if I don't pass the logger instance I get a brand new logger that is
&lt;br&gt;# unrelated to the last one, but in this case I add a handler to the one I have
&lt;br&gt;mlog.file("mlog.log", logger=log)
&lt;br&gt;&lt;br&gt;# log some more stuff
&lt;br&gt;log.debug("I'm on a file now!")
&lt;br&gt;log.info("of course I'm on both")
&lt;br&gt;&lt;br&gt;# who wants file loggers without rotation?
&lt;br&gt;# I give you a nice notation to specify the rotation policy
&lt;br&gt;# add this handler to the logger I already have
&lt;br&gt;mlog.file("every-minute.log", when=mlog.every(1, mlog.MINUTE), logger=log)
&lt;br&gt;&lt;br&gt;log.info("im on a file that rotates every minute")
&lt;br&gt;&lt;br&gt;# give time so it rotates
&lt;br&gt;time.sleep(65)
&lt;br&gt;&lt;br&gt;log.info("65 seconds passed!")
&lt;br&gt;&lt;br&gt;# this is a new logger not related with the others
&lt;br&gt;# change the module name so it's not in the same hierarchy
&lt;br&gt;# as the other ones
&lt;br&gt;other_log = mlog.file("unrelated.log", name="test_mlog_1")
&lt;br&gt;&lt;br&gt;# log something
&lt;br&gt;other_log.info("unrelated logger is unrelated")&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;running it produces the following output (and files):&lt;br&gt;&lt;br&gt;&lt;pre&gt;$ python test_mlog.py
&lt;br&gt;[2011-08-12 11:44:30,491] test_mlog INFO: hey!
&lt;br&gt;[2011-08-12 11:44:30,491] test_mlog WARNING: warning...
&lt;br&gt;[2011-08-12 11:44:30,491] test_mlog ERROR: something went wrong! (no it didn't just testing log.error)
&lt;br&gt;[2011-08-12 11:44:30,492] test_mlog INFO: of course I'm on both
&lt;br&gt;[2011-08-12 11:44:30,492] test_mlog INFO: im on a file that rotates every minute
&lt;br&gt;[2011-08-12 11:45:35,491] test_mlog INFO: 65 seconds passed!
&lt;br&gt;&lt;br&gt;$ ls
&lt;br&gt;README.rst                              mlog.log                                test_mlog.py
&lt;br&gt;every-minute.log                        mlog.py                                 unrelated.log
&lt;br&gt;every-minute.log.2011-08-12_11-44       mlog.pyc
&lt;br&gt;&lt;br&gt;$ cat mlog.log
&lt;br&gt;[2011-08-12 11:44:30,491] test_mlog DEBUG: I'm on a file now!
&lt;br&gt;[2011-08-12 11:44:30,492] test_mlog INFO: of course I'm on both
&lt;br&gt;[2011-08-12 11:44:30,492] test_mlog INFO: im on a file that rotates every minute
&lt;br&gt;[2011-08-12 11:45:35,491] test_mlog INFO: 65 seconds passed!
&lt;br&gt;&lt;br&gt;$ cat every-minute.log
&lt;br&gt;[2011-08-12 11:45:35,491] test_mlog INFO: 65 seconds passed!
&lt;br&gt;&lt;br&gt;$ cat every-minute.log.2011-08-12_11-44
&lt;br&gt;[2011-08-12 11:44:30,492] test_mlog INFO: im on a file that rotates every minute
&lt;br&gt;&lt;br&gt;$ cat unrelated.log
&lt;br&gt;[2011-08-12 11:45:35,495] test_mlog_1 INFO: unrelated logger is unrelated
&lt;br&gt;&lt;/pre&gt;</description><guid>http://marianoguerra.org/es/posts/201108mlog-logging-for-human-beings/</guid><pubDate>Fri, 12 Aug 2011 13:58:00 GMT</pubDate></item></channel></rss>