新しいログを登録しようとしています
@@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でフォルダー(存在しない場合)を作成する方法は?
このようなものを試してください。
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")
このようにすることもできます
directory_name = "name"
Dir.mkdir(directory_name) unless File.exists?(directory_name)
ロギングディレクトリの自動作成は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