2009-07-20 3 views
9

Как настроить автоматическую очистку на test.log и development.log в рубинах на рельсах?Вращение/очистка журнала в Ruby on Rails

Есть ли способ автоматического удаления dev и тестовых журналов при запуске сервера и запуске тестов?

+0

Что именно вы подразумеваете под «очисткой»? – cakeforcerberus

ответ

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 - иногда очень полезно!

+4

Примечание: в Rails 3 ваш «блок инициализации» находится в development.rb, production.rb и т. Д. – bcoughlan

+1

Кроме того, в Rails 3 ваш 'RAILS_ROOT' является' Rails.root ', а' RAILS_ENV' - 'Rails.env'. Похоже, что сообщество Rails больше не входит в кеп-замок? – Ziggy

2

См. Здесь в этом уроке: Rotating Rails Log Files, я не знаю, разрешает ли он вашу проблему, потому что я не забочусь о своих файлах журналов.

Hpe Я помогу вам!

+0

Unfortunetely logrotate доступен только для Unix-подобных систем. –

12

rake log:clear - это задача рейка, которая обрезает все файлы, соответствующие log/*.log, на нулевые байты. Вы можете вызвать его на своем сервере и запустить задачи тестирования.

1

Весь скрипт/сервер, является рубином сценарий, я уверен, вы можете изменить его, чтобы сделать что-то вроде:

#!/usr/bin/env ruby 
require 'fileutils' 
FileUtils.rm File.join(File.dirname(__FILE__), log, *.log) 
require File.dirname(__FILE__) + '/../config/boot' 
require 'commands/server' 
0

После эксперимента я обнаружил, что инициализаторы Rails загружаются в нужную точку, где вы можете обрезать файл, используя стандартный класс Ruby File. У меня есть это в конфигурации/Инициализаторы/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 

Вы только должны установить MyRailsApp::Application.config.truncate_logs_on_server_start в application.rb и различных средах.