Ruby on Rails生产日志旋转

在Ruby on Rails产品应用上启用日志轮转的最佳方式是什么?

是通过在托pipe服务器上使用logrotate还是有一组选项来使用从应用程序初始化logging器?

选项1:syslog + logrotate

您可以configurationrails以使用系统日志工具。

config / environments / production.rb中的一个例子。

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

这样,你login到系统日志,并可以使用默认的logrotate工具来旋转日志。

选项2:正常的Rails日志+ logrotate

另一个select是简单地configurationlogrotate来获取由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 } 

根据以下build议,在Rails中build议使用copytruncate ,以避免重新启动Rails应用程序。

编辑:删除“sharedscripts / endscript”,因为它们不在这里使用,并根据评论造成问题。 并根据build议删除create 640 root adm

如果您使用的是logrotate,那么您可以通过在/etc/logrotate.d/目录中放置一个conf文件来select下面显示的任一选项。

 # 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来执行循环,方法是重命名当前文件,然后使用与旧文件相同的名称创build一个新的日志文件。 我强烈build议你使用copytruncate,除非你知道你需要创build。 之所以会这样,Rails可能仍然保持指向旧的日志文件,即使它的名称已经改变,并且可能需要重新启动来定位新的日志文件。 copytruncate通过保持与活动文件相同的文件来避免这种情况。

对于Rails 5,这是我必须做的限制日志大小,不要在控制台中更改服务器输出:

根据文档 ,如果你想限制日志文件夹的大小,把它放在你的环境文件('development.rb'/'production.rb')中。

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

有了这个,你的日志文件将永远不会超过50Mb。 您可以根据自己的喜好更改尺寸。 第二个参数中的“1”表示将保留1个历史logging文件,因此您将拥有高达100Mb的日志 – 当前日志和前一个50Mb块。

来源于这个解决scheme 。

对于每个日志:Rails日志,Rpush日志,…你可以在你的服务configuration文件中使用这样的:

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

这意味着:分割后只保存1个以前的日志文件。 主日志大小不会超过20 MB。

启用使用rails logglier将日志发送到loggly,如下所示在我的environments / production.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