2008-10-09 4 views
46

로그 수준 WARN, ERROR 및 FATAL은 매우 명확합니다. 하지만 뭔가가 디버그 일 때, 그리고 언제 정보일까요?사용할 로그 수준을 결정하는 방법은 무엇입니까?

INFO 레벨에서 귀찮게 자세한 프로젝트를 보았지만 DEBUG 레벨을 너무 많이 사용하는 코드를 보았습니다. 두 경우 모두 소음에 유용한 정보가 숨겨져 있습니다.

로그 수준을 결정하기위한 기준은 무엇입니까?

답변

89

나는 굳건한 규칙이 없다고 생각합니다.

  • FATAL : 응용 프로그램 (또는 아주 최소한 스레드) 끔찍하게 죽을 수있는 log4j에 형 레벨을 사용, 내 '엄지 손가락의 규칙은'같은 것이 있습니다. 이것은 을 설명하는 정보가 왜이되는지에 대한 것입니다.
  • ERROR : 앱이하고있는 일을해서는 안되는 것. 이것은 사용자 오류가 아닙니다 ('invalid search query'); 어설 션 실패, 네트워크 문제 등입니다. 아마도 현재 작업을 중단 할 것입니다.
  • WARN : 작업과 관련이 있지만 작동을 중지시키지 않는 것이 있습니다. DB 풀의 커넥션 수는 낮아지고, 예상외의 예상 타임 아웃과 같은 경우가 있습니다. 나는 종종 'WARN'을 집합 적으로 유용한 것으로 생각합니다. 예 :grep, group, count를 사용하여 시스템 상태에 영향을주는 사항을 확인하십시오.
  • INFO : 정상적인 작동은 앱의 정상적인 작동에 포함됩니다. 진단 항목으로 돌아가서 '이 광범위한 수준의 작업이 얼마나 자주 발생 했습니까?'또는 '사용자의 데이터가이 상태에 어떻게 도달 했습니까?'라고 말할 수 있습니다.
  • DEBUG : 기본적으로 해제되어 특정 예상치 못한 문제를 디버깅 할 수 있습니다. 여기서는 코드의 특정 '문제가있는'영역에서 주요 메소드 매개 변수 또는 가능한 문제를 찾는 데 유용한 기타 정보에 대한 자세한 정보를 기록 할 수 있습니다.
  • TRACE는 "진심으로, WTF는 여기에 가고 나는 내가 정신이 가기 전에이 @ # $ @ 보내고 메모리 손상 버그를 발견하기 위해 실행할 매일 문을 로그인해야?!?!"

돌로 세워진 것이 아니라 내가 어떻게 생각하는지에 대한 대략적인 생각.

5

누가 각 단계를 사용해야하는지 생각하십시오. 코드 내에서 DEBUG은 개발자 출력용으로 예 약되어 있습니다. 출력은 개발자에게만 도움이됩니다. VERBOSE은 많은 정보가 필요한 일반 사용자에게 사용됩니다. 정보 일반적으로 중요한 이벤트를 표시하는 데 사용됩니다 (예 : 웹 페이지 보내기, 중요한 사항 확인).

FAILWARN은 매우 자명합니다.

+0

많은 정보 나 경고가 개발자에게 도움이 될 것이라고 생각합니다. – Casebash

7

비공식적으로는 내가 계층 구조의이 종류,

  • DEBUG를 사용 - 단지 생긴 일 - - 중요한 아무것도
  • 이 WARN, 단지 플래그 - 실제 추적
  • 정보 값 모두의 작업을하지만, 뭔가 잘못되고 ' 꽤 기대되는 것
  • ERROR - 해결해야 할 것이 있지만 다른 (독립적 인) 활동을 수행 할 수 있습니다.
  • 치명적 - 충분히 심각한 오류 우리가 수행하지 말아야 할 것

나는 일반적으로 INFO로 기록되지만, 로그 파일이 실제로 검토되고 (크기는 문제가 아님) 알 경우에만 그렇지 않으면 WARN입니다.

3

우리 팀의 규칙은 메시지에서 무언가를 계산하는 경우 debug을 사용하는 반면 일반 텍스트는 info입니다. 따라서 실제로 info에서 무슨 일이 일어나고 있는지를 보여주고 debug은 현재 일어나는 일의 가치를 보여줍니다.

1

나는 심지어 경고가 아닌 메시지를 사용자에게 보내려는 경향이 있습니다. DEBUG는 코드를 통해 흐름을 추적하는 데 도움이되는 메시지를 출력하는 개발자 용 (변수 값 포함) 경향이 있습니다.

또 다른 레벨의 DEBUG (DEBUG2?)는 모든 버퍼의 16 진 덤프와 같은 디버그 정보의 절대 bucketload를 제공합니다.

0

DEBUG2 레벨이 필요하지 않습니다. 그것은 'TRACE'가있는 것입니다. TRACE는보고 싶은 모든 정보를 출력하는 가장 낮은 수준의 로깅을 목표로합니다.

대용량 정보를 피하려면 일반적으로 전체 프로젝트에서 추적 수준 로깅을 사용하지 않는 것이 좋습니다. 대신 'DEBUG'을 사용하여 버그에 대한 일반적인 정보와 그 버그가 발생한 위치 (따라서 이름)를 찾은 다음 여전히 파악할 수없는 경우 해당 구성 요소에 대해서만 TRACE를 활성화하십시오.

관련 문제