如何在Ruby on Rails中设置自动清理test.log和development.log日志?
是否有设置可以在服务器启动和测试运行时自动删除dev和test日志的选项?
如何在Ruby on Rails中设置自动清理test.log和development.log日志?
是否有设置可以在服务器启动和测试运行时自动删除dev和test日志的选项?
Ruby日志记录器可以帮助你 - 它默认提供轮换选项。
这是我所做的:
在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社区不再使用大写锁定键了? - Ziggyrake log:clear
是一个rake任务,它会将所有匹配 log/*.log
的文件截断为零字节。
你可以在服务器启动和运行测试任务中调用它。
File.delete()
手动删除磁盘上的所有日志文件(请确保还删除了以 .0
、.1
等结尾的任何回滚文件)。然后,您可以使用 @logger.reopen
重置记录器,它将重新创建日志文件。 - abhchand#!/usr/bin/env ruby
require 'fileutils'
FileUtils.rm File.join(File.dirname(__FILE__), log, *.log)
require File.dirname(__FILE__) + '/../config/boot'
require 'commands/server'
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
即可。