2011-12-08 11 views
6

Estoy usando este código para habilitar el registro en mi Sinatra aplicación:Cómo cambiar el nivel de registro en Sinatra

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

El registro actual es realizado usando:

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

Resulta que sólo INFO o mensajes de registro de nivel superior se registran y los mensajes DEBUG no se registran. Estoy buscando una manera de configurar el nivel de registro para DEPURAR.

Respuesta

6

supongo que podría haber una mejor manera, pero siempre se puede hacer algo como establecer el nivel de registro en un filtro before:

before do 
    logger.level = 0 
end 
+0

Estaba pensando en lo mismo, pero espero que haya una mejor manera de hacerlo. – randomuser

+0

Si usa el rackup, supongo que puede cambiar su registrador en su archivo '.ru', ya que el registrador de Sinatra es, de hecho, el de Rack. –

+0

No he podido encontrar una mejor solución, por lo tanto, acepto esta respuesta. – randomuser

26

puede establecer el nivel de registro usando

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

Sinatra lo configura con Rack :: Logger en su middleware predeterminado, que se puede inicializar con un nivel de registro (consulte http://rack.rubyforge.org/doc/Rack/Logger.html). Sinatra lo inicializa con su configuración logging, por lo que puede poner un número (o Logger constante) allí en lugar de solo true.

FYI, aquí está el método correspondiente a partir del código fuente Sinatra::Base que inicializa el middleware rack :: Logger (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 

Se trata de Sinatra 1.3.2, no sé si era diferente en versiones anteriores

4

en mi situación, la única manera que podría conseguir el registro en funcionar de forma fiable era la siguiente: (ejemplo simplificado)

en primer lugar puedo configurar el registrador y la carpeta de registro de la siguiente manera:

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 

A continuación, en el entorno de configuración aparte

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

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

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

Esto funciona un convite.

Cuestiones relacionadas