0

YAML 構成ファイルからアクティブ レコード ロガーのデバッグ レベルを構成しようとしていますが、次のエラーが表示されます。YAML で数値を使用する以外にこれを行うにはどうすればよいですか?

sample.rb:30 warning: toplevel constant LEVEL referenced by Logger::LEVEL
"DEBUG"
ArgumentError: comparison of Fixnum with String failed

ここにsample.rbがあります

require 'java'
require 'active_record'
require 'activerecord-jdbc-adapter'
require 'yaml'
require 'logger'

def get_jar_path
  if __FILE__[/.+\.jar!/] #in case run from JAR
    scriptpath = __FILE__[/(.*)\/.+\.jar!/]
    $1[6..-1]
  else #in case run with jRuby
    '..'
  end
end

def load_config
  path = "#{get_jar_path}/#{File.basename(__FILE__, ".*")}.configuration.yml"
  p path
  $conf = YAML::load_file(path)
end

load_config
LEVEL = $conf['debug_level'] #string 'DEBUG' from configuration file
$log = Logger.new( "#{get_jar_path}/log_#{Time.now.strftime("%Y%m%d")}.txt", 'monthly' )
ActiveRecord::Base.logger = $log
ActiveRecord::Base.logger.level = Logger::DEBUG #works
ActiveRecord::Base.logger.level = Logger::LEVEL #doesn't work
p ActiveRecord::Base.logger.level
$log.info "start #{__FILE__}"
4

1 に答える 1

1

使用可能なログ レベルは、:debug、:info、:warn、:error、:fatal、および :unknown で、それぞれ 0 から 5 までのログ レベル番号に対応します。

http://guides.rubyonrails.org/debugging_rails_applications.html

require 'logger'

puts Logger::DEBUG

--output:--
0


str = "DEBUG"
puts Logger.const_get(str)

--output:--
0

したがって、次のようにする必要があります。

level = $conf['debug_level'] #string 'DEBUG' from configuration file
$log = Logger.new( "#{get_jar_path}/log_#{Time.now.strftime("%Y%m%d")}.txt", 'monthly' )
ActiveRecord::Base.logger = $log
ActiveRecord::Base.logger.level = Logger.const_get(level)

現在のスコープで定数 LEVEL を定義すると、その定数が Logger スコープに表示され、Logger::LEVEL と記述できると考えた理由がわかりません。あなたは本質的にこれをしました:

MYCONST = "hello"

module SomeModule
  SOMECONST = "goodbye"
end

あなたは書ける:

puts MYCONST   #=>hello

..そして、あなたは書くことができます:

puts SomeModule::SOMECONST  #goodbye

..しかし、あなたは書くことができません:

puts SomeModule::MYCONST

--output:--
1.rb:10:in `<main>': uninitialized constant SomeModule::MYCONST (NameError)
于 2013-08-28T08:21:15.333 に答える