2011-12-08 22 views
6

günlük düzeyini değiştirmek için:Benim Sinatra app günlüğünü etkinleştirmek için bu kodu kullanıyorum Sinatra

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

gerçek günlüğü kullanılarak yapılır:

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

O çıkıyor sadece BİLGİ veya daha yüksek seviyeli günlük mesajları kaydedilir ve DEBUG mesajları kaydedilmez. Günlük seviyesini DEBUG olarak ayarlamanın bir yolunu arıyorum. Orada daha iyi bir yolu olabilir, ama her zaman bir before filtresinde günlük düzeyinin ayarlanması gibi bir şey sanırım

cevap

6

:

before do 
    logger.level = 0 
end 
+0

Aynı şeyi düşünüyordum da, bundan daha iyi bir yol olduğunu umuyorum. – randomuser

+0

Eğer rackup kullanırsanız, sanırım Sinatra'nın logger'ı aslında Rack'den biri olduğu için logger'ınızı '.ru' dosyanızda değiştirebilirsiniz. –

+0

Bu cevabı kabul ederek daha iyi bir çözüm bulamadım. – randomuser

26

kullanarak günlük düzeyini ayarlayabilirsiniz

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

Sinatra, logaritma seviyesi ile başlatılabilen Rack :: Logger'ı varsayılan ara katmanında ayarlar (bkz. http://rack.rubyforge.org/doc/Rack/Logger.html). Sinatra, logging ayarınız ile başlatır, böylece sadece true yerine bir sayı (veya Logger sabit) yerleştirebilirsiniz. imiş

Bilginize, burada Raf :: Kaydedici ortakatmanını başlatır Sinatra::Base kaynak kodundan ilgili yöntemdir (found here)

Bu Sinatra 1.3.2 üzerindedir
def setup_custom_logger(builder) 
    if logging.respond_to? :to_int 
    builder.use Rack::Logger, logging 
    else 
    builder.use Rack::Logger 
    end 
end 

, bilmiyorum Ben güvenilir çalışmayı giriş yapabilmem için tek yol olduğunu önceki sürümleri

benim durumda
4

farklı şöyledir: (basitleştirilmiş örnek)

Öncelikle logger kurmak ve aşağıdaki gibi günlük klasörü:

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 

Sonra ayrı çevre yapılandırma

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

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

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

Bu bir tedavi çalışır.