2009-07-20 64 views

回答

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_recordaction_controller - 有時用處很大!

+4

注意:在Rails 3中,你的「initalisation block」是在development.rb,production.rb等中。 – bcoughlan 2011-03-11 01:31:24

2

在本教程中看到這裏:Rotating Rails Log Files,我不知道它是否可以解決您的問題,因爲我不關心我的日誌文件。

Hpe我幫你!

+0

不幸的logrotate只適用於類Unix系統 – 2009-07-20 16:46:52

12

​​是一個rake任務,它將與log/*.log匹配的所有文件截斷爲零字節。 你可以在服務器啓動時調用它並運行測試任務。

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' 
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_startapplication.rb中和各種環境。