Non avrei potuto dare un titolo migliore (o forse sì?) rispetto all'originale inglese: Why doesn't Logger behave the way the Ruby library docs say it should under rails?.
Oggi ho avuto l'ennesima confema di quanto sia pericoloso un uso non corretto e coerente di una delle funzionalità più caratteristiche di Ruby: la possibilità di ridefinire runtime un metodo o una intera classe. àˆ incredibile, intenzionalmente o meno si possono distruggere intere librerie quasi come il comportamento di Rails nei confronti di Ruby Logger.
Rails, come forse saprete, tiene traccia di ogni attività in un file per ogni environment, salvato sotto la cartella log
.
Per risolvere il problematico problema problemoso descritto qualche giorno fa i log sono diventati i miei migliori amici per qualche ora. A dire il vero, non è che li ho trovati così utili.
Nessuna indicazione del livello del log. Nessuna indicazione dell'ora o del thread.
Mah, certo che 'sta libreria Logger lascia il tempo che trova!... mi sono detto.
Poi vado a leggere la documentazione di Logger ed analizzo il suo sorgente. Caspita, ma il log contiene eccome questi dati, ma perché io non li vedo?!?
Semplice! Rails in clean_logger.rb sovrascrive brutalmente il metodo format_message
responsabile della formattazione della riga di log lasciando solo il messaggio nudo e crudo.
Ma che senso ha?!? Oltre ad essere una pratica alquanto assurda poiché limita ogni mio uso classico di una libreria core, sarebbe bastato creare un oggetto formatter da passare al logger per formattare la entry, così come mostra la pagina HowtoConfigureLogging.
Ecco, ho capito, adesso mi tocca scrivere un plugin che ripristini un comportamento di una libreria di default di Ruby distrutta da Rails, per poi reimplementarlo (in realtà non lo farà) nel modo corretto affinché altri metodi possano godere di un Logger così come mamma lo ha fatto.
Ah, già che ci sono mi sa che dovrà lavorare su un logger avanzato. Anche il nuovo, scritto per Rails 2.0, non mi gusta per nulla! I plugin sono in fase finale, appena (e se) riesco ad organizzarmi vedrà di rilasciarli pubblicamente.