【问题标题】:How to create a folder (if not present) with Logger.new?如何使用 Logger.new 创建一个文件夹(如果不存在)?
【发布时间】:2013-02-12 07:45:25
【问题描述】:

我正在尝试注册一个新日志

@@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 创建文件夹(如果不存在)?

【问题讨论】:

    标签: ruby-on-rails ruby logging


    【解决方案1】:

    试试这样的。

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

    【讨论】:

      【解决方案2】:

      rails 中已弃用自动创建日志目录。这是 Logger.new 代码中的一个代码 sn-p:

      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
      

      【讨论】:

      • 感谢您的信息....所以它已被弃用....当我问到时,我想知道是否有一个用于处理文件夹创建的 Logger 初始化程序的参数。 .
      【解决方案3】:

      你也可以这样做

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

      【讨论】:

        猜你喜欢
        • 2011-01-19
        • 2013-09-18
        • 2011-06-21
        • 1970-01-01
        • 2014-11-24
        • 2018-09-05
        • 1970-01-01
        • 2015-09-12
        相关资源
        最近更新 更多