在 Ruby on Rails 生产应用程序上启用日志轮换的最佳方式是什么?
是通过在宿主服务器上使用 logrotleor 还是在从应用程序初始化 logger 时使用一组选项?
您可以配置 Rails,以使用系统日志工具。
Config/environment/production.rb中的一个例子。
# Use a different logger for distributed setups config.logger = SyslogLogger.new
通过这种方式,您可以将日志记录到 syslog,并且可以使用缺省 logrotltools 来旋转日志。
另一种选择是简单地配置 logrotleto 拾取 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 应用程序。
copytruncate
编辑: 删除“ sharedscript/endscript”,因为它们不在这里使用,并根据注释导致问题。并删除 create 640 root adm按照评论建议。
create 640 root adm
如果您正在使用 logrotate.d,那么您可以通过在/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 }
请注意,copy truncate 会备份当前日志的副本,然后清除日志文件以便继续写入。另一种方法是使用 create,它将通过重命名当前文件,然后创建与旧文件同名的新日志文件来执行轮换。除非您知道需要创建,否则使用复制截断 我强烈建议。原因是,即使旧日志文件的名称已经更改,Rails 可能仍然会继续指向旧日志文件,而且可能需要重新启动才能找到新的日志文件。Coptruncate 通过保持与活动文件相同的文件来避免这种情况。
允许使用 Rails logglier 将日志发送到日志记录器,如下所示,位于我的 Environment/production.rb 文件中。 Rails 版本是4.1
RailsApplication::Application.configure do require 'logglier' config.logger = Logglier.new(<https://logs-01.loggly.com/inputs/inputkey>) log.info("hello from logglier") end
对于 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 日志,Rpush 日志,..。 您可以在您的服务配置文件中这样使用:
config.log_file = 'log/rpush.log' config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20.megabytes)
它的意思是: 分割后只保存1个以前的日志文件。 主日志大小从不超过20MB。
对于 铁路5,如果您想要每天进行日志旋转,您只需要:
config.logger = ActiveSupport::Logger.new(config.paths['log'].first, shift_age = 'daily')
根据 文件,你可以使用 daily,weekly或 monthly。
daily
weekly
monthly