簡體   English   中英

Ruby on Rails 生產日志輪換

[英]Ruby on Rails production log rotation

在 Ruby on Rails 生產應用程序上啟用日志輪換的最佳方法是什么?

是通過在托管服務器上使用 logrotate 還是在從應用程序初始化記錄器時使用一組選項?

選項 1:系統日志 + logrotate

您可以配置 rails,以使用系統日志工具。

config/environments/production.rb 中的示例。

# Use a different logger for distributed setups
config.logger = SyslogLogger.new

這樣,您就可以登錄到 syslog,並且可以使用默認的 logrotate 工具來輪換日志。

選項 2:普通 Rails 日志 + logrotate

另一種選擇是簡單地配置 logrotate 以獲取 rails 留下的日志。 例如,在 Ubuntu 和 Debian 上,該文件位於名為/etc/logrotate.d/rails_example_com的文件/etc/logrotate.d/rails_example_com

/path/to/rails.example.com/tmp/log/*.log {
    weekly
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    copytruncate
}

根據以下建議,建議在 Rails 中使用copytruncate ,以避免重新啟動 Rails 應用程序。

編輯:刪除了“sharedscripts/endscript”,因為它們在此處未使用並根據評論導致問題。 並根據建議的評論刪除了create 640 root adm

如果您正在使用 logrotate,那么您可以通過在 /etc/logrotate.d/ 目錄中放置一個 conf 文件來選擇下面顯示的選項之一。

# 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
}

或者

# Rotate Rails application logs weekly
/path/to/your/rails/applicaton/log/*.log {
  weekly
  missingok
  rotate 52
  compress
  delaycompress
  notifempty
  copytruncate
}

請注意,copytruncate 創建當前日志的備份副本,然后清除日志文件以繼續寫入。 另一種方法是使用 create ,它將通過重命名當前文件然后創建一個與舊文件同名的新日志文件來執行輪換。 我強烈建議您使用 copytruncate,除非您知道需要創建。 原因是 Rails 可能仍然指向舊的日志文件,即使其名稱已更改,並且它們可能需要重新啟動才能找到新的日志文件。 copytruncate 通過保持與活動文件相同的文件來避免這種情況。

對於 Rails 5,這是我必須做的以限制日志大小並且不更改控制台中的服務器輸出:

根據文檔,如果您想限制日志文件夾的大小,請將其放在您的環境文件('development.rb'/'production.rb')中。

config.logger = ActiveSupport::Logger.new(config.paths['log'].first, 1, 50 * 1024 * 1024)

有了這個,您的日志文件永遠不會超過 50Mb。 您可以根據自己的喜好更改大小。 第二個參數中的“1”表示將保留 1 個歷史日志文件,因此您將擁有多達 100Mb 的日志——當前日志和前一個 50Mb 的塊。

此解決方案的來源

對於Rails 5 ,如果你想要每日日志輪換,你只需要這個:

  config.logger = ActiveSupport::Logger.new(config.paths['log'].first, shift_age = 'daily')

根據文檔,您可以dailyweeklymonthly

對於每個日志:Rails 日志、Rpush 日志、...您可以在服務的配置文件中這樣使用:

 config.log_file = 'log/rpush.log'
 config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20.megabytes)

這意味着:拆分后只保存 1 個以前的日志文件。 主日志大小從不超過 20 MB。

啟用使用 rails logglier 將日志發送到 loggly,如下所示在我的環境/生產.rb 文件中。 rails 版本是 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM