4.1 로깅 수준 목록

프로그램을 작성하고 서버에 업로드한 다음 즉시 질문을 하기 시작합니다.

  • debug()에서 작업하는 동안 방법이 작동하지 않도록 하려면 어떻게 해야 합니까 production?
  • 로그에 너무 많은 정보가 있습니다. 오류 메시지만 남기시겠습니까?
  • 애플리케이션의 한 부분에 대한 자세한 로그를 보는 방법은 무엇입니까?

물론 로그를 만든 사람들은 수십 년 전에도 똑같은 일에 직면했습니다. 이 문제가 C언어에서는 어떻게 해결되었는지는 말하지 않겠지만 자바언어에서는 아주 아름답게 해결되었습니다.

로그는 에 정보를 쓰기 전에 데이터를 필터링합니다 . 로깅 수준을 설정하여 로그의 세부 사항을 매우 빠르게 줄이거나 늘릴 수 있습니다. 이러한 수준은 아래 표에 설명되어 있습니다.

수준 메모
1 모두 모든 메시지 기록
2 추적하다 디버깅 시 작은 메시지
디버그 디버깅에 중요한 메시지
4 정보 간단한 메시지
5 경고하다 치명적, 오류 및 경고만 작성
6 오류 오류 및 치명적 오류만 쓰기
7 치명적인 치명적 오류만 작성
8 끄다 로그에 메시지를 쓰지 않음

이러한 수준은 메시지를 필터링할 때 사용됩니다. 로깅 수준을 로 설정하면 WARN다음보다 덜 중요한 모든 메시지가 WARN삭제됩니다: TRACE, DEBUG, INFO. 필터링 수준을 로 설정 FATAL하면 ERROR.

OFF필터링에 사용되는 심각도 수준에는 이 (모든 메시지 삭제) 및 모든 메시지 쓰기(아무것도 삭제) 의 두 가지 심각도 수준이 더 있습니다 ALL.

4.2 로그 설정 예시

간단한 로그 설정 예제를 살펴보겠습니다. 이렇게 하려면 자원 폴더에 배치할 수 있는 log4j.properties 파일이 필요합니다. 다음 콘텐츠를 추가해 보겠습니다.

# Root logger option
log4j.rootLogger=WARN, stdout

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}

여기 첫 번째 줄에서 로깅 수준을 설정합니다 - WARN. 이는 상태와 함께 로거에 기록된 메시지가 무시 DEBUG됨을 의미합니다 INFO.

  • 우리가 사용할 어펜더 유형 지정 -ConsoleAppender
  • 로그를 작성할 위치 지정 -System.out
  • 녹음 형식을 제어할 클래스를 설정합니다.PatternLayout
  • 모든 메시지의 녹음 형식 설정 - 날짜 및 시간

4.3 자주 발생하는 로깅 실수

그리고 한 가지 더 중요한 점은 로깅에서 흔히 발생하는 오류입니다. 무언가를 할 수 있는 옵션은 그리 많지 않지만 몇 가지 일반적인 실수를 식별할 수 있습니다.

  1. 너무 많은 로깅 . 이론적으로 중요할 수 있는 모든 단계를 기록해서는 안 됩니다. 규칙이 있습니다. 로그는 성능을 10% 이하로 로드할 수 있습니다 . 그렇지 않으면 성능 문제가 발생합니다.
  2. 모든 데이터를 하나의 파일에 기록합니다 . 이로 인해 특정 시스템에 파일 크기 제한이 있는 것은 말할 것도 없고 어느 시점에서 읽기/쓰기가 매우 어려워집니다.
  3. 잘못된 로깅 수준 사용 . 각 로깅 수준에는 명확한 경계가 있으며 이를 준수해야 합니다. 경계가 모호한 경우 사용할 수준에 동의할 수 있습니다.