2009-07-20 12 views

答えて

19

ruby loggerがここであなたを助けるために手の上にある - そしてそれは、デフォルトのオプションを持っています回転。ここで

は、私が何をすべきかです:

environment.rbでは、我々は環境ごとに1で、(あなたがタイムスタンプなどを得る)フォーマッタで...これは私たち自身のロガーを作成します

new_logger = Logger.new(File.join(RAILS_ROOT, "log", "new_logger_#{RAILS_ENV}.log"), 'daily') 
new_logger.formatter = Logger::Formatter.new 

当社独自のロガーを定義します、毎日回転します。時には非常に便利 -

は、次に初期化ブロックで我々はあなたが明らかにactive_recordためとaction_controllerごとに異なるロガーを持ってここにも力を見ることができます

Rails::Initializer.run do |config| 

    config.active_record.logger = new_logger 
    config.action_controller.logger = new_logger 

    #snip 
end 

このロガーを使用するようにレールを頼みます!

+4

注:Rails 3では、 "initalisation block"はdevelopment.rb、production.rbなどにあります。 – bcoughlan

+1

また、Rails 3では 'RAILS_ROOT'は' Rails.root '、' RAILS_ENV'は 'Rails.env'です。 Railsのコミュニティがもうキャップロックに入っていないように見えますか? – Ziggy

2

このチュートリアルのRotating Rails Log Filesを参照してください。問題が解決するかどうかはわかりません。ログファイルは気にしません。

私はあなたを手伝っています!

+0

Unfortunetely logrotateはUnixライクなシステムでのみ利用可能です –

12

​​は、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

実験の後、標準のRuby Fileクラスを使用してファイルを切り捨てることができる正しいポイントにRails初期化子がロードされていることがわかりました。

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を設定する必要があります。私は、設定/初期化子/ truncate_logs_on_server_start.rbでこれを持っています。