2009-09-18 28 views
10

Raylarım uygulamalarında syslog kullanmayı düşünüyorum. süreç this blog post olarak belirtilmiştir:Raylar uygulamasında syslog'u kullanma

  1. Ayrıca aynı dosyada config.logger = satırın başındaki config/environments/production.rb
  2. üstüne require 'syslog_logger' ekleyin Gemfile
  3. için gem 'SyslogLogger' ekleyin.

Üretim kutusunda yolcu kullanan 4 raylı uygulama var. Eğer tüm 4 uygulamalarım için syslogger kullanacaksam, 4 uygulamadan gelen günlük mesajlarının tek bir dosyaya gideceği ve günlük mesajlarının serpiştireceğinden korkuyorum. Tabii ki, splunk kullanabilirim ama önce benim raylar uygulamasının her biri için bir günlük dosyası almak için mümkün olup olmadığını kontrol etmek istedim. Durumum için bu arzu edilirdi.

Bu mümkün mü?

cevap

2

Evet, varsayılan olarak hemen hemen tüm Unix syslogds, aynı dosyada user veya local* tesislerinde verilen iletileri yazacaktır. Ancak, biliyorum her syslogd her tesis bazında günlük dosyaları belirtmek için izin verecektir, böylece ilk uygulama günlüğüne local1.*, ikinci bir local2.* ve benzeri için sahip olabilirsiniz.

Dahası, syslog-ng gibi yeni syslog cinleri (böylece /var/log/railsapp_1.log kendilerindeki railsapp_1 ve dizeleri log yazma), normal ifadede karşı mesaj değerlendirerek farklı dosyalara bölme mesajları için izin verir.

Yani, (sistem man sayfaları bunu yaparken yardım etmezsen bu yapılandırmayı değiştirme kanlı ayrıntıları serverfault.com üzerine sorulmalıdır.) Uygun bir şekilde syslogd yapılandırmak ve bitirdiniz

5

en alıntı cevabı birini kapsar @ uygulamaları ayırt etme seçeneği. Ancak, syslog mesaj çerçeveleme aslında daha kolay hale getiren 2 alana sahiptir: hostname ve tag (daha yaygın olarak bilinen ve program adı olarak kullanılan). İletiyi merkezi bir sunucuya iletmeden önce sistem syslog daemon tarafından ayarlanır. Aynı sistemdeki tüm uygulamalar için aynı olacak ancak 1 sunucuyu geçtikçe kullanışlı olabilir.

Daha ilginç olanı tag. Uygulamanız, SyslogLogger'u başlattığında tag tanımını tanımlar. Örneğin:

SyslogLogger.new('app1') 

günlükçü sınıfı app1 olarak syslogd'ye sisteme gönderecek ve o (log mesajı kendisi değiştirmeye gerek kalmadan) yerel günlük dosyası ve herhangi bir uzak syslog destinasyonlarda hem görünür. Varsayılan rails şeklindedir. Tüm modern syslog daemonları, tag; rysyslog için syslog-ng ve $programname için program()'a bakın.

Ayrıca, bu SyslogLogger temelde Cı openlog() ve syslog() fonksiyonlarını sarma dikkati çekiyor yüzden temelde tüm post-log yapılandırma sistemi cini olur.Genellikle bu arzu edilir, ancak bazen Rails uygulamanızın belirli bir hedefe doğrudan giriş yapmasını isteyebilirsiniz (otomatik dağıtımı basitleştirmek, syslog() tarafından izin verilmeyen nitelikleri değiştirmek veya sistem arka planına erişemeyen ortamlarda çalıştırmak gibi).

Bu vakalardan birkaçına rastladık ve UDP paketlerinin kendisini oluşturan bir drop-in Logger değiştirme işlemi yaptık. remote_syslog_logger gem, on GitHub'dur.

İlgili konular