개발 모드에서 우리가 집중적으로 디버그 할 때 많이 발생합니다 은 문을 넣고 나중에 코드가 생산으로 옮겨지면 제거하지 못합니다. 그것들을 제거하는 것이 응답 시간을 늘리는 데 도움이됩니까? 서버 콘솔에서 인쇄 할 때 로컬에서이 시나리오를 테스트 할 수는 없지만 프로덕션에서는 어떤 로그에도 인쇄되지 않을 것이라고 확신합니다. 또한 그들이 실행되면 생산에 대한 출력물이 어디 있는지 궁금합니다. 알아낼 방법이 있습니까?을 생산에 넣습니다
답변
우선 어디서나 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를 통해 중앙 집중식 로깅 서버로 전달합니다. 전자 메일, 호출기 또는 텍스트 메시지를 통해 시스템 관리자에게 경고 할 수도 있습니다.
Syslog 설명서를 살펴 보겠습니다. –
puts
의 응답 시간이 길어집니다. 진짜 질문은 얼마나 많은가입니다. 콘솔을 연 상태라면 많은 시간이 걸릴 것입니다. 나는 보통 콘솔 대신에 이맥스를 사용하며, 이맥스 쉘 모드에서 프린트 할 때 막대한 시간이 걸리는 경우가있다. 그러나 추가 시간이 얼마나 적 든간에 필요하지 않을 때 제거하지 않아도됩니다.
장기적으로 볼 때 Tin Man이 제안하는 것은 옳다.하지만 게으르다가 일시적인 해킹을 원한다면 처리 할 방법 중 하나는 puts
을 덮어 쓰지 않고 아무 것도하지 않는 것이다.
def puts *_; end
- 1. will_paginate가 생산에 잘못 표시됩니다.
- 2. Vim은 계속 새 줄에 "*"을 넣습니다.
- 3. 레일 변경 env. 생산에
- 4. 과수원 부분 생산에 배치
- 5. 생산에 이상한 자산 레일
- 6. 때때로 생산에 pyotp이 실패합니다
- 7. 생산에 CocoaPod가 사용됩니까?
- 8. 1.8.5 우연히 생산에
- 9. 엽기 authlogic 문제만을 생산에
- 10. symfony2가 생산에 실패했습니다
- 11. 레일 ckeditor extraplugin 생산에 문제가
- 12. 생산에 적합하지 않은 Infinispan keyset()
- 13. Symfony2 교리 데이터베이스를 생산에 넣으십시오
- 14. 개발에 유효한 jQuery가 생산에 실패했습니다.
- 15. Wordpress 게시 동기화/생산에 게시
- 16. 생산에 이미지 업로드 및 저장
- 17. Log.i를 생산에 사용하는 것이 안전합니까?
- 18. D3 시계가 생산에 나타나지 않음
- 19. 생산에 Jaxer를 사용한 사람이 있습니까?
- 20. 힘내 기 - 어떻게 생산에 밀어?
- 21. 개발/생산에 가능한 서버/그룹
- 22. 레일 생산에 대한 오류 세부 정보가 없습니다.
- 23. 개발/생산에 사용할 인수 클래스 구성
- 24. mac에서 생산에 war 배포 | WinSCP와 동등한 것
- 25. Java toString은 json (gson impl)을 로그에 넣습니다.
- 26. popen()을 수행하고 FILE * 포인터를 fstream에 넣습니다. pclose()는 어떻게됩니까?
- 27. 검도 형식 문자열은 리터럴 '?'을 넣습니다. 잘못된 장소에
- 28. Url.Action은 내 URL에 &을 넣습니다. 어떻게 해결할 수 있습니까?
- 29. 아포스트로피로 저장할 때마다 CKEditor가 내 페이지에 \을 넣습니다.
- 30. pandoc 대괄호로 중괄호를 넣습니다.
'Kules.puts'를'Rails.logger.debug'를 감싸는 래퍼로 패치하면이 실수를 자주 범하는 것이 좋지 않을 수 있습니다. 또한 버전 제어 시스템에 대한 커밋을 신중하게 검토하여 이러한 문제를 피할 수 있습니다. 그것들 중 하나를 사용하지 않는다면, 먼저 그 문제를 해결해야합니다. – tadman
그들이 응답 시간 속도에 대해 많은 상처를 주는지에 대한 응답으로 당신은 "항상 프로파일 링"할 수 있습니다 (제 추측은 그렇지 않습니다). 웹 서버에 있다면 아마도/dev/null로 갈 것입니다 ... – rogerdpack