私は Rails から sinatra に移行していますが、ロギングの使用に問題があります。私は Sinatra アプリを持っています。それは次のようにログを記録します:
configure do
Logger.class_eval { alias :write :'<<' }
logger = Logger.new("log/#{settings.environment}.log")
use Rack::CommonLogger, logger
end
すべてのリクエストが適切にログに記録されます。sth のように表示されます
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でエラーをファイルに記録するためのベストプラクティスは何ですか?