Logger
Logger는 DD 의 핵심 타입으로, 스레드 안전한 로깅 기능을 제공합니다.
생성
go
// New 로 생성
logger, _ := dd.New(dd.DefaultConfig())go
// 커스텀 구성으로 생성
logger, _ := dd.New(dd.Config{
Level: dd.LevelInfo,
Targets: []dd.OutputTarget{
dd.ConsoleOutput(),
dd.FileOutput("logs/app.log"),
},
})로그 메서드
기본 로그
| 메서드 | 설명 |
|---|---|
Debug(args ...any) | Debug 레벨 로그 |
Info(args ...any) | Info 레벨 로그 |
Warn(args ...any) | Warn 레벨 로그 |
Error(args ...any) | Error 레벨 로그 |
Fatal(args ...any) | Fatal 레벨 로그 (기본적으로 os.Exit(1) 호출, defer 는 실행되지 않음; FatalHandler 로 사용자 정의 가능) |
Log(level LogLevel, args ...any) | 지정 레벨 로그 |
포맷팅 로그
| 메서드 | 설명 |
|---|---|
Debugf(format string, args ...any) | 포맷팅 Debug |
Infof(format string, args ...any) | 포맷팅 Info |
Warnf(format string, args ...any) | 포맷팅 Warn |
Errorf(format string, args ...any) | 포맷팅 Error |
Fatalf(format string, args ...any) | 포맷팅 Fatal(기본적으로 os.Exit(1) 호출, defer 는 실행되지 않음; FatalHandler 로 사용자 정의 가능) |
Logf(level LogLevel, format string, args ...any) | 지정 레벨 포맷팅 |
구조화 로그
| 메서드 | 설명 |
|---|---|
DebugWith(msg string, fields ...Field) | 구조화 Debug |
InfoWith(msg string, fields ...Field) | 구조화 Info |
WarnWith(msg string, fields ...Field) | 구조화 Warn |
ErrorWith(msg string, fields ...Field) | 구조화 Error |
FatalWith(msg string, fields ...Field) | 구조화 Fatal(기본적으로 os.Exit(1) 호출, defer 는 실행되지 않음; FatalHandler 로 사용자 정의 가능) |
LogWith(level LogLevel, msg string, fields ...Field) | 구조화 지정 레벨 |
go
logger.InfoWith("요청 완료",
dd.String("method", "GET"),
dd.Int("status", 200),
dd.Duration("elapsed", 100*time.Millisecond),
)레벨 관리
go
level := logger.GetLevel() // 현재 레벨 가져오기
_ = logger.SetLevel(dd.LevelDebug) // 레벨 설정
enabled := logger.IsLevelEnabled(dd.LevelInfo)// 레벨 확인
// 바로 가기 확인
logger.IsDebugEnabled()
logger.IsInfoEnabled()
logger.IsWarnEnabled()
logger.IsErrorEnabled()
logger.IsFatalEnabled()
// 동적 레벨 리졸버
logger.SetLevelResolver(func(ctx context.Context) dd.LogLevel {
if isDebug {
return dd.LevelDebug
}
return dd.LevelInfo
})
resolver := logger.GetLevelResolver()필드 체인
go
// 사전 설정 필드, LoggerEntry 반환
entry := logger.WithFields(
dd.String("service", "api"),
dd.Int("version", 2),
)
// 단일 필드
entry := logger.WithField("env", "prod")출력 대상 관리
go
// Writer 추가
_ = logger.AddWriter(os.Stderr)
// Writer 제거
_ = logger.RemoveWriter(os.Stderr)
// Writer 수 가져오기
count := logger.WriterCount()
// 쓰기 오류 핸들러 설정
logger.SetWriteErrorHandler(func(w io.Writer, err error) {
fmt.Fprintf(os.Stderr, "쓰기 실패: %v\n", err)
})컨텍스트 통합
go
// 컨텍스트 추출기 추가
_ = logger.AddContextExtractor(func(ctx context.Context) []dd.Field {
return []dd.Field{
dd.String("trace_id", dd.GetTraceID(ctx)),
}
})
// 모든 추출기 교체
_ = logger.SetContextExtractors(extractor1, extractor2)
// 현재 추출기 가져오기
extractors := logger.GetContextExtractors()훅 관리
go
// 훅 등록
_ = logger.AddHook(dd.HookBeforeLog, func(ctx context.Context, hc *dd.HookContext) error {
// 로그 전 처리
return nil
})
// 훅 레지스트리 교체
_ = logger.SetHooks(registry)
// 훅 레지스트리 가져오기
hooks := logger.GetHooks()샘플링 제어
go
// 샘플링 구성 설정
logger.SetSampling(&dd.SamplingConfig{
// 샘플링 매개변수
})
// 샘플링 구성 가져오기
cfg := logger.GetSampling()보안 구성
go
// 보안 구성 설정
logger.SetSecurityConfig(dd.DefaultSecurityConfig())
// 보안 구성 가져오기
sec := logger.GetSecurityConfig()필드 검증
go
// 필드 검증 설정
logger.SetFieldValidation(dd.StrictSnakeCaseConfig())
// 검증 구성 가져오기
validation := logger.GetFieldValidation()라이프사이클
go
// 버퍼 flush
_ = logger.Flush()
// 로거 종료
_ = logger.Close()
// 우아한 종료 (타임아웃 포함)
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
_ = logger.Shutdown(ctx)
// 종료 여부 확인
closed := logger.IsClosed()
// 필터 goroutine 완료 대기
ok := logger.WaitForFilterGoroutines(3 * time.Second)
active := logger.ActiveFilterGoroutines()디버그 출력
| 메서드 | 설명 |
|---|---|
Print(args ...any) | 구성된 Writer 로 출력 (LevelInfo, 보안 필터 적용) |
Println(args ...any) | Print 와 동일 동작 (내부 Log() 가 자동 줄바꿈) |
Printf(format string, args ...any) | 포맷팅 출력 (LevelInfo, 보안 필터 적용) |
JSON(data ...any) | stdout 으로 컴팩트 JSON 출력 (caller 정보 포함, 보안 필터 미적용) |
JSONF(format string, args ...any) | stdout 으로 포맷팅된 컴팩트 JSON 출력 (caller 정보 포함, 보안 필터 미적용) |
Text(data ...any) | stdout 으로 보기 좋게 출력 (caller 정보 미포함, 보안 필터 미적용) |
Textf(format string, args ...any) | stdout 으로 포맷팅된 텍스트 출력 (caller 정보 미포함, 보안 필터 미적용) |
다음 단계
- LoggerEntry -- 사전 설정 필드 체인 호출
- 설정 -- Config 상세
- 출력 대상 -- FileWriter 상세