다른 로그 레벨을 사용하는시기


520

치명적인 순서로 메시지를 기록하는 방법에는 여러 가지가 있습니다.

  1. FATAL

  2. ERROR

  3. WARN

  4. INFO

  5. DEBUG

  6. TRACE

언제 사용할 것인지 어떻게 결정합니까?

사용하기에 좋은 휴리스틱이란 무엇입니까?


11
상당히 광범위한 질문입니다. 따라서 실제 로깅 상황에 따라 둘 이상의 응답이 가능합니다. notice이 컬렉션에서 누군가가 그리워 하지 않을 것입니다 ...
Wolf

@Wolf '통지'가이 계층에 속하는 곳은 어디입니까? 그냥 기록을 위해 ...
pgblu

1
noticelog4j와 같은 인기있는 로깅 서비스가 사용하지 않기 때문에 누락 될 수 있습니다.
pgblu

답변:


750

나는 일반적으로 다음 규칙을 구독합니다.

  • 추적 -코드를 "추적"하고 함수의 한 부분 을 구체적 으로 찾으려고 할 때만 가능 합니다.
  • 디버그 -개발자 (IT, sysadmins 등) 이상의 사람들에게 진 단적으로 유용한 정보입니다.
  • 정보 -일반적으로 유용한 로그 정보 (서비스 시작 / 중지, 구성 가정 등). 정보 항상 사용할 수 있기를 원하지만 일반적으로 정상적인 상황에서는 신경 쓰지 않습니다. 이것이 바로 기본 구성 수준입니다.
  • 경고 -응용 프로그램의 이상을 일으킬 수 있지만 자동으로 복구되는 모든 것. (기본 서버에서 백업 서버로 전환, 작업 재시도, 보조 데이터 누락 등)
  • 오류 - 작업에 치명적 이지만 서비스 나 응용 프로그램에는없는 오류입니다 (필수 파일을 열 수 없거나 데이터가 누락되는 등). 이러한 오류는 사용자 (관리자 또는 직접 사용자)의 개입을 강요합니다. 이들은 일반적으로 잘못된 연결 문자열, 누락 된 서비스 등을 위해 (내 앱에서) 예약되어 있습니다.
  • 치명적 -데이터 손실 (또는 추가 데이터 손실)을 방지하기 위해 서비스 또는 응용 프로그램을 강제 종료시키는 오류입니다. 나는 데이터 손상이나 손실이 보장 된 가장 심각한 오류 및 상황에 대해서만이를 예약합니다.

2
왜 정보를 병합하고 경고 할 수 없습니까 ???! 실제로 "정보"에 관한 경고가 아닌가?
mP.

35
@mP 정보를 병합하고 경고 할 수 있습니다. 일반적으로 "공황"원칙으로 인해 분리 된 것 같습니다. 정보가 많고 상태를 표시하지 않으면 "첫 번째"를 볼 가치가 없지만 "경고"가 많은 경우 우선 순위가 지정된 것을보고 싶습니다 (오류 및 치명적 후). 그들. 나는 많은 정보 메시지보다 많은 경고에 더 당황 할 것입니다.
GrayWizardx

3
@ dzieciou 그것은 당신의 특정 요구에 달려 있습니다. 때로는 치명적일 수도 있고 때로는 심각한 경고 일 수도 있습니다. 중요한 서비스에서 4xx를 얻었을 때 계속 의존 할 수 없으며 내 디자인에 오류 / 치명적 일 것입니다. 나중에 사용하기 위해 일부 데이터를 캐시하려고 시도했지만 데이터없이 사용할 수 있으면 WARN이됩니다. 내가 정보를 볼 수있는 유일한 시간은 URL 확인 상태를보고하는 모니터링 앱과 같은 것입니다. 그래서 나는 정보 로그에 URL에서 4xx를 얻었고 계속 진행합니다.
GrayWizardx

2
@GrayWizardx, 다른 요인은 이것이 4xx를받은 클라이언트인지 또는 보낸 서버인지 여부입니다. 첫 번째 경우에는 ERROR (OMG, 올바른 요청을 준비 할 수없는 것은 내 잘못이다)를 사용하려고하는 반면, 후자의 경우 WARN을 기록합니다 (클라이언트가 잘못하여 요청을 올바르게 구성 할 수 없음)
dzieciou

