私は壁に頭をぶつけた問題に遭遇しました。基本的に、私はこのログ設定を使用してファイルにログを記録していますが、うまく機能します! しかし、私が構築したメソッド内でこれを使用したい..それは私をさせません! それは定義された変数ではないと言っています。これは変数スコープの問題だと思います。どうすればこれを修正できますか?
これは私のロギング設定です:
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 は次のように失敗します。
./sysnovo_server.rb:58:in `<main>': undefined local variable or method `log' for main:Object (NameError)
だから私の質問はこれです:これを正しく機能させるにはどうすればよいですか?または、log.info をメソッド内で動作させます。または..私はこれを間違っていますか?私はRubyが初めてなので、優しくしてください。