Skip to content

패키지 함수

DD 는 풍부한 패키지 수준 함수를 제공하며, dd. 접두사로 직접 호출할 수 있습니다. 이 함수들은 모두 전역 로거 (Default()) 를 통해 실행됩니다.

로거 생성

New

go
func New(cfg ...Config) (*Logger, error)

새 Logger 인스턴스를 생성합니다. 구성을 전달하지 않으면 기본 설정을 사용합니다.

go
// 기본 구성
logger, _ := dd.New()

// 커스텀 구성
logger, _ := dd.New(dd.DefaultConfig())

// 주의: 0 개 또는 1 개의 구성만 허용, 여러 개 전달 시 오류 반환
// logger, _ := dd.New(cfg1, cfg2)  // 오류!

전역 로거

가져오기와 설정

함수시그니처설명
Defaultfunc Default() *Logger전역 로거 가져오기 (지연 초기화)
SetDefaultfunc SetDefault(logger *Logger)전역 로거 설정
InitDefaultfunc InitDefault(cfg ...Config) error구성으로 전역 로거 초기화
DefaultWithErrfunc DefaultWithErr() (*Logger, error)전역 로거와 초기화 오류 가져오기
DefaultInitErrorfunc DefaultInitError() error초기화 오류 가져오기

전역 로거 초기화

go
// 방법 1: 자동 초기화 (첫 호출 시 생성)
dd.Default().Info("전역 로거 자동 생성")

// 방법 2: 명시적 초기화
err := dd.InitDefault(dd.JSONConfig())
if err != nil {
    log.Fatal(err)
}
dd.Default().Info("JSON 구성의 전역 로거 사용")

// 방법 3: 전역 로거 교체
custom, _ := dd.New(dd.Config{
    Level: dd.LevelInfo,
    Targets: []dd.OutputTarget{dd.FileOutput("logs/app.log")},
})
dd.SetDefault(custom)

// 방법 4: 초기화 오류 확인
logger, err := dd.DefaultWithErr()
if err != nil {
    log.Printf("전역 로거 초기화 실패: %v", err)
}

구성 사전 설정

함수시그니처설명
DefaultConfigfunc DefaultConfig() Config기본 구성 (Info 레벨, 텍스트 형식)
DevelopmentConfigfunc DevelopmentConfig() Config개발 구성 (Debug 레벨)
JSONConfigfunc JSONConfig() ConfigJSON 출력 구성
go
cfg := dd.DefaultConfig()
cfg.Level = dd.LevelDebug
logger, _ := dd.New(cfg)

출력 대상 생성자

함수시그니처설명
ConsoleOutputfunc ConsoleOutput() OutputTarget콘솔 출력
FileOutputfunc FileOutput(path string) OutputTarget파일 출력 (로테이션 지원)
CustomOutputfunc CustomOutput(w io.Writer) OutputTarget사용자 정의 Writer 출력
go
cfg := dd.DefaultConfig()
cfg.Targets = []dd.OutputTarget{
    dd.ConsoleOutput(),
    dd.FileOutput("logs/app.log"),
    dd.CustomOutput(customWriter),
}
logger, _ := dd.New(cfg)

기본 로그 (패키지 수준)

다음 함수들은 전역 로거를 통해 로그를 출력합니다.

함수시그니처설명
Debugfunc Debug(args ...any)Debug 레벨 로그
Infofunc Info(args ...any)Info 레벨 로그
Warnfunc Warn(args ...any)Warn 레벨 로그
Errorfunc Error(args ...any)Error 레벨 로그
Fatalfunc Fatal(args ...any)Fatal 레벨 로그 (기본적으로 os.Exit(1) 호출, defer 는 실행되지 않음; FatalHandler 로 사용자 정의 가능)
go
dd.Info("애플리케이션 시작 완료")
dd.Errorf("사용자 %s 로그인 실패", username)
dd.Warn("디스크 공간 부족")

포맷팅 로그 (패키지 수준)

