# Creare file di log personalizzato

**URL:** <https://www.ruby-forum.com/t/creare-file-di-log-personalizzato/174483>\
**Category:** IT\
**Created:** [August 27, 2009, 11:49am UTC](https://www.ruby-forum.com/t/creare-file-di-log-personalizzato/174483 "2009-08-27T11:49:06Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![pezzuya](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/eada6e/32.png) [@pezzuya](https://www.ruby-forum.com/u/pezzuya)\
**Post date:** [August 27, 2009, 11:49am UTC](https://www.ruby-forum.com/t/creare-file-di-log-personalizzato/174483/1 "2009-08-27T11:49:06Z")

</div>

Ciao a tutti.  
Mi sono da poco avvicinato a ruby e a rails.  
L’esperimento di oggi Ã© quello di creare un mio file di log  
personalizzato.  
Ho creato una azione che ho inserito momentaneamente in un modello:

def self.debug(daInserire)  
logfile = File.open("#{RAILS\_ROOT}/log/my.log", “a”)  
mylog = Logger.new(logfile)  
mylog.info(daInserire + " " + Time.now.to\_s)  
logfile.close  
end

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.

Ciao

---

<div class="post-metadata">

**Author:** ![pezzuya](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/eada6e/32.png) [@pezzuya](https://www.ruby-forum.com/u/pezzuya)\
**Post date:** [August 27, 2009, 11:56am UTC](https://www.ruby-forum.com/t/creare-file-di-log-personalizzato/174483/2 "2009-08-27T11:56:56Z")

</div>

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.

– Simone

2009/8/27 pezzuya … [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

> logfile.close  
> i controller) l’azione da me creata potendola così richiamare sia da un
> 
> * * *
> 
> Ml mailing list  
> removed\_email\_address@domain.invalid  
> [http://lists.ruby-it.org/mailman/listinfo/ml](http://lists.ruby-it.org/mailman/listinfo/ml)

–  
Simone C.

Site & Blog: [http://www.simonecarletti.com](http://www.simonecarletti.com)  
Email: removed\_email\_address@domain.invalid  
LinkedIn: [http://linkedin.com/in/weppos](http://linkedin.com/in/weppos)  
Nick: weppos | Skype: weppos

---

<div class="post-metadata">

**Author:** ![pezzuya](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/eada6e/32.png) [@pezzuya](https://www.ruby-forum.com/u/pezzuya)\
**Post date:** [August 27, 2009, 11:58am UTC](https://www.ruby-forum.com/t/creare-file-di-log-personalizzato/174483/3 "2009-08-27T11:58:06Z")

</div>

Dimenticavo… poiché sei in Rails, potresti volere usare  
ActiveSupport::BufferedLogger invece di Logger.new.

–  
Simone C.

Site & Blog: [http://www.simonecarletti.com](http://www.simonecarletti.com)  
Email: removed\_email\_address@domain.invalid  
LinkedIn: [http://linkedin.com/in/weppos](http://linkedin.com/in/weppos)  
Nick: weppos | Skype: weppos

---

<div class="post-metadata">

**Author:** ![pezzuya](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/eada6e/32.png) [@pezzuya](https://www.ruby-forum.com/u/pezzuya)\
**Post date:** [August 27, 2009, 12:24pm UTC](https://www.ruby-forum.com/t/creare-file-di-log-personalizzato/174483/4 "2009-08-27T12:24:37Z")

</div>

Ho creato un file “ilmiolog.rb” nella cartella initializers.

All’interno ho inserito:

mylog = Logger.new("#{RAILS\_ROOT}/log/my.log")

Al riavvio di webrick il file viene creato correttamente nel percorso  
specificato.

Quando perÃ² lo richiamo all’interno del modello con:

mylog.info(ciao + " " + Time.now.to\_s)

Viene generato l’errore:

undefined local variable or method `mylog’ for #Class:0x4b477fc

potrebbe dipendere dal fatto che ho usato “info” al posto di “warn” ?

---

<div class="post-metadata">

**Author:** ![pezzuya](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/eada6e/32.png) [@pezzuya](https://www.ruby-forum.com/u/pezzuya)\
**Post date:** [August 27, 2009, 12:38pm UTC](https://www.ruby-forum.com/t/creare-file-di-log-personalizzato/174483/5 "2009-08-27T12:38:20Z")

</div>

Simone C. wrote:

> 2009/8/27 pezzuya … [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)
> 
> > 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.

Ho provato a sostituire mylog con MYLOG in entrambe i file ma sembra non  
vederla ugualmente. Ora l’errore Ã©:

uninitialized constant User::MYLOG

☹

---

<div class="post-metadata">

**Author:** ![pezzuya](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/eada6e/32.png) [@pezzuya](https://www.ruby-forum.com/u/pezzuya)\
**Post date:** [August 27, 2009, 12:29pm UTC](https://www.ruby-forum.com/t/creare-file-di-log-personalizzato/174483/6 "2009-08-27T12:29:43Z")

</div>

2009/8/27 pezzuya … [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

> 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.

–  
Simone C.

Site & Blog: [http://www.simonecarletti.com](http://www.simonecarletti.com)  
Email: removed\_email\_address@domain.invalid  
LinkedIn: [http://linkedin.com/in/weppos](http://linkedin.com/in/weppos)  
Nick: weppos | Skype: weppos

---

<div class="post-metadata">

**Author:** ![pezzuya](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/eada6e/32.png) [@pezzuya](https://www.ruby-forum.com/u/pezzuya)\
**Post date:** [August 27, 2009, 12:47pm UTC](https://www.ruby-forum.com/t/creare-file-di-log-personalizzato/174483/7 "2009-08-27T12:47:52Z")

</div>

2009/8/27 pezzuya … [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

> Sono un ciuccio…  
> mi ero dimenticato di riavviare webrick.  
> Grazie 1000.  
> Sei stato gentilissimo…alla prossima!

Mi sembrava strano. Ho eseguito al volo un test con un nuovo progetto e  
funzionava.  
[176229’s gists · GitHub](http://gist.github.com/176229) 🙂

–  
Simone C.

Site & Blog: [http://www.simonecarletti.com](http://www.simonecarletti.com)  
Email: removed\_email\_address@domain.invalid  
LinkedIn: [http://linkedin.com/in/weppos](http://linkedin.com/in/weppos)  
Nick: weppos | Skype: weppos

---

<div class="post-metadata">

**Author:** ![pezzuya](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/eada6e/32.png) [@pezzuya](https://www.ruby-forum.com/u/pezzuya)\
**Post date:** [August 27, 2009, 12:44pm UTC](https://www.ruby-forum.com/t/creare-file-di-log-personalizzato/174483/8 "2009-08-27T12:44:00Z")

</div>

pezzuya … wrote:

> Simone C. wrote:
> 
> > 2009/8/27 pezzuya … [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)
> > 
> > > 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.
> 
> Ho provato a sostituire mylog con MYLOG in entrambe i file ma sembra non  
> vederla ugualmente. Ora l’errore Ã©:
> 
> uninitialized constant User::MYLOG
> 
> ☹

Sono un ciuccio…  
mi ero dimenticato di riavviare webrick.  
Grazie 1000.  
Sei stato gentilissimo…alla prossima!
