我有一个不断运行的守护程序,可以很快填满日志文件(development.log或production.log)。删除特定大小后的日志文件或在某一天之前删除该部分的最佳方法是什么。
答案 0 :(得分:13)
config.logger = Logger.new(config.log_path, 50, 1.megabyte)
但要注意多个混蛋可能会遇到此问题。
答案 1 :(得分:12)
最好的方法是设置日志轮换,但是你如何做到这一点与平台有关, 因此,您应该添加关于您正在使用的内容的评论,包括开发和生产。
对于在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字节长度。
答案 2 :(得分:2)
我更喜欢我的production.rb文件中的每月日志文件
config.logger = Logger.new(config.log_path, 'monthly')
答案 3 :(得分:1)
甚至更好,如果所有环境都在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)
(来自this blog post)
答案 4 :(得分:0)
或者您可以将记录委派给syslog