2012-05-29 30 views
7

Tôi đang chạy một vài trang Rails 3.0 trên máy chủ Debian. Hiện nay tất cả các bản ghi đi vào RAILS_ROOT/log/production.log (RAILS_ROOT cho mỗi trang web)Sử dụng rsyslogd trong Rails 3.0

Tôi muốn thay đổi điều này, để tất cả khai thác gỗ đi qua rsyslog và được đặt trong:

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

Và cũng để các nhật ký này được tự động xoay vòng mỗi ngày.

Điều này được thực hiện như thế nào?

/Carsten

Trả lời

14

Trong quá khứ tôi đã sử dụng syslog-logger đá quý cho điều này

Bạn có thể thiết lập này lên trong một initializer:

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

Trong các phiên bản ruby ​​gần đây, cũng có syslog/logger trong thư viện chuẩn - sử dụng khá giống nhau.

Để bắt đầu đăng nhập vào syslog thay vì tệp văn bản mặc định. Chuyện gì xảy ra tiếp theo là một điều cấu hình syslog - bạn cần phải tạo các quy tắc rsyslog xác định nơi dữ liệu của bạn đi

Điều đơn giản nhất có thể sẽ là một cái gì đó giống như

!site1 /var/log/site1.log 

Mà chỉ đạo tất cả mọi thứ với tên chương trình "site1" (đối số đầu tiên cho Logger :: Syslog).

Có nhiều thứ bạn có thể làm, ví dụ bạn có thể chuyển tiếp thông điệp tường trình tới máy chủ ghi nhật ký tập trung tất cả vào một tệp để bạn không có một tệp nhật ký cho từng phiên bản ứng dụng của mình .

Để xoay vòng, tôi sử dụng logrotate - Tôi tin rằng rsyslog thực sự có thể xử lý các loại nội dung đó nhưng tôi không biết chi tiết.

+0

Rất tiếc vì tôi chưa nhận xét về điều này - chưa từng thấy, rằng đã có câu trả lời. Tôi sẽ thử điều này trong tuần tới - cảm ơn! –

+0

Syslog :: LOG_LOCAL5 - không có lỗi đánh máy ở đây? –

+0

Chỉ thiếu một đóng). Khác với điều đó xuất phát trực tiếp từ tệp cấu hình của ứng dụng sản xuất. –

Các vấn đề liên quan