2010-10-15 14 views
9

Devo cambiare il percorso di registro predefinito dell'applicazione mia rail a causa del processo di distribuzione del software interno della mia azienda: in pratica la mia app per rails finisce in una posizione di sola lettura e ho bisogno dei file di log scritti in una directory "creata per questo".Come modificare il percorso di log predefinito di Rails 3.0?

Con Rails 2.x abbiamo aggiunto un po 'di magia nera nel nostro script FCGI per forzare quello in quando è stato distribuito su prod. padroni di casa:

class Rails::Configuration 
    def default_log_path 
    File.join(ENV['SOME_ENVIRONMENT_VAR'], "var/output/logs/rails.log") 
    end 
end 

Tuttavia, configurazione non è una classe più in Rails 2.3 (si tratta di un modulo), e mi sembra non v'è alcuna default_log_path coinvolti c'è più così ...

risposta

7

Hai solo bisogno di definire il tuo logger

config.logger = ActiveSupport::BufferedLogger.new(File.join(ENV['SOME_ENVIRONMENT_VAR'], "var/output/logs/rails.log")) 

Questo trucco funziona anche con Rails 2. E puoi definire per ambiente dove vuoi veramente il tuo file di registro.

+2

In realtà Rails3 (almeno) ha un percorso config.log che ho usato e funzionato perfettamente. Ma non avrei trovato senza la tua (in realtà molto sensata) soluzione :) – Romain

+0

come vuoi. Puoi anche cambiare il tuo logger con la configurazione di config.logger. Usa Syslogger con l'esempio. Metti la tua trovata in risposta. È molto meglio – shingara

+0

In realtà, esiste una fonte di informazioni canonica su queste proprietà di configurazione? Non ne ho trovato uno completo finora ... – Romain

6

L'impostazione config.log_path è stato deprecato - la soluzione consigliata è ora:

config.paths.log = "/some/path/#{Rails.env}.log"

+1

Questa sintassi non sembra corretta. Nel blocco di configurazione, se si esegue un 'config.paths ['logfile'] = '...'' sembra giusto ma LogTailer si lamenta ancora. – aceofspades

+2

Per me, 'config.paths ['log']' come suggerito da @aceofspades (sotto, non 'logfile') ha funzionato bene. – iGEL

4

Come di Rails 3.2.3, si presenta come il percorso di registro viene anche definito Rails::Rack::LogTailer#initialize, e che viene da Rails: : server # log_path.

LOG_PATH = "log/mylog.log" 

require 'rails/commands/server' 
module Rails 
    class Server 
    def log_path 
     LOG_PATH 
    end 
    end 
end 

class Application < Rails::Application 
    ... 
    config.paths['log'] = LOG_PATH 
    ... 
end 
Problemi correlati