Golang 구조화된 로그 패키지 로그/slog 세부 설명(3): 속성 필드 및 로그 수준

이전 글에서는 log/slog 패키지의 Handler를 사용하는 방법을 설명했는데, 서로 다른 Handler를 통해 다양한 형식의 로그를 출력할 수 있다. 다음으로, 로그의 속성 필드와 로그 수준을 사용자 정의하는 방법을 살펴보겠습니다.

기인하다

많은 로그에는 로그 수준, 로그 기록 시간, 로그 정보 메시지 등과 같은 몇 가지 공통 필드가 있습니다. 이러한 필드는 속성 필드입니다. log/slog 패키지에는 속성 필드가 있는 로그 출력 기능이 함께 제공되므로 이를 로그 콘텐츠에 직접 추가할 필요가 없습니다. 속성 필드는 With 함수를 통해 설정할 수 있습니다. 간단한 예를 살펴보겠습니다.

package main

import "log/slog"

func main() {
	logger := slog.With("host", "xxx.com")
	logger.Info("hello", "标题", "路多辛的博客")
}

효과를 보려면 다음을 실행하세요.

2023/09/12 21:11:35 INFO hello host=xxx.com 标题=路多辛的博客

출력 로그에 호스트 필드가 있는 것을 볼 수 있습니다. With 함수의 매개변수는 키-값 쌍의 형태로 로그에 나타나며 새 Logger를 반환합니다. 새 Logger를 사용하여 로그를 출력하면 각 출력에 새 속성 필드가 나타납니다. log/slog 패키지의 여러 내장 속성 필드는 다음과 같습니다:

  • 시간, 로깅 시간
  • 레벨, 로그 레벨
  • 메시지, 로그정보
  • 소스, 소스파일 정보

로그 수준(레벨)

slog.Level은 기록된 이벤트의 중요성 또는 심각도를 나타내는 정수 유형입니다. 레벨이 높을수록 사건의 심각성이 높아집니다. log/slog 패키지는 일반적으로 사용되는 다음 수준을 정의합니다.

const (
    LevelDebug Level = -4
    LevelInfo  Level = 0
    LevelWarn  Level = 4
    LevelError Level = 8
)

애플리케이션에서는 일반적으로 일정 수준 이상의 로그만 기록됩니다. 비프로덕션 환경에서는 로그를 Info 레벨로 설정하고 프로덕션 환경에서는 Warn 또는 Error 레벨로 설정하는 것이 일반적이며, 구성 파일을 통해 로그 레벨을 동적으로 조정할 수 있습니다. 일시적으로 로그를 설정합니다. 디버그 수준의 경우 문제를 찾은 후 다시 조정합니다.

내장된 Handler는 HandlerOptions.Level 매개변수를 통해 로그 수준을 설정할 수 있으며 기본값은 Info 수준입니다. 전체 프로그램의 레벨을 동적으로 변경하려면 먼저 전역 LevelVar를 초기화한 다음 LevelVar를 사용하여 Handler를 구성하고 이를 기본값으로 설정해야 합니다. 샘플 코드는 다음과 같습니다.

package main

import (
	"log/slog"
	"os"
)

func main() {
	var programLevel = new(slog.LevelVar)
	h := slog.NewJSONHandler(os.Stderr, &slog.HandlerOptions{Level: programLevel})
	slog.SetDefault(slog.New(h))
	slog.Debug("hello", "标题", "路多辛的博客")
}

코드를 실행하면 아무것도 출력되지 않으며, 로그 수준이 Info로 설정되어 있어 디버그 수준의 로그가 출력되지 않습니다. 로그 수준을 디버그로 변경한 후 디버그 함수를 사용하여 다시 출력합니다.

package main

import (
	"log/slog"
	"os"
)

func main() {
	var programLevel = new(slog.LevelVar)
	h := slog.NewJSONHandler(os.Stderr, &slog.HandlerOptions{Level: programLevel})
	slog.SetDefault(slog.New(h))
	slog.Debug("hello", "标题", "路多辛的博客")

	programLevel.Set(slog.LevelDebug)
	slog.Debug("hello2", "标题2", "路多辛的博客")
}

코드를 실행하고 다음을 입력합니다.

{"time":"2023-09-12T21:41:59.960653+08:00","level":"DEBUG","msg":"hello2","标题2":"路多辛的博客"}

성공적으로 로그 레벨이 Debug로 변경되고 해당 로그가 출력된 것을 확인할 수 있습니다.

Supongo que te gusta

Origin blog.csdn.net/luduoyuan/article/details/132841556
Recomendado
Clasificación