我从 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/