如何在rails上的ruby中的test.log和development.log上设置自动清理?
是否有设置在服务器启动和测试运行时自动删除开发和测试日志?
答案 0 :(得分:19)
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
设置不同的记录器 - 有时非常有用!
答案 1 :(得分:13)
rake log:clear
是一个rake任务,它将所有匹配log/*.log
的文件截断为零字节。
您可以在服务器启动时调用它并运行测试任务。
答案 2 :(得分:2)
请参阅本教程中的Rotating Rails Log Files,我不知道它是否解决了您的问题,因为我不关心我的日志文件。
Hpe我在帮助你!
答案 3 :(得分:1)
所有脚本/服务器都是一个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'
答案 4 :(得分:0)
在生产环境中,你真的需要SyslogLogger(http://rails-analyzer.rubyforge.org/tools/files/lib/analyzer_tools/syslog_logger_rb.html),它允许你写入syslogd,这是creansup,在分布式设置中旋转你的文件。
答案 5 :(得分:0)
经过实验,我发现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
。