4
나는 이것이 사실이라고 생각한다 Debug - Information that is diagnostically helpful to people more than just developers (IT, sysadmins, etc.).. Logger.Debug는 개발자가 프로덕션에서 매우 까다로운 문제를 추적 할 수 있도록합니다.If you want to print the value of a variable at any given point inside a for loop against a condition
RBT

303

한밤중에 시스템 관리자에게 메시지가 표시되도록 하시겠습니까?

  • 예-> 오류
  • 아니오-> 경고

11
대부분의 사람들을 제외하고 밤에 사람들을 침대에서 꺼내면 신경 쓰지 않습니다. 한 사이트에서 작업을 수행 할 수 없었기 때문에 고객이 심각도 1 도킹 (100 % 중단, 즉 국가)을 발생하도록했습니다. 우리는 그 이후로 그 점수에 대해 "교육을 받았습니다".
paxdiablo

53
FATALsysadmin이 깨어 났을 때 충분히 지불하지 않았다고 판단하고 다시 잠자기 상태가됩니다.
Mateen Ulhaq

134

로그 파일을 보는 관점에서 심각도에 대해 생각하는 것이 더 도움이됩니다.

치명적 / 중요 : 즉시 조사해야하는 전체 응용 프로그램 또는 시스템 오류. 예, SysAdmin을 깨 웁니다. 우리는 SysAdmins 경고를 선호하고 잘 정돈되어 있으므로이 심각도는 매우 드물게 사용해야합니다. 그것이 매일 일어나고 BFD가 아니라면, 그것은 의미를 잃어 버렸습니다. 일반적으로 치명적 오류는 프로세스 수명 동안 한 번만 발생하므로 로그 파일이 프로세스에 연결되어 있으면 일반적으로 로그의 마지막 메시지입니다.

오류 : 확실히 조사해야 할 문제입니다. SysAdmin에 자동으로 알려야하지만 침대에서 끌어 올 필요는 없습니다. 오류를 확인하기 위해 로그를 필터링하면 오류 빈도에 대한 개요를 얻을 수 있으며 일련의 추가 오류가 발생할 수있는 초기 오류를 신속하게 식별 할 수 있습니다. 응용 프로그램 사용과 비교하여 오류율을 추적하면 전체 품질을 평가하는 데 사용할 수있는 MTBF와 같은 유용한 품질 메트릭을 얻을 수 있습니다. 예를 들어이 메트릭은 릴리스 전에 다른 베타 테스트주기가 필요한지 여부를 결정하는 데 도움이 될 수 있습니다.

경고 : 이것은 문제가 될 수도 있고 아닐 수도 있습니다. 예를 들어 네트워크의 짧은 손실 또는 데이터베이스 연결과 같은 예상되는 일시적인 환경 조건은 오류가 아니라 경고로 기록되어야합니다. 경고 및 오류 만 표시하도록 필터링 된 로그를 보면 후속 오류의 근본 원인에 대한 초기 힌트를 신속하게 파악할 수 있습니다. 의미가 없어지지 않도록 경고를 드물게 사용해야합니다. 예를 들어, 네트워크 액세스 손실은 서버 응용 프로그램에서 경고 또는 오류 여야하지만 간혹 연결이 끊긴 랩톱 사용자를 위해 설계된 데스크톱 응용 프로그램의 정보 일 수 있습니다.

정보 : 성공적인 초기화, 서비스 시작 및 중지 또는 중요한 트랜잭션 완료와 같은 정상적인 조건에서 기록해야하는 중요한 정보입니다. 정보 이상을 표시하는 로그를 보면 발생하는 모든 경고 또는 오류를 이해하기위한 최상위 컨텍스트를 제공하는 프로세스의 주요 상태 변경에 대한 빠른 개요를 제공해야합니다. 정보 메시지가 너무 많지 않습니다. 추적과 관련하여 일반적으로 <5 % 정보 메시지가 있습니다.

추적 : 추적은 가장 일반적으로 사용되는 심각도이며 오류 및 경고로 이어지는 단계를 이해하기위한 컨텍스트를 제공해야합니다. 추적 메시지의 올바른 밀도를 가지면 소프트웨어를 유지 관리하기가 훨씬 쉬워 지지만 프로그램이 발전함에 따라 개별 Trace 문의 값이 시간이 지남에 따라 변경 될 수 있으므로 약간의주의가 필요합니다. 이를 달성하는 가장 좋은 방법은 개발자 팀이 고객이보고 한 문제를 해결하는 표준 부분으로 정기적으로 로그를 검토하는 습관을 갖도록하는 것입니다. 더 이상 유용한 컨텍스트를 제공하지 않는 추적 메시지를 제거하고 후속 메시지의 컨텍스트를 이해하는 데 필요한 메시지를 추가하도록 팀에 권장하십시오. 예를 들어, 디스플레이 또는 탭 변경과 같은 사용자 입력을 로그하는 것이 종종 도움이됩니다.

