2013-02-26 13 views
20

Próbuję zarejestrować nowy dziennikJak utworzyć folder (jeśli nie jest obecny) za pomocą Logger.new?

@@my_logger ||= Logger.new("#{Rails.root}/log/my.log") 

ale gdy próbuję tworzyć nowe foldery, aby umieścić go wewnątrz

@@my_logger ||= Logger.new("#{Rails.root}/log/today.to_s/my.log") 

zwraca Errno::ENOENT: No such file or directory

Może to być zgoda problem? Jak utworzyć folder (jeśli nie jest obecny) za pomocą Logger.new?

Odpowiedz

36

Spróbuj czegoś takiego.

dir = File.dirname("#{Rails.root}/log/#{today}/my.log") 

    FileUtils.mkdir_p(dir) unless File.directory?(dir) 

    @@my_logger ||= Logger.new("#{Rails.root}/log/#{today}/my.log") 
+0

Dziękuję, koleś –

3

Automatyczne tworzenie katalogów rejestrowania zostało wycofane w szynach. Oto fragment kodu z kodem Logger.new:

ActiveSupport::Deprecation.warn("Automatic directory creation for '#{log}' is deprecated. Please make sure the directory for your log file exists before creating the logger. ") 

przyjętą praktyką teraz jest upewnić się, że plik log (i katalog) występują przed utworzeniem rejestratora.

Sposób, aby upewnić się, że katalog istnieje wyprzedzeniem może być użycie kodu podobnego do tego:

log_file_name = '/path/to/my.log' 
unless File.exist?(File.dirname(log_file_name)) 
    FileUtils.mkdir_p(File.dirname(log_file_name)) 
end 
+0

Dziękuję dla informacji .... Więc został przestarzały ... Kiedy zapytałem, chciałem się dowiedzieć, czy był param dla inicjatora Logger, który obsługiwałby tworzenie folderów ... –

10

Można również zrobić w ten sposób

directory_name = "name" 
Dir.mkdir(directory_name) unless File.exists?(directory_name) 
Powiązane problemy