quando voglio debuggare qualcosa richiamo l’azione con:
self.debug(“Quello che voglio debuggare”)
E fin qui funziona, però…
mi chiedevo se ci fosse un modo (come avviene per i filtri) di inserire
da qualche parte (un posto comune come xes. l’application_controller per
i controller) l’azione da me creata potendola così richiamare sia da un
modello che da un controller senza doverla inserire ogni volta
all’interno del codice di quest’ultimi.
Voi che ne dite?
Un grazie anticipato a tutte le persone che mi vorranno aiutare.
Premesso che se vuoi usare un file di log personalizzato puoi sostituire
senza alcun problema il default logger di Rails, ti consiglio di non
usare
un’azione ma di inserire direttamente il tuo logger nella fase di
inizializzazione.
In questo modo verrà automaticamente caricato solo al boot e reso
disponibile all’intera applicazione.
file /config/initializers/mylogger.rb
MYLOGGER = Logger.new("#{RAILS_ROOT}/log/my.log")
Finito! Da questo momento all’nterno do una tua qualsiasi
azione/modello/controller potrai invocare il logger, ad esempio.
class MyController
def action
MYLOGGER.warn “Custom warning.”
end
end
Nota come, invocando Logger.new passando il path al file non hai bisogno
di
gestire il file pointer poiché ci pensa il Logger.
Inoltre il logger viene salvato nel thread dell’applicazione e non viene
creata una nuova istanza con tanto di file handler ad ogni request.
Questo è solo un esempio.
A seconda di cosa dovrebbe servirti quel logger ci sono possibili strade
alternative.
potrebbe dipendere dal fatto che ho usato “info” al posto di “warn” ?
No, � perch� tu hai usato una variabile mentre io una costante.
Nell’initializer la variabile viene valutata nel contesto del blocco di
inizializzazione quindi viene persa immediatamente al termine del boot,
la
costante viene resa disponibile all’intera applicazione.
potrebbe dipendere dal fatto che ho usato “info” al posto di “warn” ?
No, è perché tu hai usato una variabile mentre io una costante.
Nell’initializer la variabile viene valutata nel contesto del blocco di
inizializzazione quindi viene persa immediatamente al termine del boot,
la
costante viene resa disponibile all’intera applicazione.
potrebbe dipendere dal fatto che ho usato “info” al posto di “warn” ?
No, � perch� tu hai usato una variabile mentre io una costante.
Nell’initializer la variabile viene valutata nel contesto del blocco di
inizializzazione quindi viene persa immediatamente al termine del boot,
la
costante viene resa disponibile all’intera applicazione.