저는 Rails에서 sinatra로 이동 중이며 로깅을 사용하는 데 문제가 있습니다. 내가 STH 로그 파일 내부Sinatra는 로그 파일에 예외를 표시하지 않습니다.
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
을 좋아 참조,
configure do
Logger.class_eval { alias :write :'<<' }
logger = Logger.new("log/#{settings.environment}.log")
use Rack::CommonLogger, logger
end
모든 요청이 제대로 기록됩니다 나는과 같이 로그인 있어요 않는시나 응용 프로그램을 보유하고 있습니다. 그러나 나는 또한 응용 프로그램 오류를 로그 파일에 기록하려고합니다. 프로덕션 env에서 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
나는 configure do
블록 내부의 enable :logging, :dump_errors, :raise_errors
주위에 해본 적이 있지만, 아무것도하지 않습니다. 내가 sinatra를 모듈 응용 프로그램으로 사용하고 있기 때문에 그렇습니까? get "/"
경로 내에서 configure 블록 내부에 설정된 변수에 액세스 할 수 있습니다.
sinatra를 사용하여 파일에 오류를 기록하는 것이 가장 좋습니다. 로깅은 기본적으로시나 : 응용 프로그램에 대한 설정되어 있는지 http://www.sinatrarb.com/intro.html#Logging
주를, 그래서 당신은시나 :: 자료에서 상속하는 경우, 당신은 아마 스스로를 사용하려면 :
'STDOUT'을 (를) 다시 사용하면 여객이 작동을 멈추게됩니다./https://github.com/phusion/passenger/wiki/Debugging-application-startup-problems#stdout-redirection – fguillen