디버그 : 디버그 <트레이스를 고려합니다. 차이점은 디버그 메시지가 릴리스 빌드에서 컴파일된다는 것입니다. 즉, 디버그 메시지 사용을 권장하지 않습니다. 디버그 메시지를 허용하면 점점 더 많은 디버그 메시지가 추가되고 제거되지 않는 경향이 있습니다. 시간이 지나면 노이즈에서 신호를 필터링하기가 너무 어려워 로그 파일이 거의 쓸모 없게됩니다. 이로 인해 개발자는 로그를 사용하지 않아 죽음의 나선이 계속됩니다. 반대로 추적 메시지를 지속적으로 정리하면 개발자는이 메시지를 사용하여 선순환이됩니다. 또한 릴리스 빌드에 포함되지 않은 디버그 코드에서 필요한 부작용으로 인해 버그가 발생할 가능성을 제거합니다. 예, 좋은 코드에서는 발생하지 않아야하지만 안타깝게도 안전합니다.


2
청중에 대해 생각하는 것이 좋습니다. 모든 의사 소통의 핵심은 (그리고 로그 메시지는 의사 소통의 한 형태입니다) 청중과 필요한 것에 대해 생각하는 것입니다.
sleske 2012

18
디버그 <-> 추적 정보 : 적어도 Java-land에서는 우선 순위가 "debug> trace"입니다. 이것이 내가 아는 모든 로깅 프레임 워크 (SLF4J, Logback, log4j, Apache Commons Logging, Log4Net, NLog)입니다. 그래서 디버그 <추적은 나에게는 특이한 것 같습니다.
sleske

1
@Jay Cincotta 훌륭한 답변입니다. 디버그 / 추적은 선호의 문제라고 생각하지만 분명히 이러한 종류의 세부 사항은 응용 프로그램 / 회사마다 다르므로 다른 의견을 보는 것이 좋습니다.
GrayWizardx

5
방금 여러 언어로 7 개의 로깅 프레임 워크를 조사했습니다. "추적"심각도 레벨을 포함하는 세 가지 중에서 모두 디버그보다 덜 심각합니다. 즉, trace <debug; 나는 그 반대가 사실 인 실제 사례가 없다. @RBT 항상 디버거로 침입 할 수있는 것은 아닙니다. 예를 들어, 웹 서버는 제한된 시간 내에 요청을 처리하거나 계측하기 어려운 멀티 스레드 및 / 또는 서버 환경에 있거나 디버거가 옵션이 아닌 버그는 거의 없을 수 있습니다. 또는 당신은 당신이 찾고있는 것을 모른다.
Thanatos

5
@RBT 저는 4 년 넘게 Java 시스템을 사용해 왔습니다. 나는 당신이 요구하는 것이 완전히 비현실적이라고 말할 수 있습니다. IDE 디버깅은 지금까지만 가능합니다. 특정 시점에서, 당신은 단순히 필요 에서 디버그 로그를 다른 시스템 (종종 생산 버그에 무슨 일이 일어나고 있는지 이해하고 해결하기 위해 서버). 로컬 IDE에서 재현 할 수 있다고 생각할 수도 있지만 실제 시스템으로 작업하는 경우 프로덕션 서버에 고유 한 많은 버그가있는 경우가 많습니다.
ADTC

30

다음은 "로거"의 목록입니다.


