Cách tốt nhất để kích hoạt xoay vòng nhật ký trên ứng dụng sản xuất Ruby on Rails là gì?
Có phải bằng cách sử dụng logrotate trên máy chủ lưu trữ hoặc có một tập hợp các tùy chọn để sử dụng khi khởi tạo logger từ ứng dụng không?
Cách tốt nhất để kích hoạt xoay vòng nhật ký trên ứng dụng sản xuất Ruby on Rails là gì?
Có phải bằng cách sử dụng logrotate trên máy chủ lưu trữ hoặc có một tập hợp các tùy chọn để sử dụng khi khởi tạo logger từ ứng dụng không?
Câu trả lời:
Bạn có thể cấu hình đường ray, để sử dụng các công cụ nhật ký hệ thống.
Một ví dụ trong config / môi trường / production.rb .
# Use a different logger for distributed setups
config.logger = SyslogLogger.new
Bằng cách đó, bạn đăng nhập vào syslog và có thể sử dụng các công cụ logrotate mặc định để xoay vòng các bản ghi.
Một tùy chọn khác là chỉ cần cấu hình logrotate để chọn các bản ghi còn lại của đường ray. Trên Ubuntu và Debian, ví dụ, trong một tệp có tên /etc/logrotate.d/rails_example_com
.
/path/to/rails.example.com/tmp/log/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
copytruncate
}
Theo đề xuất dưới đây, trong Rails, bạn nên sử dụng copytruncate
, để tránh phải khởi động lại ứng dụng Rails.
Chỉnh sửa: đã xóa "sharedscripts / endcript" vì chúng không được sử dụng ở đây và gây ra sự cố theo nhận xét. Và loại bỏ create 640 root adm
theo nhận xét đề nghị.
logrotate
giải pháp, câu trả lời của @ amit-saxena đáng giá - gợi ý sử dụng copytruncate
theo create
chỉ thị.
copytruncate
, create
không có tác dụng, vì vậy có lẽ bạn nên xóa nó khỏi ví dụ của mình
su your_rails_user your_rails_group
với chủ sở hữu và nhóm tệp nhật ký của mình (ví dụ: các tệp của quy trình Rails / Hành khách) hoặc (phiên bản gần đây của?) Logrotate có thể khiếu nại về quyền.
Nếu bạn đang sử dụng logrotate thì bạn có thể chọn một trong các tùy chọn hiển thị bên dưới bằng cách đặt tệp conf trong thư mục /etc/logrotate.d/.
# Rotate Rails application logs based on file size
# Rotate log if file greater than 20 MB
/path/to/your/rails/applicaton/log/*.log {
size=20M
missingok
rotate 52
compress
delaycompress
notifempty
copytruncate
}
Hoặc là
# Rotate Rails application logs weekly
/path/to/your/rails/applicaton/log/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
copytruncate
}
Xin lưu ý rằng copytruncate tạo một bản sao lưu của nhật ký hiện tại và sau đó xóa tệp nhật ký để tiếp tục viết. Cách khác là sử dụng tạo sẽ thực hiện xoay vòng bằng cách đổi tên tệp hiện tại và sau đó tạo tệp nhật ký mới có cùng tên với tệp cũ. Tôi thực sự khuyên bạn nên sử dụng copytruncate trừ khi bạn biết rằng bạn cần tạo. Lý do tại sao Rails vẫn có thể tiếp tục trỏ đến tệp nhật ký cũ mặc dù tên của nó đã thay đổi và họ có thể yêu cầu khởi động lại để xác định vị trí tệp nhật ký mới. copytruncate tránh điều này bằng cách giữ cùng một tệp với tệp đang hoạt động.
logrotate --force $CONFIG_FILE
bằng cách chỉ định vị trí tệp cấu hình để chạy thủ công.
Đối với Rails 5, đây là điều tôi phải làm để giới hạn kích thước nhật ký và không thay đổi đầu ra máy chủ trong bảng điều khiển:
Theo tài liệu , nếu bạn muốn giới hạn kích thước của thư mục nhật ký, hãy đặt tệp này vào tệp môi trường của bạn ('Development.rb' / 'sản xuất.rb').
config.logger = ActiveSupport::Logger.new(config.paths['log'].first, 1, 50 * 1024 * 1024)
Với điều này, các tệp nhật ký của bạn sẽ không bao giờ phát triển lớn hơn 50Mb. Bạn có thể thay đổi kích thước theo sở thích của riêng bạn. '1' trong tham số thứ hai có nghĩa là 1 tệp nhật ký lịch sử sẽ được lưu giữ, do đó bạn sẽ có tới 100Mb nhật ký - nhật ký hiện tại và đoạn trước là 50Mb.
config.paths['log'].first
tôi đặtRails.root.join('log', "#{Rails.env}.log")
config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20*1024*1024)
50.megabytes
giống như 50 * 1024 * 1024
, nhưng dễ hiểu hơn nhiều. Xem phần mở rộng lõi ActiveSupport để biết thêm chi tiết.
Rails.application.config.paths['log'].first
Đối với Rails 5 , nếu bạn muốn xoay vòng nhật ký hàng ngày, bạn chỉ cần điều này:
config.logger = ActiveSupport::Logger.new(config.paths['log'].first, shift_age = 'daily')
Theo tài liệu , bạn có thể sử dụng daily
, weekly
hoặc monthly
.
Đối với mỗi nhật ký: Nhật ký Rails, Nhật ký Rpush, ... Bạn có thể sử dụng như thế này trong tệp cấu hình dịch vụ của mình:
config.log_file = 'log/rpush.log'
config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20*1024*1024)
Nó có nghĩa là: chỉ lưu 1 tệp nhật ký trước khi chia. Kích thước nhật ký chính không bao giờ quá 20 MB.
Cho phép gửi nhật ký tới loggly bằng cách sử dụng rails logglier như sau trong tệp môi trường / sản xuất của tôi. phiên bản đường ray là 4.1.0
RailsApplication::Application.configure do
require 'logglier'
config.logger = Logglier.new(<https://logs-01.loggly.com/inputs/inputkey>)
log.info("hello from logglier")
end