web-dev-qa-db-ja.com

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でフォルダー(存在しない場合)を作成する方法は?

22
Mauro Dias

このようなものを試してください。

  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")
44

このようにすることもできます

directory_name = "name"
Dir.mkdir(directory_name) unless File.exists?(directory_name)
14
user2622247

ロギングディレクトリの自動作成は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
5
Kevin Bedell