私はシンプルなクラシックスタイルの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 READMEを読んでいます:http://www.sinatrarb.com/intro#Logging。 ::
enable :logging
、次にシナトラはラックからの他の構成を取るCommonLoggerが、それは正確に...
ことを行う方法を言っていない:私が必要とするすべてがあることを示唆しているようですありがとうございました!
'use Rack :: CommonLogger'文はコメントアウトしますか? – Kashyap
Rog :: CommonLoggerは同じ結果(NullLogger)を持っています – Sly
ここに手がかりがあります... logger = new( 'vehicle.log')をメインアプリケーションファイルに移動すると、ロガーが有効になります。ですから、何らかの理由で、environment.rbファイル内のロガーをインスタンス化すると、ルートがLoggerを見ることが妨げられています...これについての説明はありません...モジュール内のenvironment.rbコードをラップしようとしました。問題を引き起こしている何らかの種類の名前空間の競合があったかどうかを確認するために、メインのアプリケーションファイルで、しかし、ロガーはまだ不明瞭です。ロガーが次のような別のファイルでインスタンス化できない理由はわかりません... – Sly