【发布时间】:2010-11-12 08:57:56
【问题描述】:
如何在 ruby on rails 中设置 test.log 和 development.log 的自动清理?
是否有设置在服务器启动和测试运行时自动删除开发和测试日志?
【问题讨论】:
-
“清理”到底是什么意思?
标签: ruby-on-rails logging
如何在 ruby on rails 中设置 test.log 和 development.log 的自动清理?
是否有设置在服务器启动和测试运行时自动删除开发和测试日志?
【问题讨论】:
标签: ruby-on-rails logging
ruby logger 随时为您提供帮助 - 它具有轮换的默认选项。
这是我的工作:
在environment.rb 中我们定义了自己的记录器
new_logger = Logger.new(File.join(RAILS_ROOT, "log", "new_logger_#{RAILS_ENV}.log"), 'daily')
new_logger.formatter = Logger::Formatter.new
这会创建我们自己的记录器...带有格式化程序(因此您可以获得时间戳等),每个环境都有一个,并且每天轮换。
然后在初始化块中我们要求 Rails 使用这个记录器
Rails::Initializer.run do |config|
config.active_record.logger = new_logger
config.action_controller.logger = new_logger
#snip
end
您显然也可以在这里看到为active_record 和action_controller 提供不同记录器的强大功能 - 有时非常有用!
【讨论】:
RAILS_ROOT 是 Rails.root,RAILS_ENV 是 Rails.env。看起来 Rails 社区不再使用大写锁定了?
rake log:clear 是一个 rake 任务,它将所有匹配 log/*.log 的文件截断为零字节。
您可以在服务器启动和运行测试任务中调用它。
【讨论】:
File.delete() 手动删除磁盘上的所有日志文件(请务必同时删除以.0、.1 等结尾的所有翻转文件)。然后您可以使用@logger.reopen 重置记录器,它将重新创建日志文件
所有脚本/服务器都是 ruby 脚本,我相信你可以修改它来做类似的事情:
#!/usr/bin/env ruby
require 'fileutils'
FileUtils.rm File.join(File.dirname(__FILE__), log, *.log)
require File.dirname(__FILE__) + '/../config/boot'
require 'commands/server'
【讨论】:
在生产环境中,你真的需要 SyslogLogger (http://rails-analyzer.rubyforge.org/tools/files/lib/analyzer_tools/syslog_logger_rb.html),它可以让你写入 syslogd,它会创建,在分布式设置中旋转你的文件。
【讨论】:
经过试验,我发现 Rails 初始化程序加载在正确的位置,您可以使用标准 Ruby File 类截断文件。我在 config/initializers/truncate_logs_on_server_start.rb 中有这个:
if MyRailsApp::Application.config.truncate_logs_on_server_start
# Making an assumption here that we're logging to a file...
File.open("log/#{ENV["RAILS_ENV"]}.log", "w") do |log_file|
log_file.puts("Initializer truncate_logs_on_server_start reset the log file")
log_file.puts
end
end
你只需要在application.rb和各种环境中设置MyRailsApp::Application.config.truncate_logs_on_server_start。
【讨论】: