2013-02-26 91 views
20

我想註冊一個新的日誌如何使用Logger.new創建文件夾(如果不存在)?

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

但是當我嘗試生成新的文件夾,把它裏面

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

返回Errno::ENOENT: No such file or directory

但願這是一個權限問題? 如何使用Logger.new創建文件夾(如果不存在)?

回答

36

嘗試類似這樣的事情。

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

謝謝你,夥計 – 2013-02-26 18:30:13

3

自動創建日誌目錄在rails中已被棄用。下面是來自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. ") 

上通行的做法是,以確保日誌文件(和目錄)創建記錄之前就已存在。

,以確保該目錄存在的時間提前可能是使用類似的代碼這一點的方法:

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

謝謝爲信息....所以它被棄用....當我問,我的意思是要知道是否有一個參數記錄器初始化器將處理創建的文件夾.. – 2013-02-27 13:37:31

10

你也可以做這樣

directory_name = "name" 
Dir.mkdir(directory_name) unless File.exists?(directory_name) 
相關問題