2010-10-15 21 views
9

Muszę zmienić domyślną ścieżkę dziennika mojej aplikacji kolejowej ze względu na wewnętrzny proces wdrażania oprogramowania mojej firmy: w zasadzie moja aplikacja szynowa kończy się na lokalizacji tylko do odczytu i potrzebuję plików dziennika zapisanych w katalogu "stworzonym do tego".Jak zmienić domyślną ścieżkę dziennika Rails 3.0?

Z Railsami 2.x dodaliśmy czarną magię w naszym skrypcie FCGI, aby zmusić ją do użycia po uruchomieniu na prod. Gospodarze:

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

jednak konfiguracja nie jest klasą już w Rails 2.3 (jest to moduł), i wydaje mi się, że nie ma żadnego default_log_path zaangażowany już tam także ...

Odpowiedz

7

Potrzebujesz tylko zdefiniować swój logger

Ta sztuczka działa również z Rails 2. Możesz zdefiniować środowisko, w którym naprawdę chcesz mieć swój plik dziennika.

+2

Właściwie Rails3 (przynajmniej) ma ścieżkę config.log, której użyłem i działałem idealnie. Ale nie znalazłbym bez twojego (właściwie bardzo rozsądnego) rozwiązania :) – Romain

+0

jak chcesz. Możesz zmienić swój logger również za pomocą konfiguracji config.logger. Użyj Syslogger przez przykład. Umieść swoją znalezioną odpowiedź. Jest lepiej. – shingara

+0

Właściwie, czy istnieje kanoniczne źródło informacji o tych właściwościach konfiguracyjnych? Nie znalazłem dotąd żadnej kompleksowej ... – Romain

6

Ustawienie config.log_path została zaniechana - zalecanym rozwiązaniem jest teraz:

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

+1

Ta składnia nie jest poprawna. W bloku konfiguracyjnym, jeśli robisz 'config.paths ['logfile'] = '...'', który wydaje się odpowiedni, ale LogTailer nadal narzeka. – aceofspades

+2

Dla mnie 'config.paths ['log']' jak zasugerowane przez @aceofspades (poniżej, nie 'logfile') działało dobrze. – iGEL

4

Jak Rails 3.2.3, wygląda na ścieżkę dziennika jest również zdefiniowane w Rails::Rack::LogTailer#initialize i że pochodzi z Rails: : Server # ścieżka_logu.

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 
Powiązane problemy