아파치 log4j : §1 , §2

  1. FATAL:

    [ v1.2 : ..] 매우 심각한 오류 이벤트로 인해 응용 프로그램이 중단 될 수 있습니다.

    [ v2.0 : ..] 응용 프로그램을 계속하지 못하게하는 심각한 오류입니다.

  2. ERROR:

    [ v1.2 : ..] 오류 이벤트로 여전히 응용 프로그램을 계속 실행할 수 있습니다.

    응용 프로그램에서 [ v2.0 : ..] 오류가 발생했을 가능성이 있습니다.

  3. WARN:

    [ v1.2 : ..] 잠재적으로 위험한 상황.

    [ sic ] 일 수있는 [ v2.0 : ..] 이벤트 에서 오류가 발생했습니다.

  4. INFO:

    [ v1.2 : ..] 대략적인 수준에서 응용 프로그램의 진행 상황을 강조하는 정보 메시지.

    정보 제공을위한 [ v2.0 : ..] 이벤트.

  5. DEBUG:

    [ v1.2 : ..] 응용 프로그램을 디버깅하는 데 가장 유용한 세분화 된 정보 이벤트입니다.

    [ v2.0 : ..] 일반 디버깅 이벤트.

  6. TRACE:

    [ v1.2 : ..]보다 세밀한 정보 이벤트 DEBUG.

    [ v2.0 : ..] 세밀한 디버그 메시지로, 일반적으로 응용 프로그램을 통한 흐름을 캡처합니다.


아파치 Httpd는 (평소와 같이) 오버 킬을 좋아한다 : §

  1. 에머 :

    비상 – 시스템을 사용할 수 없습니다.

  2. 경고 :

    즉시 조치를 취해야합니다 (그러나 시스템은 여전히 ​​사용 가능합니다).

  3. 치명타 :

    중요 조건 [조치가 즉시 수행 될 필요는 없음].

    • " socket : 소켓을 가져 오지 못했습니다 (자식을 종료하는 중 "
  4. 오류 :

    오류 조건 [중요하지는 않음].

    • " 스크립트 헤더의 조기 끝 "
  5. 경고 :

    경고 조건. [오류에 가깝지만 오류는 아님]

  6. 공지 사항 :

    정상이지만 중요한 [ 주목할만한 ] 상태.

    • " httpd : 적발 SIGBUS, 코어 덤프 시도 중 ... "
  7. 정보 :

    정보 제공 및 주목할 만함.

    • [ " 서버가 x 시간 동안 실행되었습니다. "]
  8. 디버그 :

    디버그 레벨 메시지 [즉, 디버깅을 위해 로그 된 메시지 )].

    • " 설정 파일을 여는 중 ... "
  9. trace1trace6 :

    추적 메시지 [즉, 추적을 위해 기록 된 메시지 ].

    • " 프록시 : FTP : 제어 연결 완료 "
    • " 프록시 : CONNECT : CONNECT 요청을 원격 프록시로 보내기 "
    • " openssl : 핸드 셰이크 : 시작 "
    • " 버퍼링 된 SSL 여단에서 읽기, 모드 0, 17 바이트 "
    • " 지도 조회 실패 :map=rewritemap key=keyname "
    • " 캐시 조회가 실패하여 새 맵 조회가 강제 실행되었습니다 "
  10. trace7trace8 :

    대량의 데이터를 덤프하는 추적 메시지

    • " | 0000: 02 23 44 30 13 40 ac 34 df 3d bf 9a 19 49 39 15 |"
    • " | 0000: 02 23 44 30 13 40 ac 34 df 3d bf 9a 19 49 39 15 |"

아파치 공통 로깅 : §

  1. 치명적 :

    조기 종료를 유발하는 심각한 오류. 상태 콘솔에 즉시 표시 될 것으로 예상됩니다.

  2. 오류 :

    기타 런타임 오류 또는 예기치 않은 조건 상태 콘솔에 즉시 표시 될 것으로 예상됩니다.

  3. 경고 :

    더 이상 사용되지 않는 API 사용, API 사용 불량, '거의'오류, 바람직하지 않거나 예상치 않지만 반드시 "잘못된"기타 런타임 상황. 상태 콘솔에 즉시 표시 될 것으로 예상됩니다.

  4. 정보 :

    흥미로운 런타임 이벤트 (시작 / 종료) 이것들은 콘솔에서 즉시 볼 수 있으므로 보수적이며 최소한으로 유지하십시오.

  5. 디버그 :

    시스템을 통한 흐름에 대한 자세한 정보. 이것들은 로그에만 쓰여질 것으로 예상됩니다.

  6. 추적 :

    더 자세한 정보. 이것들은 로그에만 쓰여질 것으로 예상됩니다.

엔터프라이즈 사용에 대한 Apache 공통 로깅 "모범 사례"는 교차하는 경계의 종류에 따라 디버그정보를 구분 합니다.

경계는 다음과 같습니다.

  • 외부 경계-예상 예외.

  • 외부 경계-예기치 않은 예외.

  • 내부 경계.

  • 중요한 내부 경계.

(자세한 내용은 공통 로깅 안내서 를 참조하십시오 .)


24

문제에서 복구 할 수 있으면 경고입니다. 실행이 계속되지 않으면 오류입니다.


5
그렇다면 오류와 치명적 오류의 차이점은 무엇입니까?
user192472

37
오류는 사용자가 수행하는 작업 (예 : 존재하지 않는 파일 읽기)이며 치명적인 오류는 사용자에게 수행되는 작업입니다 (예 : 메모리 부족).
Ignacio Vazquez-Abrams

@ IgnacioVazquez-Abrams 나는 당신의 구별 방법을 좋아합니다. 그러나 귀하의 의견은 무엇을 기반으로합니까? iOS 개발자 중 AFIAK fatalError는 파일이 존재하지 않는 경우 와 관련된 어설 션을 작성하는 것이 일반적 입니다. 기본적으로 그것은 당신이 말한 것과 반대입니다.
Honey

@Honey : 모바일 상황에서는 누락 된 파일을 치명적인 오류로 간주하는 것이 합리적입니다.
Ignacio Vazquez-Abrams

23

Syslog 심각도 수준을 채택하는 것이 좋습니다 DEBUG, INFO, NOTICE, WARNING, ERROR, CRITICAL, ALERT, EMERGENCY. http://en.wikipedia.org/wiki/Syslog#Severity_levels를
참조하십시오 .

대부분의 사용 사례에 대해 세밀한 심각도 수준을 충분히 제공해야하며 기존 로그 파서에 의해 인식됩니다. 물론 DEBUG, ERROR, EMERGENCY앱의 요구 사항에 따라 하위 집합 만 구현할 수있는 자유 는 있습니다.

우리가 만드는 모든 다른 앱에 대한 자체 표준을 제시하는 대신 오랜 세월 동안 있었던 것에 대해 표준화합시다. 로그 집계를 시작하고 서로 다른 패턴에서 패턴을 감지하려고하면 실제로 도움이됩니다.


1
코드에서 어떻게 실행되는지 확인하려면 추적 로그가 필요합니다. syslog는이 문제를 해결하기 위해 무엇을합니까?
K-SO의 독성이 증가하고 있습니다.

추적은 일반적으로 syslog를 통해 전송하려는 것이 아니며 대화식 디버깅 세션에이 수준을 자유롭게 추가 할 수 있다고 생각하십니까?
kvz

2
이러한 모든 확장 된 수준은 IMO 로깅의 복잡성을 증가시킵니다. 특정 앱의 요구를 충족시키는 가장 간단한 세트를 사용하는 것이 가장 좋습니다. 나를 위해, 당신은 시작한다 DEBUG, INFO, WARNINGERROR. 개발자는 모든 수준을 볼 수 있어야합니다. SysAdmins INFO및 최종 사용자는 경고 및 오류를 볼 수 있지만 경고 할 프레임 워크가있는 경우에만 볼 수 있습니다 .
ADTC

1
(계속) 앱이 성숙함에 따라 필요한 경우 더 많은 레벨로 확장 할 수 있습니다. 세분화를 제어하는 ​​개발자 DEBUGTRACE개발자 모두 를 위해. 그리고 ERROR다른 레벨이 좋아에 확장 CRITICAL, ALERT, EMERGENCY심각도에 따라 작업을 오류의 심각도를 구별하고 결정합니다.
ADTC

17

복구 할 수있는 경고. 당신이 할 수없는 오류. 그것은 휴리스틱입니다. 다른 사람들은 다른 아이디어를 가질 수 있습니다.

예를 들어, 이름 "Angela Müller"을 응용 프로그램에 입력 / 가져 오기한다고 가정 해 봅시다 (의 움라우트 참고 u). 귀하의 코드 / 데이터베이스 (아마 불구하고 영어를 할 수 없습니다해야 이 시대에있을) 따라서 모든 "이상한"문자는 일반 영어 문자로 변환되었다는 것을 경고 할 수있다.

그 정보를 데이터베이스에 쓰려고 시도하고 60 초 동안 네트워크 다운 메시지를 다시받는 것과는 대조적입니다. 경고보다 오류가 더 많습니다.


데이터베이스가 움라우트를 포함하지 않는 특정 문자 세트에있는 경우이 입력을 거부해야합니다.
Cochise Ruhulessin

Cochise, 세계는 거의 흑백입니다 :-)
paxdiablo

