Fiber Log

프로그램 동작을 관찰하고 문제를 진단하거나 해당 경보를 구성하는 데 로그를 사용할 수 있습니다. 잘 구조화된 로그를 정의하면 검색 효율이 향상되고 문제 처리가 용이해집니다.

Fiber는 표준 출력에 로그를 출력하는 기본 방법을 제공합니다. 또한 log.Info, log.Errorf, log.Warnw와 같은 여러 전역 함수를 제공합니다.

로그 레벨

const (
    LevelTrace Level = iota
    LevelDebug
    LevelInfo
    LevelWarn
    LevelError
    LevelFatal
    LevelPanic
)

사용자 지정 로그

Fiber는 다양한 로깅 라이브러리에 적응하기 위해 AllLogger 인터페이스를 제공합니다.

type CommonLogger interface {
    Logger
    FormatLogger
    WithLogger
}

type AllLogger interface {
    CommonLogger
    ControlLogger
    WithLogger
}

로그 출력

참고: Fatal 레벨에서 메서드를 호출하면 로그를 출력한 후 프로그램 실행이 중단됩니다. 신중하게 사용하십시오. 서로 다른 레벨에서 직접 로그를 출력하는 경우 messageKey에 입력되며 기본적으로 msg로 설정됩니다.

log.Info("안녕하세요, 세계!")
log.Debug("괜찮으세요?")
log.Info("42는 생명, 우주 및 모든 것에 대한 대답입니다.")
log.Warn("우리는 공격 받고 있습니다!")
log.Error("휴스턴, 문제가 발생했습니다.")
log.Fatal("긴 시간동안, 그리고 모든 것에 감사합니다.")
log.Panic("시스템이 다운되었습니다.")

다양한 레벨에서 로그를 형식 지정 및 출력하는 경우, 모든 메서드는 f로 끝납니다.

log.Debugf("안녕 %s", "소년")
log.Infof("%d는 생명, 우주 및 모든 것에 대한 대답입니다.", 233)
log.Warnf("우리는 공격 받고 있습니다, %s!", "보스")
log.Errorf("%s, 문제가 발생했습니다.", "마스터 시푸")
log.Fatalf("긴 시간동안, 그리고 %s에 대해 감사합니다.", "바나나")

키와 값으로 메시지 출력. 키와 값이 짝지어지지 않은 경우, KEYVALS UNPAIRED가 출력됩니다.

log.Debugw("", "안녕", "소년")
log.Infow("", "숫자", 233)
log.Warnw("", "직책", "보스")
log.Errorw("", "이름", "마스터 시푸")
log.Fatalw("", "과일", "바나나")

전역 로그

프로젝트에서 간단한 로그 함수만 사용하고 언제든지 전역적으로 출력하려면 전역 로그를 제공합니다.

import "github.com/gofiber/fiber/v2/log"

log.Info("정보")
log.Warn("경고")

위 코드는 표준 출력에 대한 기본 log.DefaultLogger를 사용합니다. 이미 구현된 어댑터는 contrib 폴더에서 찾을 수도 있으며, 자체 구현한 Logger를 사용하여 전역 로거를 설정할 수 있습니다.

import (
    "log"
    fiberlog "github.com/gofiber/fiber/v2/log"
)

var _ log.AllLogger = (*customLogger)(nil)

type customLogger struct {
    stdlog *log.Logger
}

// ...
// 사용자 정의 로거 주입
fiberlog.SetLogger(customLogger)

레벨 설정

log.SetLevel은 이 레벨보다 낮은 로그는 출력되지 않도록 설정합니다. 기본 로그 레코더는 LevelTrace입니다.

이 메서드는 동시성 안전하지 않음에 유의하십시오.

import "github.com/gofiber/fiber/v2/log"

log.SetLevel(log.LevelInfo)

출력 설정

log.SetOutput은 로깅의 출력 대상을 설정합니다. 기본적으로 로거는 콘솔에 로그를 출력합니다.

var logger AllLogger = &defaultLogger{
    stdlog: log.New(os.Stderr, "", log.LstdFlags|log.Lshortfile|log.Lmicroseconds),
    depth:  4,
}

출력 대상을 파일로 설정합니다.

// test.log 파일에 출력
f, err := os.OpenFile("test.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
    return
}
log.SetOutput(f)

출력 대상을 콘솔 및 파일로 설정합니다.

// test.log 파일에 출력
file, _ := os.OpenFile("test.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
iw := io.MultiWriter(os.Stdout, file)
log.SetOutput(iw)

컨텍스트 바인딩

컨텍스트를 설정하고, 다음 메소드를 사용하여 지정된 컨텍스트에 바인딩된 CommonLogger 인스턴스를 반환합니다.

commonLogger := log.WithContext(ctx)
commonLogger.Info("info")

참고: 이는 Fiber 프레임워크의 기본 로깅 라이브러리입니다. 물론, 다른 잘 알려진 Go 오픈소스 로깅 라이브러리를 선택할 수도 있습니다.