May the log be with… (IV… and it will go on)

…my mother


Hoy en el metro estaba un señor en los vagones pidiendo limosna para operarse las muñecas, ya que como él decía sufrió un accidente y no podía abrir las manos, por lo menos no sin mucho dolor. Yo me preguntaba: “Bueno pero si es asi ¿cómo diablos hace para recibir las limosnas?”…  menos mal que el señor no podía usar las muñecas porque creo que supo el porque de mi sonrisa mientras pasaba frente a mí. Enough inspiration!!!

Comparto eso porque he estado ocupado estas semanas, y es complicado encontrar tiempo para escribir sobre todo si en el resto de ese tiempo no haces nada, y luego consideras que escribir es una perdida de tiempo. Eso deprime las ganas de sentarse en frente del computador y tratar de redactar algo, sobre todo en mi caso porque espero poner algo de ironía y humor en todo este asunto, y eso ya es bastante complicado y la verdad no sé si lo logro. No sé que accidente sufrió el  señor que estaba en el metro, pero doy gracias porque por lo menos alcanzó para hacerme reír y aumentar las ganas de escribir un poco. So, go on with the log module.

La discusión del Módulo Log se ha distendido a causa de las obligaciones de cada quién, de hecho el desarrollo de ANGiE ha estado practicamente detenido, a no ser por las conversaciones que tiene cada grupo en sus tareas particulares para el motor, las cuales ocurren bien sea por Gtalk lo que hace más difícil la tarea de convencer al otro de que uno tiene la razón, o en los encuentros grupales que cada vez se están haciendo más raros, salvo por Mariana, Gabriel y yo que nos vemos semanalmente, y Gabriel y Juan Carlos que se ven en su lugar de trabajo. Aún así acá les traigo una breve explicación hecha por Henry que puede serles útil, la misma está acompañada de unos gráficos que pueden ser considerados los primeros Screen Shots de ANGiE. ¡¡¡VIVA!!!, ya la prosti sabe hacer digramas de flujo. Recuerden que es complicado para mí resumir todo lo que se ha discutido, así que estoy copiando y pegando mucho de la discusión, tratando de hacerlo lo más coherente posible.

Las ilustraciones anexas son en primer lugar un digrama de clases en las que se plantea como deberian colocarse las “vainas” (sic) para el logger, también hay 2 diagramas de secuencia para aclarar como se hacen las cosas en tiempo de ejecución.

 

Clases

Clases

Init

Init

Debug

Debug

 

Fíjense que el power point de Henry es muy bolivariano y no acepta ningún tipo de palabra en inglés.

Básicamente para crear un logger, el coder hace esta invocacion:

Logger& log = LogManager::getLoger(className);

Internamente el LogManager aplica el patrón Builder, es decir, ensambla el Logger y no los devuelve.

Durante la carga, el LogManager lee la configuración de un XML y va creando los Appenders y los Layout’s que va encontrando durante cada evento generado por el Parser (por supuesto, el XML de configuración debe estar bien formado según un DTD, sino el Parser debe rechazarlo).

Cuando encuentra un nodo Logger, el LogManager registra en una tablilla que esa combinacion Appender/Layout está disponible para esa clase en particular (como ya tiene creados el Appender y el Layout por separado, LogManager actua como una especie de Builder y los ensambla en un Logger que seria el producto). Luego, el coder usa el método debug|warn|fatal|error tranquilamente, pero en realease, tenemos el modificador inline, que nos transformará magicamente esos métodos en cuerpos vacíos y sin vida (MUA JAJAJAJAJA, risa malevola) [ndr- Es así de marico en el original].

Dentro de la clase Logger podemos usar cualquier cosa para el logging, incluso podríamos instanciar al logger de log4cpp y listo. Pero, teniendo la clase Logger como capa protectora, hacer modificaciones internas no afectarian nuestro código (yiiiipiii)   [ndr- Y SIGUE LA MARIQUERA, o Henry practica para cuando tenga que fingir orgasmos con viejas encopetadas,  feas y arrugadas que le paguen por sus servicios de gigoló, un plan B pues] 

También podemos crear otros Loggers derivados del Logger inicial, claro, esto es en caso de que sea necesario mejorar el código del Logger sin tocar el primero, aunque esto es un escenario hipotético.

Podríamos usar el truco de las plantillas con herencia [ndr- cuando lo sepa aclararé cual es ese truco] para crear la clase Logger como una clase abstracta sin usar funciones virtuales puras! Y asi SÍ podriamos declarar Logger como una interfaz ILogger con métodos abstractos (sería el tacazo de la elegancia innecesaria) [ndr- sería como entrar con un candelabro y velas de esas que se usan en cenas románticas a un burdel en la Av. Baralt].

Es obvio que se quedan cosas por fuera, de hecho hay bastante código escrito que por ahora no sé si estoy en potestad de compartirlo.

Me cuesta escribir todavía, pero el otro día ví en el metro un señor algo mayor que le regalaba 20 lucas a una niñita en brazos de una mujer que se notaba de bajos recursos, pero sinceramente yo no sé si era un acto de caridad o estaba apartando cupo para cuando la niñita cumpliera 18 años y con toda seguridad tuviera que prostituirse. Menos mal que nadie notó que me reía. SÍ, mírenme feo, ese es el tipo de cosas que pienso para luego escupirlas en este blog… by the way: as you can see, the sub is actually getting funny this days.

4 comentarios para “May the log be with… (IV… and it will go on)”

  1. Jorge Bernadas Dijo:

    Epac a todos.

    El diseño está fino :) . Sólo un detalle, es mejor hacer que en Release también funcionen los métodos para loggear cosas, y usar otra macro diferente para deshabilitarlos y volverlos inline (DISABLE_ALL_LOGGING, NO_LOGGING, FTW_LOGGING, etc.), ya que a veces (demasiadas veces) es útil loggear cosas en modo Release (sobre todo cuando el bug sólo se manifiesta en Release).

  2. Gabriel Dijo:

    jajaja eso sono demasiado a tu tesis, no? … no es mala idea, voy a comentarselo a los muchachos cuando nos reunamos.

  3. nicolailobachevscki Dijo:

    JORGEEEEEEEEEEEEEEEEEEEE!!!!!!!!!!!!!

  4. Juan Carlos De Abreu Dijo:

    Creo que la idea de Jorge es buena.

    nicolailobachevscki creo que es mejor que no publiques por ahora código, mientras vemos a donde va esto…

Escribe un comentario