6

다른 사람들이 말했듯이 오류는 문제입니다. 경고는 잠재적 인 문제입니다.

개발시에는 어설 션 오류에 해당하지만 응용 프로그램은 계속 작동 할 수있는 경고를 자주 사용합니다. 이를 통해 그 사건이 실제로 발생하는지 또는 내 상상력인지 확인할 수 있습니다.

그러나 그렇습니다. 그것은 회복 가능성과 현실 측면으로 내려갑니다. 회복 할 수 있다면 아마도 경고 일 것입니다. 실제로 오류가 발생하면 오류입니다.


5

SYSLOG 수준 NOTICE 및 ALERT / EMERGENCY는 응용 프로그램 수준 로깅에 크게 불필요한 것으로 생각되지만 CRITICAL / ALERT / EMERGENCY는 다른 작업 및 알림을 트리거 할 수있는 운영자에게 유용한 경고 수준 일 수 있습니다. 치명적인. 그리고 나는 통지를받는 것과 정보를 얻는 것을 충분히 구별 할 수 없습니다. 정보가 주목할 만하지 않으면 실제로 정보가 아닙니다 :)

Jay Cincotta의 해석이 가장 좋습니다. 코드 실행 추적은 기술 지원에 매우 유용하며, 특히 특정 응용 프로그램 구성 요소의 추적 메시지를 기록하는 동적 필터링 메커니즘과 함께 추적 문을 코드에 자유롭게 입력하는 것이 좋습니다. 그러나 나에게 DEBUG 레벨은 현재 진행중인 것을 파악하는 과정에 있음을 나타냅니다. DEBUG 레벨 출력은 프로덕션 로그에 표시되어야하는 것이 아니라 개발 전용 옵션으로 간주합니다.

그러나 운영 메시지에 대한 기술 지원 또는 개발자 : OPER만큼 sysadmin의 모자를 쓸 때 오류 로그에보고 싶은 로깅 수준이 있습니다. 타임 스탬프, 호출 된 작업 유형, 제공된 인수, (고유 한) 작업 식별자 및 작업 완료를 기록하는 데 사용합니다. 예를 들어 독립 실행 형 작업이 시작될 때 사용됩니다. 더 큰 장기 실행 앱 내에서 실제로 호출됩니다. 문제가 발생했는지 여부에 관계없이 항상 기록하고 싶은 종류이므로 OPER 수준이 치명적보다 높으므로 완전히 자동 모드로 전환하여 끌 수 있습니다. 또한 단순한 INFO 로그 데이터 이상의 기능을 제공합니다. 로그 수준은 종종 과거 가치가없는 사소한 운영 메시지로 스팸 로그에 악용됩니다.

