我遇到了一个问题,我撞到了墙上。基本上,我正在使用此日志记录设置来登录文件,它工作得很好!但是,我想在我建立的方法中使用它...它不会让我!它说这不是一个定义的变量。我猜这是变量范围的问题。我该如何解决这个问题?
这是我的日志记录设置:
class MultiDelegator
def initialize(*targets)
@targets = targets
end
def self.delegate(*methods)
methods.each do |m|
define_method(m) do |*args|
@targets.map { |t| t.send(m, *args) }
end
end
self
end
class <<self
alias to new
end
end
log_file = File.open("/opt/sysnovo/log/server.log", "a")
log = Logger.new MultiDelegator.delegate(:write, :close).to(STDOUT, log_file
这是我的方法(删除文件):
def cleanup
log.info "Running cleanup"
dirs = [ "/opt/sysnovo/tmp", "/opt/sysnovo/data", "/opt/sysnovo/merge" ]
dirs.each do |dir|
# Our file count.
file_count = Dir.glob(File.join("#{dir}", '**', '*')).select { |file| File.file?(file) }.count
# Log and delete!
log.info "Removing #{file_count} files in #{dir}"
FileUtils.rm_rf("#{dir}/.", secure: true)
end
end
所以基本上,方法的log.info INSIDE失败了:
./sysnovo_server.rb:58:in `<main>': undefined local variable or method `log' for main:Object (NameError)
所以我的问题是这样的:如何设置它才能正常工作?或者让log.info在我的方法中工作。或者......我做错了吗?我是Ruby的新手,所以要温柔。
答案 0 :(得分:0)
如果要在方法中使用日志变量,则应将其定义为全局变量,如此
$log = Logger.new MultiDelegator.delegate(:write, :close).to(STDOUT, log_file)
但我建议您创建一个Singleton类来处理日志记录并使用它来记录。