함수시그니처설명
Debugffunc Debugf(format string, args ...any)Debug 레벨 포맷팅 로그
Infoffunc Infof(format string, args ...any)Info 레벨 포맷팅 로그
Warnffunc Warnf(format string, args ...any)Warn 레벨 포맷팅 로그
Errorffunc Errorf(format string, args ...any)Error 레벨 포맷팅 로그
Fatalffunc Fatalf(format string, args ...any)Fatal 레벨 포맷팅 로그 (기본적으로 os.Exit(1) 호출, defer 는 실행되지 않음; FatalHandler 로 사용자 정의 가능)

범용 레벨 로그 (패키지 수준)

함수시그니처설명
Logfunc Log(level LogLevel, args ...any)지정 레벨 로그
Logffunc Logf(level LogLevel, format string, args ...any)지정 레벨 포맷팅 로그
LogWithfunc LogWith(level LogLevel, msg string, fields ...Field)지정 레벨 구조화 로그
go
dd.Log(dd.LevelDebug, "디버그 정보")
dd.Logf(dd.LevelWarn, "경고: %s", reason)
dd.LogWith(dd.LevelError, "요청 실패",
    dd.String("path", "/api/users"),
    dd.Int("status", 500),
)

구조화 로그 (패키지 수준)

다음 함수들은 전역 로거를 통해 구조화 로그를 출력합니다.

함수시그니처설명
DebugWithfunc DebugWith(msg string, fields ...Field)Debug 레벨 구조화 로그
InfoWithfunc InfoWith(msg string, fields ...Field)Info 레벨 구조화 로그
WarnWithfunc WarnWith(msg string, fields ...Field)Warn 레벨 구조화 로그
ErrorWithfunc ErrorWith(msg string, fields ...Field)Error 레벨 구조화 로그
FatalWithfunc FatalWith(msg string, fields ...Field)Fatal 레벨 구조화 로그 (기본적으로 os.Exit(1) 호출, defer 는 실행되지 않음; FatalHandler 로 사용자 정의 가능)
go
dd.InfoWith("요청 완료",
    dd.String("method", "GET"),
    dd.Int("status", 200),
)

dd.ErrorWith("데이터베이스 오류",
    dd.Err(err),
    dd.String("query", sql),
)

레벨 관리 (패키지 수준)

함수시그니처설명
SetLevelfunc SetLevel(level LogLevel) error전역 로그 레벨 설정
GetLevelfunc GetLevel() LogLevel전역 로그 레벨 가져오기
IsLevelEnabledfunc IsLevelEnabled(level LogLevel) bool지정 레벨 활성화 여부 확인
IsDebugEnabledfunc IsDebugEnabled() boolDebug 레벨 활성화 여부 확인
IsInfoEnabledfunc IsInfoEnabled() boolInfo 레벨 활성화 여부 확인
IsWarnEnabledfunc IsWarnEnabled() boolWarn 레벨 활성화 여부 확인
IsErrorEnabledfunc IsErrorEnabled() boolError 레벨 활성화 여부 확인
IsFatalEnabledfunc IsFatalEnabled() boolFatal 레벨 활성화 여부 확인
go
// 동적으로 로그 레벨 조정
dd.SetLevel(dd.LevelDebug)

// 조건부 로그 (불필요한 계산 회피)
if dd.IsDebugEnabled() {
    dd.Debug(computeExpensiveDebugInfo())
}

필드 체인 (패키지 수준)

함수시그니처설명
WithFieldsfunc WithFields(fields ...Field) *LoggerEntry사전 설정 필드를 가진 Entry 생성
WithFieldfunc WithField(key string, value any) *LoggerEntry단일 사전 설정 필드를 가진 Entry 생성
go
dd.WithFields(dd.String("service", "api"), dd.String("version", "1.0")).
    Info("요청 처리 완료")

dd.WithField("request_id", "abc123").Info("요청 처리")

라이프사이클 (패키지 수준)

함수시그니처설명
Flushfunc Flush() error전역 로그 버퍼 flush

Writer 관리 (패키지 수준)

함수시그니처설명
AddWriterfunc AddWriter(writer io.Writer) error출력 writer 추가
RemoveWriterfunc RemoveWriter(writer io.Writer) error출력 writer 제거
WriterCountfunc WriterCount() intwriter 수 가져오기

샘플링 제어 (패키지 수준)

