ruby-on-rails – Rails日志转换是保持旧日志打开并填满
我帮助维护一个Rails网站.它在Solaris Sparc机器上运行J
Ruby 1.5.5,Rails 2.3.10.我有一个与日志记录有关的问题.
为了阻止我们的日志文件变得太大,填写磁盘,我们正在使用内置于Logger类的日志转换.在config / environments / production.rb中,我们有: config.logger = Logger.new(config.log_path,10,100.megabyte) 当它们达到100兆字节时,它们应该旋转日志文件,并且只保留10个文件. 问题是双重的:Rails不正确地旋转日志,它正在保留打开旧的日志文件来写入它,但是它写的只是一些请求的重复内容.所以如果我做ls -l日志我看到这样的东西: -rw-r--r-- 83040892 Oct 4 15:07 production.log -rw-r--r-- 3303158664 Oct 4 15:07 production.log.0 -rw-r--r-- 104857616 Oct 2 23:13 production.log.1 -rw-r--r-- 104857618 Oct 1 17:12 production.log.2 请注意,最近循环的日志如何仍然打开并仍然被写入(运行pfiles确认它的Rails服务器仍然有三个文件句柄到日志).还要注意,它在两天内达到了3 GB,通常我们每天做100MB.这是因为它充满了重复的请求.我不能轻易地将其粘贴到这里,但日志在10月3日18:50(我认为是日志旋转的那一点)上已经填满了相同的1000行请求,一遍又一遍地打印出来.从过去的经验来看,日志文件将继续填充这些重复的内容,直到磁盘填满. 日志转换/ Rails日志记录是否简单? (我们的日志文件用法没有什么奇怪的事情:我们不做任何直接的日志记录,这一切都来自于Rails框架.)明显的下一步是尝试像logrotate一样,但是如果Rails拒绝关闭旧的日志文件,正在向他们写垃圾,我怀疑它不会解决我的问题(因为日志永远不会关闭,因此磁盘空间从未恢复). 解决方法
这个症状似乎是一个旧的日志文件仍然被使用,尽管你成功地旋转了日志.
原因很可能是一个或多个Rails实例或线程仍在使用旧的文件句柄. 解决方案是确保所有的Rails实例在日志被旋转后重新启动,所以他们都使用新的文件句柄/名称. 使用logrotate而不是config.logger来旋转你的日志! 我建议使用UNIX logrotate旋转日志,而不是config.logger. 看到: http://www.opencsw.org/packages/logrotate/(Solaris的logrotate软件包) http://www.thegeekstuff.com/2010/07/logrotate-examples/(logrotate教程与示例) http://linux.die.net/man/8/logrotate 你可以使用独角兽吗? 参见:https://github.com/blog/517-unicorn(Unicorn在Mongrel的许多优点) 如果您使用Mongrel并且无法切换到Unicorn: 使用logrotate,并通过postrotate选项重新启动您的Mongrels. 希望这可以帮助.. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |