2010-03-02 2 views

답변

15

다릅니다. 많은 개발자는 app 로그 파일을 app/servername.log 또는 Rack 앱이로드 된 현재 경로에 정의합니다.

예 경로를 변경할 수 있습니다. 로그 파일이 APPDIR/sinatra.log 아래에 있습니다이 경우

 
    log = File.new("sinatra.log", "a+") 
    $stdout.reopen(log) 
    $stderr.reopen(log) 

및/또는

 
configure do 
    LOGGER = Logger.new("sinatra.log") 
    enable :logging, :dump_errors 
    set :raise_errors, true 
end 

:

보통 당신은 같은과 함께 config.ru 파일을 얻을. 그러나이 코드는 Rack 앱의 어느 위치 에나있을 수 있으므로 애플리케이션 디렉토리에서 "로그"를 찾으십시오.

 
$ cd projectname 
$ grep -ri 'log' * 

config.ru 및/또는 mainprojectfile.rb를 재미있게 게시하십시오.

+0

안녕하세요. 네, 이것은 저에게 완벽했습니다. log_path에 = ""("매일"log_path에) LOGGER = Logger.new 로그 = File.new (log_path에,의 "+") STDOUT.reopen (로그) STDERR .reopen (log) –

+0

@include : 생산 및 개발 환경을 파일에 기록 할 수 있지만 터미널에 테스트 로그를 만들 수있는 방법이 있습니까? '$ stdout'과'$ stderr'를 다시 열면 테스트 출력도 파일로 리다이렉트하는 것 같습니다. –

+1

STDOUT을 다시 열면 Passenger가 시작되지 않습니다. https://github.com/phusion/passenger/wiki/Debugging-application-startup-problems – fguillen

-2

처음에는 object_id이 동일하지만 $stderr에 지정하는 것이 좋습니다. 지금,

$ irb 
>> $stderr.object_id == STDERR.object_id 
=> true 

같은 객체 : 그것은 또한 당신이 STDERR에 원래 있었던 곳으로 스트림을 반환 열어 둡니다.

>> $stderr = File.open('/tmp/foo', 'w') 
=> #<File:/tmp/foo> 
>> $stderr.puts "Uh-oh, foo" 
=> nil 
>> $stderr.flush # if you want to verify its output 
=> #<File:/tmp/foo> 
>> $stderr.object_id == STDERR.object_id 
=> false 

$stderrSTDERR 다른 개체를 참조, 다른 곳을 보냅니다. STDERR 아직 여기 터미널에 스트림,

>> STDERR.puts "Uh-oh, original STDERR" 
Uh-oh, original STDERR 
=> nil 

$stderr 복원

>> $stderr = STDERR 
=> #<IO:0x106fddb88> 
>> $stderr.object_id == STDERR.object_id 
=> true 

는 그리고 우리는 돌아 왔구나!

관련 문제