함수시그니처설명
SetSamplingfunc SetSampling(config *SamplingConfig)샘플링 구성 설정
GetSamplingfunc GetSampling() *SamplingConfig샘플링 구성 가져오기

Writer 생성자

함수시그니처설명
NewFileWriterfunc NewFileWriter(path string, cfg FileWriterConfig) (*FileWriter, error)파일 writer 생성
DefaultFileWriterConfigfunc DefaultFileWriterConfig() FileWriterConfig기본 파일 writer 구성
NewBufferedWriterfunc NewBufferedWriter(w io.Writer, cfg BufferedWriterConfig) (*BufferedWriter, error)버퍼 writer 생성
DefaultBufferedWriterConfigfunc DefaultBufferedWriterConfig() BufferedWriterConfig기본 버퍼 writer 구성
NewMultiWriterfunc NewMultiWriter(writers ...io.Writer) *MultiWriter다중 출력 writer 생성

보안 구성 생성자

함수시그니처설명
DefaultSecurityConfigfunc DefaultSecurityConfig() *SecurityConfig기본 보안 구성 (기본 필터)
DefaultSecureConfigfunc DefaultSecureConfig() *SecurityConfig완전 보안 구성
HealthcareConfigfunc HealthcareConfig() *SecurityConfigHIPAA 규정 준수 구성
FinancialConfigfunc FinancialConfig() *SecurityConfigPCI-DSS 규정 준수 구성
GovernmentConfigfunc GovernmentConfig() *SecurityConfig정부 표준 구성
SecurityConfigForLevelfunc SecurityConfigForLevel(level SecurityLevel) *SecurityConfig레벨별 보안 구성

민감 데이터 필터 생성자

함수시그니처설명
NewSensitiveDataFilterfunc NewSensitiveDataFilter() *SensitiveDataFilter완전 패턴 집합 필터
NewEmptySensitiveDataFilterfunc NewEmptySensitiveDataFilter() *SensitiveDataFilter빈 필터
NewCustomSensitiveDataFilterfunc NewCustomSensitiveDataFilter(patterns ...string) (*SensitiveDataFilter, error)커스텀 패턴 필터

훅 생성자

함수시그니처설명
NewHookRegistryfunc NewHookRegistry() *HookRegistry훅 레지스트리 생성
NewHooksFromConfigfunc NewHooksFromConfig(cfg HooksConfig) *HookRegistry구성에서 훅 레지스트리 생성

감사 로그 생성자

함수시그니처설명
NewAuditLoggerfunc NewAuditLogger(cfg AuditConfig) (*AuditLogger, error)감사 로거 생성
DefaultAuditConfigfunc DefaultAuditConfig() AuditConfig기본 감사 구성
VerifyAuditEventfunc VerifyAuditEvent(entry string, signer *IntegritySigner) *AuditVerificationResult감사 이벤트 무결성 검증

무결성 서명 생성자

함수시그니처설명
NewIntegritySignerfunc NewIntegritySigner(cfg IntegrityConfig) (*IntegritySigner, error)무결성 서명자 생성
DefaultIntegrityConfigSafefunc DefaultIntegrityConfigSafe() (IntegrityConfig, error)안전한 랜덤 키 구성

테스트 보조 생성자

함수시그니처설명
NewLoggerRecorderfunc NewLoggerRecorder() *LoggerRecorder로그 레코더 생성 (테스트용)

컨텍스트 함수

함수시그니처설명
WithTraceIDfunc WithTraceID(ctx context.Context, traceID string) context.ContextTrace ID 설정
WithSpanIDfunc WithSpanID(ctx context.Context, spanID string) context.ContextSpan ID 설정
WithRequestIDfunc WithRequestID(ctx context.Context, requestID string) context.ContextRequest ID 설정
GetTraceIDfunc GetTraceID(ctx context.Context) stringTrace ID 가져오기
GetSpanIDfunc GetSpanID(ctx context.Context) stringSpan ID 가져오기
GetRequestIDfunc GetRequestID(ctx context.Context) stringRequest ID 가져오기

JSON 구성

