2011-12-08 24 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

如果您使用rackup,我想您可以在'.ru'文件中更改記錄器,因爲Sinatra的記錄器實際上是Rack的記錄器。 –

+0

我還沒有找到更好的解決方案,因此接受了這個答案。 – randomuser

26

您可以設置使用日誌級別

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

Sinatra將Rack :: Logger設置在其默認中間件中,可以使用日誌級別進行初始化(請參閱http://rack.rubyforge.org/doc/Rack/Logger.html)。 Sinatra使用您的logging設置初始化它,因此您可以將一個數字(或Logger常數)放在那裏,而不僅僅是true

僅供參考,這裏是從Sinatra::Base源代碼初始化機架::記錄器中間件的相關方法(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 

這是Sinatra的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 

然後在不同的環境中配置

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

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

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

這工作一種享受。