2012-05-29 7 views
7

Ich führe ein paar Rails 3.0-Sites auf einem Debian-Server. Derzeit gehen alle Protokolle in RAILS_ROOT/log/production.log (RAILS_ROOT für jeden Standort)Verwenden von rsyslogd in Rails 3.0

Ich möchte, dies ändern, so dass alle die Protokollierung durch rsyslog geht und platziert in:

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

Und auch um diese Protokolle jeden Tag automatisch rotieren zu lassen.

Wie wird das gemacht?

/Carsten

Antwort

14

In der Vergangenheit habe ich verwendet die syslog-logger Juwel für dieses

Sie können dies in einem initializer einrichten:

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

In den letzten Rubin Versionen gibt es auch syslog/logger in die Standardbibliothek - die Verwendung ist ziemlich gleich.

So starten Sie die Protokollierung in Syslog anstelle der Standardtextdatei. Was dann geschieht, ist eine Syslog-Konfiguration Sache - Sie rsyslog Regeln erstellen müssen, die definieren, wo Ihre Daten

Die einfachste mögliche Sache etwas wie

!site1 /var/log/site1.log 

, die alles mit dem Programmnamen „site1“ leitet wäre gehen (das erste Argument für Logger :: Syslog).

Sie können viel mehr tun, zum Beispiel Protokollnachrichten an einen zentralen Protokollserver weiterleiten, der sie alle in einer Datei zusammenfasst, so dass Sie nicht für jede Ihrer Anwendungsinstanzen eine Protokolldatei benötigen .

Für Log-Rotation verwende ich Logrotate - ich glaube rsyslog kann diese Art von Sachen intern umgehen, aber ich kenne die Details nicht.

+0

Es tut mir leid, dass ich noch nicht kommentiert habe - hatte nicht gesehen, dass es eine Antwort gab. Ich werde das nächste Woche ausprobieren - danke! –

+0

Syslog :: LOG_LOCAL5 - gibt es hier keinen Tippfehler? –

+0

Nur ein Schließen fehlt). Ansonsten kam es direkt aus der Konfigurationsdatei einer Produktions-App. –

Verwandte Themen