Ротация / очистка логов в Ruby on Rails - PullRequest
9 голосов
/ 20 июля 2009

Как настроить автоматическую очистку test.log и development.log в ruby ​​on rails?

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

Ответы [ 6 ]

19 голосов
/ 21 июля 2009

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

13 голосов
/ 20 июля 2009

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

2 голосов
/ 20 июля 2009

Смотрите здесь в этом уроке: Файлы журналов вращающихся рельсов , я не знаю, решит ли это вашу проблему, потому что я не забочусь о своих файлах журналов.

Надеюсь, я тебе помогаю!

1 голос
/ 21 июля 2009

Все сценарии / серверы являются сценариями 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'
0 голосов
/ 05 апреля 2013

После экспериментов я обнаружил, что инициализаторы 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

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

0 голосов
/ 30 сентября 2009

В производственной среде вам действительно нужен SyslogLogger (http://rails -analyzer.rubyforge.org / tools / files / lib / analyzer_tools / syslog_logger_rb.html ), он позволяет писать в syslogd, который создает , вращает ваши файлы в распределенной настройке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...