2013-05-25 1 views
2

저는 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

주를, 그래서 당신은시나 :: 자료에서 상속하는 경우, 당신은 아마 스스로를 사용하려면 :

답변

2

여기에 문서를 읽기

class MyApp < Sinatra::Base 
    configure :production, :development do 
    enable :logging 
    end 
end 
1

내가 파일에 오류 메시지를 이동시나를 만든 유일한 방법이었다

:

$stderr.reopen(<the file path>) 

더 많은 예를 정교

class App < Sinatra::Base 
    configure do 
    set :logging, true 
    set :root, File.dirname(__FILE__) 
    end 

    configure :development, :production do 
    # console log to file 
    log_path = "#{root}/log" 
    Dir.mkdir(log_path) unless File.exist?(log_path) 
    log_file = File.new("#{log_path}/#{settings.environment}.log", "a+") 
    log_file.sync = true 
    $stdout.reopen(log_file) 
    $stderr.reopen(log_file) 
    end 
end 
+1

'STDOUT'을 (를) 다시 사용하면 여객이 작동을 멈추게됩니다./https://github.com/phusion/passenger/wiki/Debugging-application-startup-problems#stdout-redirection – fguillen

관련 문제