Записать ошибки в файл журнала в Ruby - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь перехватить ошибки, проверить каталог / tmp и затем записать ошибку в лог-файл в этом каталоге, в настоящее время я получаю:

.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/fileutils.rb:252:in `mkdir': Permission denied @ dir_s_mkdir - /temp

Вот мой код:

require 'logger'
require 'tmpdir'

temp = Dir.tmpdir()
log = Logger.new File.open("#{temp}/error.log", 'w')
log.level = Logger::INFO

begin

rescue StandardError => e
   log.error "Error - #{e}"
   puts "For detailed error messages, see: #{temp}/error.log"
end

Я полагаю, что эта ошибка связана с тем, что я пытаюсь сделать что-то, на что у меня нет разрешения, чего я не понимаю, есть ли чистый способ достичь того, что я пытаюсь сделать?Заранее благодарим за то, что потратили время на решение этой проблемы.

Я отредактировал это, обновив код, отвечающий на мой вопрос.Спасибо за ваш вклад.

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Чтобы он работал и был совместим с Windows:

require 'logger'
require 'tmpdir'

tmp = Dir.mktmpdir
log = Logger.new File.open(File.join(tmp, 'error.log', 'w')
log.level = Logger::INFO

begin
  # your code here
rescue StandardError => e
  log.error "Error - #{e}"
  puts "For detailed error messages, see the file: /temp/error.log"
end
0 голосов
/ 19 ноября 2018
  1. Вы не должны создавать каталог / tmp - этот каталог всегда существует.
  2. Вы должны поставить begin над проверочным кодом, а не ниже.
    require 'logger'
    require 'fileutils'

    begin
      log = Logger.new File.open('/tmp/error.log', 'w')
      log.level = Logger::INFO  
    rescue StandardError => e
      puts "Error - #{e}"
    end
...