我試圖在簡單的經典風格的sinatra應用中設置日誌記錄。 (V1.3.2)我定義所有我的設置在environment.rb文件中是這樣的:登錄「經典」風格Sinatra應用
require 'sinatra'
require 'couchrest'
require 'couchrest_model'
require 'json'
require "net/http"
require "uri"
require 'shotgun' # to auto-restart server on page reload
enable :run, :logging
# CouchDB setup
configure do
SiteConfig = OpenStruct.new(
:url_base => 'http://localhost:4567/',
:url_base_db => 'http://localhost:5984/',
:db_name => 'adrequest'
)
end
# Logging setup
logger = Logger.new('vehicle.log')
use Rack::CommonLogger, logger
我的應用程序文件是這樣的:
require './environment'
class Vehicle < CouchRest::Model::Base
use_database CouchRest.database!((SiteConfig.url_base_db || '') + SiteConfig.db_name)
property :url, String
timestamps!
validates_presence_of :url
end
get '/*' do
requesturl = params[:splat].first
@vehicle = Vehicle.new
@vehicle.url = requesturl
@vehicle.save
puts "logger: #{env['rack.logger']}"
puts "env: #{ENV['RACK_ENV']}"
logger.info "written to DB"
end
not_found do
halt 404, 'page not found'
end
結果:
logger: #<Rack::NullLogger:0x007fb4f4ccc238>
env: development
該應用程序創建一個'vehicle.log'文件,但它是空的。如何讓logger.info寫入我的'vehicle.log'文件?
我已閱讀Sinatra自述文件:http://www.sinatrarb.com/intro#Logging。這似乎暗示着所有我需要的是:
enable :logging
然後辛納屈會從機架:: CommonLogger配置的休息,但它並沒有說怎麼做,究竟...
在此先感謝您的任何想法!
評論'使用Rack :: CommonLogger'語句工作嗎? – Kashyap
註釋使用Rack :: CommonLogger具有相同的結果(NullLogger) – Sly
這是一個線索...移動記錄器= Logger.new('vehicle.log')到主應用程序文件使記錄器。因此,出於某種原因,在environment.rb文件中實例化記錄器會阻止路由器看到Logger ...我沒有對此進行解釋......我嘗試在Environment中包裝environment.rb代碼,並且包含在主應用程序文件中查看是否存在導致該問題的某種名稱空間衝突,但Logger仍然模糊不清。不知道爲什麼記錄器不能在像這樣的單獨文件中實例化... – Sly