경우에 따라이 정보는 별도의 호출 로그로 보내지거나 더 많은 정보를 기록하는 큰 로그에서 필터링하여 얻을 수 있습니다. 그러나 과거 정보로서, 현재 수행중인 작업을 알기 위해서는 항상 필요합니다. 오작동 또는 시스템 작동과 관련이없는 완전히 별도의 로그 수준 인 AUDIT 수준으로 내려 가지 않고 실제로 위의 수준에 맞지 않습니다 ( 심각도 분류가 아닌 자체 제어 스위치가 필요하며 자체 로그 파일이 필요합니다.


5

RFC 5424에서 Syslog 프로토콜 (IETF)-페이지 10 :

각 메시지 우선 순위에는 십진 심각도 레벨 표시기가 있습니다. 이것들은 숫자 값과 함께 다음 표에 설명되어 있습니다. 심각도 값은 0에서 7 사이의 범위에 있어야합니다.

       Numerical         Severity
         Code

          0       Emergency: system is unusable
          1       Alert: action must be taken immediately
          2       Critical: critical conditions
          3       Error: error conditions
          4       Warning: warning conditions
          5       Notice: normal but significant condition
          6       Informational: informational messages
          7       Debug: debug-level messages

          Table 2. Syslog Message Severities

4

G'day,

이 질문에 대한 결론으로, 로그 레벨에 대한 해석을 전달하고 프로젝트의 모든 사람들이 레벨에 대한 해석에 정렬되도록하십시오.

심각도와 선택한 로그 수준이 일치하지 않는 광범위한 로그 메시지를 보는 것은 고통 스럽습니다.

가능한 다른 로깅 레벨의 예를 제공하십시오. 그리고 정보가 메시지에 기록되도록 일관성을 유지하십시오.

HTH


4

나는 다른 사람들과 완전히 동의하고 GrayWizardx가 가장 잘 말했다고 생각합니다.

내가 추가 할 수있는 것은이 레벨이 일반적으로 사전 정의와 일치하므로 어렵지 않다는 것입니다. 의심스러운 경우 퍼즐처럼 취급하십시오. 특정 프로젝트의 경우 로그하려는 모든 것을 생각하십시오.

이제 치명적일 수있는 것을 알아낼 수 있습니까? 치명적인 의미가 무엇인지 아십니까? 따라서 목록에서 어떤 항목이 치명적입니까?

자, 그것은 치명적입니다. 이제 오류를 봅시다 ... 헹구고 반복하십시오.

치명적인 오류 또는 오류 일 경우, 더 많은 정보가 항상 적은 것보다 낫다는 것을 제안하므로 "위로"오류를 범하십시오. 정보 또는 경고인지 확실하지 않습니까? 그런 다음 경고하십시오.

치명적인 오류는 우리 모두에게 분명해야한다고 생각합니다. 다른 것들은 더 흐릿 할 수 있지만, 그것들을 올바르게하는 것은 덜 중요합니다.

여기 몇 가지 예가 있어요.

치명적 -메모리, 데이터베이스 등을 할당 할 수 없음-계속할 수 없습니다.

오류 -메시지에 답장이없고, 트랜잭션이 중단되었으며, 파일을 저장할 수 없습니다.

경고 -리소스 할당이 X % (예 : 80 %)에 도달했습니다. 이는 다시 차원을 조정하려는 징후입니다.

정보 -사용자 로그인 / 로그 아웃, 새 트랜잭션, 파일 분류, 새 d / b 필드 또는 필드가 삭제되었습니다.

디버그 -내부 데이터 구조 덤프, 파일 이름 및 줄 번호가있는 모든 항목 추적 레벨.
추적-작업 성공 / 실패, d / b 업데이트


3

오류는 잘못된 것, 명백한 잘못된 것, 그 주위에 방법이 없으며 수정해야합니다.

경고는 패턴의 징조 수도 틀릴 수도 있지만, 다음도하지 않을 수 있습니다.

말했듯이, 나는 오류가 아닌 경고의 좋은 예를 생각해 낼 수 없습니다. 이것이 의미하는 것은 경고를 기록하는 데 어려움을 겪으면 근본적인 문제를 해결할 수도 있다는 것입니다.

그러나 "sql execution takes long long"과 같은 것은 경고 일 수 있지만 "sql execution deadlocks"는 오류이므로 결국 몇 가지 경우가있을 수 있습니다.


1
경고의 좋은 예는 MySQL에서 기본적으로 varchar정의 된 것보다 많은 문자를 삽입하려고 하면 값이 잘 렸지만 여전히 삽입한다는 경고입니다. 그러나 한 사람의 경고가 다른 사람의 오류 일 수 있습니다. 제 경우에는 이것이 오류입니다. 데이터베이스와 일치하지 않는 길이를 정의하여 유효성 검사 코드에서 오류가 발생했음을 의미합니다. 그리고 다른 DB 엔진 이이 오류를 오류로 간주하더라도 놀라지 않을 것입니다. 결국 불명예 할 권리가 없습니다. 결국 잘못되었습니다.
Crast

나도 그 오류를 고려할 것입니다. 어떤 경우에는, 내용 (안 데이터 유형 의미) "텍스트", 수단 , 아마도 그것을자를 확인합니다. 또 다른 경우에는 비트가 잘 리면 코드가 손상되거나 의미가 변경되는 코드입니다. 내 의견으로는, 내가 의미하는 바를 추측하는 것은 소프트웨어에 달려 있지 않다. 200 자의 문자열을 150 자만 사용하는 열에 넣으려고하면 그것이 알고 싶은 문제입니다. 그러나 나는 다른 사람들이 만든 구별과 같이 복구 할 수 있다면 경고 일 뿐이지 만 ... 로그해야합니까?
Lasse V. Karlsen

내가 생각할 수있는 한 가지 예는 다음과 같습니다. 일부 메시지는 평소보다 처리 시간이 훨씬 오래 걸립니다. 문제가 있음을 나타낼 수 있습니다 (다른 시스템에 과부하가 걸리거나 외부 리소스가 일시적으로 다운되었을 수 있음).
Laradda

3

필자는 항상 첫 번째 로그 수준에 문제가 있다는 것을 경고하는 것을 고려했습니다. 오류는 저에게 소프트웨어의 주요 목표가 불가능하다는 것을 의미하며 우리는 깨끗하게 종료하려고 노력할 것입니다.


1

다음을 사용하기 전에 시스템을 구축했습니다.

  1. 오류-심각한 문제가 있으며 특정 스레드 / 프로세스 / 시퀀스를 수행 할 수 없음을 의미합니다. 일부 사용자 / 관리자 개입이 필요합니다
  2. 경고-무언가가 옳지 않지만 프로세스가 이전과 같이 수행 될 수 있습니다 (예 : 100 세트의 한 작업이 실패했지만 나머지는 처리 될 수 있음)

내가 만든 시스템에서 관리자는 오류에 대응하라는 지시를 받았습니다. 반면에 우리는 WARNINGS를보고 각 경우마다 시스템 변경, 재구성 등이 필요한지 결정합니다.


1

Btw, 나는 모든 것을 포착하고 나중에 정보를 필터링하는 훌륭한 팬입니다.

경고 수준에서 캡처하고 경고와 관련된 디버그 정보를 원하지만 경고를 다시 만들 수없는 경우 어떻게됩니까?

모든 것을 캡처 하고 나중에 필터링하십시오!

프로세서를 유지할 수 없다는 것을 알지 못하면 임베디드 소프트웨어에서도 마찬가지입니다.이 경우 추적을보다 효율적으로 만들기 위해 다시 디자인하거나 추적이 타이밍을 방해합니다 ( 디버깅을 고려할 있음) 더 강력한 프로세서이지만 웜의 모든 캔을 열어줍니다).

