我从 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=production 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
我玩过街区enable :logging, :dump_errors, :raise_errors
内部configure do
,但这没有任何作用。是不是因为我将 sinatra 用作模块化应用程序?在get "/"
路由内部,我可以访问配置块内设置的变量。
所以任何想法,最佳实践是什么,用 sinatra 将错误记录到文件中?