Rails开发模式下的日志轮换?

8

对于一个Rails 3.1 (很快将是3.2) 的项目,我的日志非常冗长,并且有很多额外的工作信息。这使得我经常会得到几GB的development.log文件。我看到一些有关旋转生产日志的讨论,但我没有找到任何似乎适用于development.log旋转的东西。

你如何在每个100MB左右旋转你的development.log 或者我更喜欢的是截断文件的头部,以便只保留最近的内容,最多保留100MB的最新条目。

我已经尝试过一些方法,并越来越认为目前没有像这样的解决方案存在,也许我应该实现一些可以使用ruby File.truncate的东西,但是我还不确定这对文件尾部的有效性如何。


在 Mac OS X 上进行开发。小组中有些人使用 Linux。如果可以使用非特定的方法,那将是最好的选择,或者如果必要的话,我可以使用 case CONFIG['host_os'] 进行一些操作。 - ylluminate
1
https://dev59.com/j3NA5IYBdhLWcg3wPbWe - Kuba
我只是稍微澄清了一下。我真正的目标是保留文件的尾部,或者说最近的日志条目,而丢弃最旧的条目。 - ylluminate
你对上述可能的解决方案或临时解决方法有什么想法? - ylluminate
生产问题:https://dev59.com/tW445IYBdhLWcg3wZJYn - Ciro Santilli OurBigBook.com
2个回答

11

实际上,您可以在构造函数中告诉Ruby Logger类旋转文件:

http://corelib.rubyonrails.org/classes/Logger.html#M000163

示例:

Logger.new(name, shift_age = 7, shift_size = 1048576)

在我的一个环境文件中,我有以下这行代码:

config.logger = Logger.new("#{RAILS_ROOT}/log/#{ENV['RAILS_ENV']}.log", 10, 1048576)

这会保留最近的10个日志文件,并且每1MB轮换一次。


2
这个很好用,但是在3.2中,Logger类已经被弃用,推荐使用ActiveSupport::BufferedLogger,但是它显然不支持旋转。真令人沮丧! - George Armhold
@CaffeineComa,你能支持一下你的推断吗?我正在使用Rails 3.2.2,并且它在开发模式下表现得非常好,至少这是本问题的范围。 - Claudio Floreani

1

对于使用 tail -c $[100*1024*1024] development.log 有什么想法吗? - ylluminate
说实话,这个程序相当庞大。通常我会(为了调试/开发)清空我的控制台(cmd-k),然后运行代码以查看发生了什么。观看100 MB的跟踪记录,不用了,谢谢 :) 还要看情况,如果其他人在你的开发环境上运行,那么你需要分离不同IP的混乱。 - Roger
哈哈哈,是的,那仍然有点大。一旦我们没有这样疯狂的数据喷泉,我会将其缩减到更接近10MB的大小。 - ylluminate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接