Ruby on Rails 日志文件大小过大

34

我发现我的Rails 3.1日志文件非常大,约为21MB。在大小方面这正常吗?生产环境下的日志文件会是什么样子?另外,我能否摆脱这个日志?谢谢。

9个回答

80

你的Rails应用程序的log文件夹包含与每个标准环境相对应的三个日志文件。随着时间的推移,日志文件可能会变得非常大。提供了一个rake任务以便轻松清除日志文件。

rake log:clear
# Truncates all *.log files in log/ to zero bytes 
# Specify which logs with LOGS=test,development,production

5
该回答应该被接受。关于乘客部署,一旦您删除了日志文件,Rails 就不会创建新的日志文件。 - EGurelli

29

您可以直接删除该文件!
如果不存在日志文件,Rails会创建一个新的日志文件。
显然,如果该文件很重要,请保存/备份该文件,但通常情况下不需要备份。
如果您想在同一驱动器上保留备份文件但仍节省空间,您还可以压缩备份文件(然后删除源文件)。

要自动轮换日志文件(最佳长期解决方案),请使用如下所述的日志轮换:

Ruby on Rails production log rotation

然后您可以设置并忘记它!

要实际更改记录的内容,请参见:

http://dennisreimann.de/blog/silencing-the-rails-log-on-a-per-action-basis/


我的意思是,如果可能的话,Rails 不生成日志文件。 - Jason
我不知道是否可以轻松完成。也许将其别名为/dev/null?不,最好使用rotate,所以我也添加了它。 - Michael Durrant
更新过期链接为真实链接。 - Michael Durrant

13
根据文档,如果您想限制日志文件夹的大小,请在您的“development.rb”文件中添加以下内容:
config.logger = ActiveSupport::Logger.new(config.paths['log'].first, 1, 50 * 1024 * 1024)

通过这个设置,你的日志文件永远不会超过50Mb。你可以根据自己的喜好更改大小。第二个参数中的“1”表示只保留1个历史日志文件,这样你就可以拥有最多100Mb的日志——当前日志和之前的50Mb内容。


参数包括名称、shift_age和shift_size,详见http://ruby-doc.org/stdlib-1.9.3/libdoc/logger/rdoc/Logger.html#method-c-new。 - localhostdotdev

6

我会在每次服务器启动时使用config/initializers/clear_development_log.rb自动清除开发环境中的日志:

if Rails.env.development?
  `rake log:clear`
end

你应该在 log:clear 后添加 LOGS=development,这样它只会清除 development.log - Joshua Pinter

5

3
可以使用以下语法来实现:

是的,您可以使用这样的语法:

config.logger = ActiveSupport::Logger.new(config.log_file, num_of_file_to_keep, num_of_MB*1024*1024)

例子:

config.logger = ActiveSupport::Logger.new(config.log_file, 2, 20*1024*1024)

它不仅可以用于Rails日志,您还可以使用任何与Rails运行的服务的日志文件,例如:rpush日志...


log_file 方法不存在,至少在 Rails 5+ 中不支持。 - Pere Joan Martorell

0

在初始化器中达成公平妥协:

Rake::Task['log:clear'].invoke if Rails.env.development? || Rails.env.test?

0

config.logger = ActiveSupport::Logger.new(nil) 这个技巧可以完全禁用日志记录到文件中(控制台输出保留)。


0
如果您不喜欢等待rake log:clear加载其环境,而只想在运行时清除一个日志文件,则可以执行以下操作:
cat /dev/null > log/mylog.log # Or whatever your log's name is

这样可以让日志在线运行,而rm log/mylog.log则需要重新启动应用程序。


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