27

新しいログを登録しようとしています

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

4

3 に答える 3

53

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

  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")
于 2013-02-26T18:17:00.557 に答える
16

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

directory_name = "name"
Dir.mkdir(directory_name) unless File.exists?(directory_name)
于 2014-04-24T07:42:13.233 に答える
6

ロギングディレクトリの自動作成は、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
于 2013-02-26T18:24:27.503 に答える