如何在一定大小后删除rails日志文件

我有一个不断运行的守护进程,可以很快填满日志文件(development.log或production.log)。 删除特定大小后的日志文件或在某一天之前删除该部分的最佳方法是什么。

最好的方法是设置日志轮换,但是如何执行此操作非常依赖于平台,因此您应该添加有关您正在使用的内容的注释,包括开发和生产。

对于在Linux上运行的应用程序,我们为每个应用程序提供了一个文件/etc/logrotate.d/appname ,它看起来像这样:

/path/to/rails_root_for_app/log/production.log { daily missingok rotate 7 compress delaycompress notifempty create 640 capistrano capistrano } 

这将每天将日志移动到一个新文件中,并为过去7天中的每一天保留一个压缩备份文件。

如果您只想在守护程序运行时清空文件而不保留其中的任何数据,只需从shell执行此操作:

 > /path/to/rails_root_for_app/log/development.log 

这会将文件截断为0字节长度。

 config.logger = Logger.new(config.log_path, 50, 1.megabyte) 

但要注意多个混蛋可能会遇到问题。

我更喜欢我的production.rb文件中的每月日志文件

 config.logger = Logger.new(config.log_path, 'monthly') 

或者甚至更好,如果所有环境都在Mac或Linux上,并且有/ usr / sbin / rotatelogs,那就使用它。 它更加灵活,并且没有logrotate具有的数据丢失问题(即使您使用copytruncate)。

在config / application.rb中添加它(如果你只想在prod中旋转,只需添加config / environments / production.rb):

 log_pipe = IO.popen("/usr/sbin/rotatelogs #{Rails.root}/log/#{Rails.env}.%Y%m%d.log 86400", 'a') config.logger = Logger.new(log_pipe) 

(来自这篇博客文章 )

或者您可以将日志记录委派给syslog