로거

Fiber를 위한 미들웨어로, HTTP 요청과 응답에 대한 상세한 정보를 기록하는 데 사용됩니다.

인터페이스

func New(config ...Config) fiber.Handler

예제

Fiber 웹 프레임워크의 미들웨어 패키지를 가져옵니다:

import (
    "github.com/gofiber/fiber/v2"
    "github.com/gofiber/fiber/v2/middleware/logger"
)

참고: 등록 순서가 중요합니다. 이 미들웨어 이후에 등록된 라우트만 로그됩니다. 따라서 이 미들웨어는 처음에 등록되어야 합니다.

Fiber 애플리케이션을 초기화한 후, 다음과 같은 방법으로 미들웨어를 등록할 수 있습니다:

// 기본 구성으로 초기화
app.Use(logger.New())

// 또는 구성 수정
// 원격 IP 및 포트 로그
app.Use(logger.New(logger.Config{
    Format: "[${ip}]:${port} ${status} - ${method} ${path}\n",
}))

// 요청 ID 로그
app.Use(requestid.New())
app.Use(logger.New(logger.Config{
    // Config 섹션을 참조하여 더 많은 옵션 사용 가능
    Format: "${pid} ${locals:requestid} ${status} - ${method} ${path}\n",
}))

// 시간대 및 시간 형식 변경
app.Use(logger.New(logger.Config{
    Format:     "${pid} ${status} - ${method} ${path}\n",
    TimeFormat: "02-Jan-2006",
    TimeZone:   "America/New_York",
}))

// 사용자 정의 파일 작성기
file, err := os.OpenFile("./123.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
    log.Fatalf("파일 오픈 오류: %v", err)
}
defer file.Close()
app.Use(logger.New(logger.Config{
    Output: file,
}))

// 사용자 정의 태그 추가
app.Use(logger.New(logger.Config{
    CustomTags: map[string]logger.LogFunc{
        "custom_tag": func(output logger.Buffer, c *fiber.Ctx, data *logger.Data, extraParam string) (int, error) {
            return output.WriteString("이것은 사용자 정의 태그입니다")
        },
    },
}))

// 로깅 후 콜백 함수
app.Use(logger.New(logger.Config{
    TimeFormat: time.RFC3339Nano,
    TimeZone:   "Asia/Shanghai",
    Done: func(c *fiber.Ctx, logString []byte) {
        if c.Response().StatusCode() != fiber.StatusOK {
            reporter.SendToSlack(logString) 
        }
    },
}))

// 기본 형식으로 출력 시 색상 비활성화
app.Use(logger.New(logger.Config{
    DisableColors: true,
}))

구성

속성 타입 설명 기본값
Next func(*fiber.Ctx) bool Next는 true를 반환하면 미들웨어를 건너뛰는 함수를 정의합니다. nil
Done func(*fiber.Ctx, []byte) Done은 출력으로 요청의 로그 문자열을 작성한 후에 호출되는 함수로, 로그 문자열이 매개변수로 전달됩니다. nil
CustomTags map[string]LogFunc tagFunctions는 사용자 지정 태그 동작을 정의합니다. map[string]LogFunc
Format string Format은 로그 태그를 정의합니다. [${time}] ${status} - ${latency} ${method} ${path}\n
TimeFormat string TimeFormat은 로그 타임스탬프의 시간 형식을 정의합니다. 15:04:05
TimeZone string TimeZone은 "UTC", "America/New_York", "Asia/Chongqing" 등으로 지정할 수 있습니다. "Local"
TimeInterval time.Duration TimeInterval은 타임스탬프 업데이트 전의 지연 시간입니다. 500 * time.Millisecond
Output io.Writer Output은 로그를 작성하는 데 사용되는 작성기입니다. os.Stdout
DisableColors bool DisableColors는 로그 출력에 색상을 사용할지 여부를 정의합니다. false
enableColors bool 로그 출력에서 색상을 활성화하는 내부 필드입니다. (설정 가능한 필드가 아님) -
enableLatency bool 로그에서 대기 시간 측정을 활성화하는 내부 필드입니다. (설정 가능한 필드가 아님) -
timeZoneLocation *time.Location 시간대 위치에 대한 내부 필드입니다. (설정 가능한 필드가 아님) -

기본 구성

var ConfigDefault = Config{
    Next:          nil,
    Done:          nil,
    Format:        "[${time}] ${status} - ${latency} ${method} ${path}\n",
    TimeFormat:    "15:04:05",
    TimeZone:      "Local",
    TimeInterval:  500 * time.Millisecond,
    Output:        os.Stdout,
    DisableColors: false,
}

상수

// Logger 변수
const (
    TagPid               = "pid"               	// 프로세스 ID
    TagTime              = "time"              	// 시간
    TagReferer           = "referer"           	// 참조자
    TagProtocol          = "protocol"          	// 프로토콜
    TagPort              = "port"              	// 포트
    TagIP                = "ip"                	// IP 주소
    TagIPs               = "ips"               	// IP 주소들
    TagHost              = "host"              	// 호스트
    TagMethod            = "method"            	// 요청 메서드
    TagPath              = "path"              	// 경로
    TagURL               = "url"               	// URL
    TagUA                = "ua"                	// 사용자 에이전트
    TagLatency           = "latency"           	// 대기 시간
    TagStatus            = "status"            	// 응답 상태
    TagResBody           = "resBody"           	// 응답 본문
    TagReqHeaders        = "reqHeaders"        	// 요청 헤더
    TagQueryStringParams = "queryParams"       	// 쿼리 매개변수
    TagBody              = "body"              	// 요청 본문
    TagBytesSent         = "bytesSent"         	// 전송된 바이트
    TagBytesReceived     = "bytesReceived"     	// 수신된 바이트
    TagRoute             = "route"             	// 경로
    TagError             = "error"             	// 오류
    // 사용되지 않음: TagReqHeader를 사용하세요
    TagHeader            = "header:"           	// 요청 헤더
    TagReqHeader         = "reqHeader:"        	// 요청 헤더
    TagRespHeader        = "respHeader:"       	// 응답 헤더
    TagQuery             = "query:"            	// 쿼리
    TagForm              = "form:"             	// 양식
    TagCookie            = "cookie:"           	// 쿠키
    TagLocals            = "locals:"           	// 지역 변수
    // 색상
    TagBlack             = "black"             	// 검정
    TagRed               = "red"               	// 빨강
    TagGreen             = "green"             	// 초록
    TagYellow            = "yellow"            	// 노랑
    TagBlue              = "blue"              	// 파랑
    TagMagenta           = "magenta"           	// 마젠타
    TagCyan              = "cyan"              	// 청록
    TagWhite             = "white"             	// 흰색
    TagReset             = "reset"             	// 색상 초기화
)