로거
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" // 색상 초기화
)