모든 것을 포착 하고 나중에 필터링하십시오!

(btw, 디버그 추적을 보여주는 것 이상의 도구를 개발할 수 있기 때문에 모든 것을 캡처하는 것도 좋습니다. 메시지에서 메시지 시퀀스 차트와 메모리 사용 히스토그램을 그립니다. 미래 (통과 또는 실패 여부에 관계없이 모든 로그를 유지하고 로그 파일에 빌드 번호를 포함시켜야 함).


1

내 두 센트 FATALTRACE오류 로그 수준.

ERROR FAULT (예외)가 발생할 때입니다.

FATAL 실제로 DOUBLE FAULT : 예외 처리 중 예외가 발생하는 경우

웹 서비스에 대한 이해가 쉽습니다.

  1. 요청이 온다. 이벤트는 다음과 같이 기록됩니다INFO
  2. 시스템의 디스크 공간이 부족합니다. 이벤트는 다음과 같이 기록됩니다WARN
  3. 요청을 처리하기 위해 일부 함수가 호출됩니다. 0으로 나누기가 처리되는 동안. 이벤트는 다음과 같이 기록됩니다ERROR
  4. 웹 서비스의 예외 처리기는 0으로 나누기를 처리하기 위해 호출됩니다. 웹 서비스 / 프레임 워크가 이메일을 보내려고하지만 메일 서비스가 오프라인 상태이기 때문에 할 수 없습니다. 웹 서비스의 예외 처리기가 예외를 처리 할 수 ​​없기 때문에이 두 번째 예외는 정상적으로 처리 할 수 ​​없습니다.
  5. 다른 예외 처리기가 호출되었습니다. 이벤트는 다음과 같이 기록됩니다FATAL

TRACE함수 시작 / 종료를 추적 할 수있는 시점입니다. 이 메시지는 일부 디버거에서 생성 할 수 있고 코드가 전혀 호출되지 않았기 때문에 로깅에 관한 것이 아닙니다 log. 따라서 응용 프로그램에서 보내지 않은 메시지는 TRACE레벨 처럼 표시 됩니다. 예를 들어 응용 프로그램을strace

그래서 일반적으로 프로그램에서 당신이 할 DEBUG, INFOWARN로깅. 웹 서비스 / 프레임 워크를 작성하는 경우에만 사용 FATAL합니다. 그리고 응용 프로그램을 디버깅 할 때 TRACE이러한 유형의 소프트웨어에서 로깅을 받습니다 .


0

세 가지 수준 만 사용하는 것이 좋습니다

  1. 치명적-응용 프로그램이 중단 될 수 있습니다.
  2. 정보-정보
  3. 디버그-덜 중요한 정보
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.