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