logging - Sinatra 在日志文件中不显示异常

标签 logging sinatra rack middleware

我从 Rails 转到 sinatra,在使用日志记录时遇到一些问题。我有一个 Sinatra 应用程序,它的日志记录如下:

  configure do
    Logger.class_eval { alias :write :'<<' }
    logger = Logger.new("log/#{settings.environment}.log")
    use Rack::CommonLogger, logger
  end

所有请求都已正确记录,我看到类似

127.0.0.1 - - [25/May/2013 10:34:21] "GET / HTTP/1.1" 200 30 0.0021
127.0.0.1 - - [25/May/2013 10:34:22] "GET /favicon.ico HTTP/1.1" 404 18 0.0041

在日志文件内。但我也想将应用程序错误记录到日志文件中。当我使用 RACK_ENV=生产rackup config.ru 在生产环境中启动应用程序并且发生错误时,它仅记录 500 http 状态,而不记录错误本身。该错误显示在控制台内。这对于开发来说很好,但对于生产来说则不然。错误应该出现在日志文件中以便以后调试。

这是我的config.ru

require 'rubygems'
require 'bundler'
Bundler.require(:default, ENV['RACK_ENV'].to_sym)
disable :run
Encoding.default_external = Encoding::UTF_8

use Rack::ShowExceptions
use Rack::Session::Pool

require File.expand_path '../app.rb', __FILE__
run App

这是我的app.rb

class App < Sinatra::Base
  configure do
    set :public_folder, Proc.new { File.join(root, "public") }
    Logger.class_eval { alias :write :'<<' }
    logger = Logger.new("log/#{settings.environment}.log")
    use Rack::CommonLogger, logger
  end

  get '/' do
    raise "ERROR"
    erb :home, layout: :layout
  end
end

我已经在 configure do block 中使用了 enable :logging, :dump_errors, :raise_errors ,但这没有任何作用。是因为我使用 sinatra 作为模块化应用程序吗?在 get "/" 路由中,我可以访问配置 block 内设置的变量。

那么你知道用 sinatra 将错误记录到文件中的最佳实践是什么吗?

最佳答案

在此处阅读文档:http://www.sinatrarb.com/intro.html#Logging

请注意,默认情况下仅对 Sinatra::Application 启用日志记录,因此如果您继承自 Sinatra::Base,您可能需要自己启用它:

class MyApp < Sinatra::Base
  configure :production, :development do
    enable :logging
  end
end

关于logging - Sinatra 在日志文件中不显示异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16747889/

相关文章:

java - 如何在控制台中为整个项目设置可见的另一级别日志?

logging - 将 NLog 属性布局为 JSON?

mysql - 与 Sinatra 应用程序中包含的类共享数据库连接

ruby-on-rails-3 - 在 Rails 中重命名 session cookie

ruby - 了解 ruby TOPLEVEL_BINDING

c# - 自定义 Log4Net 过滤器级别不写入日志

mysql - 按数据库记录 MySQL 查询

ruby - 把这个 haml 片段变成一个帮助器来干燥 Sinatra

ruby - Virtualbox 端口转发苦难与 Ruby Sinatra :4567/Shotgun:9292

ruby-on-rails - 没有要加载的文件 - Rack