2013-02-26 31 views
20

Tôi đang cố gắng để đăng ký một bản ghi mớiCách tạo thư mục (nếu không có) bằng Logger.new?

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

nhưng khi tôi cố gắng để tạo thư mục mới, đặt nó bên

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

nó trả Errno::ENOENT: No such file or directory

nó có thể là một phép vấn đề? Cách tạo thư mục (nếu không có) bằng Logger.new?

Trả lời

36

Hãy thử một cái gì đó như thế này.

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

cảm ơn, dude –

3

Tự động tạo thư mục ghi nhật ký đã không còn được dùng trong đường ray. Đây là đoạn mã từ mã 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. ") 

Thực hành được chấp nhận bây giờ là đảm bảo tệp nhật ký (và thư mục) tồn tại trước khi tạo nhật ký.

Một cách để đảm bảo rằng các thư mục tồn tại trước thời hạn có thể sử dụng mã tương tự như sau:

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

Cảm ơn bạn cho các thông tin .... Vì vậy, nó đã không được chấp nhận .... Khi tôi đã hỏi, tôi có nghĩa là để biết nếu có một param cho Logger initializer mà sẽ xử lý việc tạo ra các thư mục .. –

10

Bạn cũng có thể làm theo cách này

directory_name = "name" 
Dir.mkdir(directory_name) unless File.exists?(directory_name) 
Các vấn đề liên quan