2011-12-08 6 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}") 

ऐसा लगता है कि केवल जानकारी या उच्च स्तरीय लॉग संदेश लॉग हैं और DEBUG संदेश लॉग नहीं हैं। मैं DEBUG को लॉग स्तर सेट अप करने का एक तरीका ढूंढ रहा हूं।

उत्तर

6

मुझे लगता है कि एक बेहतर तरीका हो सकता है, लेकिन आप हमेशा एक before फिल्टर में लॉग स्तर की स्थापना की तरह कुछ कर सकते हैं:

before do 
    logger.level = 0 
end 
+0

मैं इसके बारे में सोच रहा था, लेकिन मुझे आशा है कि इससे बेहतर तरीका होगा। – randomuser

+0

यदि आप रैकअप का उपयोग करते हैं, तो मुझे लगता है कि आप अपनी '.ru' फ़ाइल में अपना लॉगर बदल सकते हैं, क्योंकि सिनात्रा का लॉगर वास्तव में रैक से एक है। –

+0

मैं एक बेहतर समाधान खोजने में सक्षम हूं, इसलिए इस जवाब को स्वीकार कर रहा हूं। – randomuser

26

आप का उपयोग कर लॉग स्तर सेट कर सकते हैं

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

सिनात्रा आपको रैक :: लॉगर के डिफ़ॉल्ट मिडलवेयर में सेट करता है, जिसे लॉग स्तर के साथ शुरू किया जा सकता है (http://rack.rubyforge.org/doc/Rack/Logger.html देखें)। सिनात्रा इसे logging सेटिंग के साथ शुरू करता है, ताकि आप true की बजाय वहां एक संख्या (या Logger स्थिर) डाल सकें।

FYI करें, यहाँ Sinatra::Base स्रोत कोड से प्रासंगिक विधि है कि रैक :: लॉगर मिडलवेयर initializes है (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 

यह सिनात्रा 1.3.2 पर है, मैं अगर यह था पता नहीं है पिछले संस्करणों

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 

फिर अलग वातावरण config

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

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

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

में यह एक का इलाज काम करता है।