2013-06-27 1 views
3

개발 모드에서 우리가 집중적으로 디버그 할 때 많이 발생합니다 문을 넣고 나중에 코드가 생산으로 옮겨지면 제거하지 못합니다. 그것들을 제거하는 것이 응답 시간을 늘리는 데 도움이됩니까? 서버 콘솔에서 인쇄 할 때 로컬에서이 시나리오를 테스트 할 수는 없지만 프로덕션에서는 어떤 로그에도 인쇄되지 않을 것이라고 확신합니다. 또한 그들이 실행되면 생산에 대한 출력물이 어디 있는지 궁금합니다. 알아낼 방법이 있습니까?을 생산에 넣습니다

+1

'Kules.puts'를'Rails.logger.debug'를 감싸는 래퍼로 패치하면이 실수를 자주 범하는 것이 좋지 않을 수 있습니다. 또한 버전 제어 시스템에 대한 커밋을 신중하게 검토하여 이러한 문제를 피할 수 있습니다. 그것들 중 하나를 사용하지 않는다면, 먼저 그 문제를 해결해야합니다. – tadman

+0

그들이 응답 시간 속도에 대해 많은 상처를 주는지에 대한 응답으로 당신은 "항상 프로파일 링"할 수 있습니다 (제 추측은 그렇지 않습니다). 웹 서버에 있다면 아마도/dev/null로 갈 것입니다 ... – rogerdpack

답변

5

우선 어디서나 puts을 뿌리지 마세요. 단일 방법으로 "디버그"출력을 병목 현상으로 만듭니다.

def debug_output(s) 
    STDERR.puts s 
end 

--- 

DEBUG_OUTPUT_MINIMUM_LEVEL = 3 
def debug_output(s, level=DEBUG_OUTPUT_MINIMUM_LEVEL) 
    STDERR.puts s if level >= DEBUG_OUTPUT_MINIMUM_LEVEL 
end 

--- 

require 'logger' 

LOGGER_OUTPUT_FILE = '/path/to/log/output' 
def debug_output(s) 
    @logger ||= Logger.new(LOGGER_OUTPUT_FILE) 
    @logger << s 
end 

가 사용 가능한 더 나은 도구가 있습니다 : 당신은 매우 쉽게 예를 들어 등을 마사지, 그것을 리디렉션 출력을 제어 할 수있는 그런 식으로, 이들은 더 정교한 무언가에 대한 간단한 로깅 방법에서 성장 수 있습니다 그래도 puts보다. debugger 또는 PRY을 디버깅 모드에서 사용하는 방법을 배우거나 Ruby에 내장 된 Logger 또는 Syslog을 사용하여 디버깅 수준 출력을 제어 할 수 있습니다.

역사적으로 Syslog 사용에 대한 Ruby의 설명서는 꽤 부족합니다 ... 부족합니다. Ruby v2.0에서는 MUCH가으로 개선되어 매우 잘 문서화되어 있으므로 Logger 또는 Syslog 및 Syslog :: Logger에서 실제 성능을 확인하십시오.

이것은 Syslog의 설명서에서 가져온 것입니다. 다음 작업을 수행 할 수 있다면 코드 디버깅/로깅에 미치는 영향을 고려하십시오.

일반적으로 Syslog 메시지는 중앙 로깅 데몬으로 전달됩니다. 데몬은 그것들을 걸러 낼 수 있습니다; 그것들을 다른 파일 (보통/var/log 밑에 있음)로 보내십시오; SQL 데이터베이스에 배치하십시오. TCP 또는 UDP를 통해 중앙 집중식 로깅 서버로 전달합니다. 전자 메일, 호출기 또는 텍스트 메시지를 통해 시스템 관리자에게 경고 할 수도 있습니다.

+0

Syslog 설명서를 살펴 보겠습니다. –

0

puts의 응답 시간이 길어집니다. 진짜 질문은 얼마나 많은가입니다. 콘솔을 연 상태라면 많은 시간이 걸릴 것입니다. 나는 보통 콘솔 대신에 이맥스를 사용하며, 이맥스 쉘 모드에서 프린트 할 때 막대한 시간이 걸리는 경우가있다. 그러나 추가 시간이 얼마나 적 든간에 필요하지 않을 때 제거하지 않아도됩니다.

장기적으로 볼 때 Tin Man이 제안하는 것은 옳다.하지만 게으르다가 일시적인 해킹을 원한다면 처리 할 방법 중 하나는 puts을 덮어 쓰지 않고 아무 것도하지 않는 것이다.

def puts *_; end 
+1

0과 측정하기 매우 힘든 곳. 1ms라도 페이지를 지연시키는 데는 많은 시간이 걸립니다. – tadman

+0

@ 타드먼 그렇지 않아도됩니다. 이맥스 쉘 모드에서는 그 차이가 엄청납니다. – sawa

+1

그리고 우리 모두는 이맥스가 운영 체제라는 것을 압니다. :-) –

관련 문제