프로젝트 소개
Logrus는 Go용 구조화된 로거로, 표준 라이브러리 로거와 API 호환이 되도록 설계되었습니다. 현재 유지보수 모드에 있으며, 프로젝트는 보안, 버그 수정 및 성능 개선에 중점을 두고, Go의 log/slog와 같은 상호 운용성 작업으로 제한된 새 기능만 추가됩니다. README는 구조화된 로깅이 이제 Zerolog, Zap 및 Apex와 같은 대안을 통해 Go에서 널리 사용 가능하다고 언급합니다.
핵심 기능:
- Trace, Debug, Info, Warning, Error, Fatal 및 Panic의 7가지 레벨을 지원하는 레벨 기반 로깅. 로거는 선택된 심각도 이상의 항목만 출력하도록 구성할 수 있습니다.
- WithField 및 WithFields를 통한 구조화된 필드로, 긴 형식의 메시지 대신 검색 가능한 키-값 로깅을 장려합니다. 항목에는 자동으로 time, msg 및 level이 포함됩니다.
- 기본 필드: WithFields는 logrus.Entry를 반환하며, 이는 request_id나 user_ip와 같은 공통 필드를 여러 로그 문에 걸쳐 첨부하는 데 재사용할 수 있습니다.
- 포맷터: 출력이 TTY일 때 색상으로 구분되고 그렇지 않으면 logfmt 호환 일반 텍스트인 내장 TextFormatter와 Logstash 또는 Splunk 같은 도구의 기계 구문 분석용 JSONFormatter가 있습니다. 옵션에는 ForceColors, DisableColors, DisableLevelTruncation, PadLevelText 및 FullTimestamp가 포함됩니다. 사용자 정의 포맷터는 Formatter 인터페이스를 구현합니다.
- 훅: 로깅 레벨에 동작을 연결하여 예를 들어 오류를 예외 추적기로 보내거나, StatsD로 전달하거나, syslog에 기록할 수 있습니다. 내장 훅이 있으며 타사 훅은 프로젝트 위키에 나열되어 있습니다.
- 호출자 보고: SetReportCaller(true)는 호출 메서드를 필드로 추가하며, README에 측정 가능한 오버헤드가 언급되어 있습니다.
- io.Writer 통합: logger.Writer()는 로거를 io.Writer로 노출하여 표준 라이브러리 log 출력을 Logrus 포맷터와 훅을 통해 리디렉션할 수 있게 합니다.
- 테스트 지원: test hook 패키지는 테스트에서 로그 메시지를 검증하기 위한 NewLocal, NewGlobal 및 NewNullLogger 헬퍼를 제공합니다.
- Fatal 핸들러: RegisterExitHandler는 fatal 레벨 메시지에서 os.Exit(1) 전에 실행되는 함수를 등록하며, 정상 종료에 유용합니다.
- 스레드 안전성: Logger는 기본적으로 뮤텍스로 보호되며, 훅과 출력이 이미 스레드 안전한 경우 SetNoLock()으로 잠금을 비활성화할 수 있습니다.
로그 회전은 의도적으로 포함되지 않았으며, README는 logrotate와 같은 외부 도구를 권장합니다. 이 라이브러리에는 환경에 대한 내장 개념이 없으므로 환경별 포맷터 및 훅 선택은 애플리케이션에 맡겨집니다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.