2011-12-08 9 views
6

にログレベルを変更する方法:私はシナトラのアプリでログを有効にするには、このコードを使用していシナトラ

log_file = File.new('my_log_file.log', "a") 
$stdout.reopen(log_file) 
$stderr.reopen(log_file)  
$stdout.sync=true 
$stderr.sync=true 

実際のロギングが使用して行われます。

logger.debug("Starting call. Params = #{params.inspect}") 

それはことが判明しただけINFO以上のログメッセージが記録され、DEBUGメッセージは記録されません。私はDEBUGにログレベルを設定する方法を探しています。

答えて

6

私はより良い方法があるかもしれないと思いますが、あなたは常にbeforeフィルタでログレベルを設定するような何かを行うことができます。

before do 
    logger.level = 0 
end 
+0

私は同じことを考えていましたが、これよりも良い方法があることを願っています。 – randomuser

+0

ラックアップを使用している場合、Sinatraのロガーは実際にはRackのものであるため、 '.ru'ファイルでロガーを変更することができます。 –

+0

私はより良い解決策を見つけることができたので、この答えを受け入れることができませんでした。 – randomuser

26

あなたは

configure :development do 
    set :logging, Logger::DEBUG 
end 

を使用してログレベルを設定することができますSinatraはデフォルトのミドルウェアでRack :: Loggerをセットアップします。これはログレベルで初期化できます(http://rack.rubyforge.org/doc/Rack/Logger.html参照)。 Sinatraはloggingの設定で初期化しますので、trueの代わりに数字(またはLoggerの定数)を入力することができます。それがあった場合

FYI、ここではラックを初期化Sinatra::Baseソースコードから、関連する方法は、これはシナトラ1.3.2上でロガーミドルウェア(found here

def setup_custom_logger(builder) 
    if logging.respond_to? :to_int 
    builder.use Rack::Logger, logging 
    else 
    builder.use Rack::Logger 
    end 
end 

::で、私は知りません次のように私は確実に動作するためにログインしますことができる唯一の方法だった私の状況では、以前のバージョン

4

で異なる:(簡略化した例)

は、まず私がロガーを設定し、次のようにフォルダをログ:

require 'logger' 

configure do 
    log_dir = "#{root}/log" 
    Dir.mkdir(log_dir) unless Dir.exists?(log_dir) 
    file = File.new("#{log_dir}/#{environment}.log", 'a+') 
    file.sync = true 
    use Rack::CommonLogger, file 
end 

はその後、別の環境設定

configure :test do 
    set :logging, Logger::ERROR 
end 

configure :development do 
    set :logging, Logger::DEBUG 
end 

configure :production do 
    set :logging, Logger::INFO 
end 

にこれは御馳走に動作します。

関連する問題