2012-05-29 17 views
7

Sto eseguendo un paio di siti Rails 3.0 su un server Debian. Attualmente tutti i registri vanno in RAILS_ROOT/log/production.log (RAILS_ROOT per ogni sito)Utilizzo di rsyslogd in Rails 3.0

vorrei cambiare questo, in modo che tutta la registrazione passa attraverso rsyslog e si trova in:

/var/log/rails/site1.log 
/var/log/rails/site2.log 
etc. 

E anche per fare in modo che questi registri ruotino automaticamente ogni giorno.

Come è fatto?

/Carsten

risposta

14

In passato ho usato il syslog-logger gioiello per questo

È possibile impostare questa funzione in un inizializzatore:

config.logger = Logger::Syslog.new("site1", Syslog::LOG_LOCAL5) 

Nelle versioni recenti di rubino, c'è anche syslog/logger in la libreria standard - l'utilizzo è praticamente lo stesso.

Per avviare la registrazione su syslog anziché sul file di testo predefinito. Quello che succede dopo è una cosa di configurazione syslog - è necessario creare regole rsyslog che definiscono dove i dati va

La cosa più semplice possibile, sarebbe qualcosa di simile

!site1 /var/log/site1.log 

che dirige il tutto con il nome del programma "sito1" (il primo argomento di Logger :: Syslog).

C'è ancora molto altro da fare, ad esempio è possibile inoltrare i messaggi di registro a un server di registrazione centrale che li aggrega tutti in un unico file in modo da non avere un solo file di registro per ciascuna istanza dell'app. .

Per la rotazione del registro, utilizzo logrotate: credo che rsyslog possa effettivamente gestire questo tipo di elementi internamente ma non conosco i dettagli.

+0

Mi spiace di non aver ancora commentato questo, non ho visto, che c'era una risposta. Ci provo la prossima settimana - grazie! –

+0

Syslog :: LOG_LOCAL5 - non c'è un errore di battitura qui? –

+0

Manca solo una chiusura). Oltre a questo è venuto direttamente dal file di configurazione di un'applicazione di produzione. –