함수시그니처설명
DefaultJSONOptionsfunc DefaultJSONOptions() *JSONOptions기본 JSON 출력 옵션

필드 생성자

구조화 로그 필드 (Field) 를 생성하며, *With 시리즈 메서드나 WithFields와 함께 사용합니다.

함수시그니처설명
Anyfunc Any(key string, value any) Field임의 타입 필드
Stringfunc String(key, value string) Field문자열 필드
Boolfunc Bool(key string, value bool) Field불리언 필드
Intfunc Int(key string, value int) Fieldint 필드
Int8func Int8(key string, value int8) Fieldint8 필드
Int16func Int16(key string, value int16) Fieldint16 필드
Int32func Int32(key string, value int32) Fieldint32 필드
Int64func Int64(key string, value int64) Fieldint64 필드
Uintfunc Uint(key string, value uint) Fielduint 필드
Uint8func Uint8(key string, value uint8) Fielduint8 필드
Uint16func Uint16(key string, value uint16) Fielduint16 필드
Uint32func Uint32(key string, value uint32) Fielduint32 필드
Uint64func Uint64(key string, value uint64) Fielduint64 필드
Float32func Float32(key string, value float32) Fieldfloat32 필드
Float64func Float64(key string, value float64) Fieldfloat64 필드
Durationfunc Duration(key string, value time.Duration) Field기간 필드
Timefunc Time(key string, value time.Time) Field시간 필드
Errfunc Err(err error) Field오류 필드 (key 는 "error")
ErrWithKeyfunc ErrWithKey(key string, err error) Field커스텀 key 의 오류 필드
ErrWithStackfunc ErrWithStack(err error) Field스택 트레이스 포함 오류 필드
go
dd.InfoWith("요청 완료",
    dd.String("method", "GET"),
    dd.Int("status", 200),
    dd.Duration("elapsed", 100*time.Millisecond),
    dd.Err(err),
)

팁 타입 안전 권장

Any보다 타입이 명확한 생성자 (예: Int, String) 를 우선 사용하면 컴파일 타임에 타입 오류를 잡아내어 런타임에 타입 불일치로 인한 문제를 방지할 수 있습니다.

필드 검증 구성

함수시그니처설명
DefaultFieldValidationConfigfunc DefaultFieldValidationConfig() *FieldValidationConfig기본 필드 검증 (검증 없음)
StrictSnakeCaseConfigfunc StrictSnakeCaseConfig() *FieldValidationConfig엄격한 snake_case 검증
StrictCamelCaseConfigfunc StrictCamelCaseConfig() *FieldValidationConfig엄격한 camelCase 검증

디버그 출력 함수

함수시그니처설명
Printfunc Print(args ...any)전역 로그 Writer 로 출력 (LevelInfo, 보안 필터 적용)
Printlnfunc Println(args ...any)Print 와 동일 (내부 Log() 가 자동 줄바꿈, 보안 필터 적용)
Printffunc Printf(format string, args ...any)포맷팅 출력 (LevelInfo, 보안 필터 적용)
JSONfunc JSON(data ...any)stdout 으로 컴팩트 JSON 출력 (caller 정보 포함, 보안 필터 미적용)
JSONFfunc JSONF(format string, args ...any)포맷팅 문자열을 컴팩트 JSON 으로 stdout 에 출력 (caller 정보 포함, 보안 필터 미적용)
Textfunc Text(data ...any)stdout 으로 보기 좋게 출력 (보안 필터 미적용)
Textffunc Textf(format string, args ...any)stdout 으로 포맷팅된 텍스트 출력 (보안 필터 미적용)
Exitfunc Exit(data ...any)caller 정보 포함 텍스트 출력 후 종료 (exit code 0), 복잡한 타입은 자동 보기 좋게 출력, 보안 필터 미적용
Exitffunc Exitf(format string, args ...any)caller 정보 포함 포맷팅 출력 후 종료 (exit code 0, 보안 필터 미적용)

경고 디버그 함수 보안 알림

Print/Println/Printf는 보안 필터를 거치지만, JSON/JSONF/Text/Textf/Exit/Exitf는 원본 데이터를 직접 출력하며 보안 필터를 거치지 않습니다.

다음 단계