IT/Go

log 패키지

iamhyeon 2025. 1. 30. 14:21

-  Go 언어의 표준 라이브러리로, 로그 메시지를 기록하는 데 사용된다

- 다양한 로그 메시지 형식을 지원하며, 로그 메시지를 파일, 표준 출력, 표준 오류 출력 등으로 보낼 수 있다.

 

https://pkg.go.dev/log

 

log package - log - Go Packages

Discover Packages Standard library log Version: go1.23.5 Opens a new window with list of versions in this module. Published: Jan 16, 2025 License: BSD-3-Clause Opens a new window with license information. Imports: 8 Opens a new window with list of imports.

pkg.go.dev

 


 

log.Println    |    log.Printf
- 로그 메시지를 출력

log.Println("This is a log message.")
log.Printf("This is a log message with a number: %d", 42)

 

 

log.Fatal    |    log.Fatalln    |    log.Fatalf
- 로그 메시지를 출력한 후, os.Exit(1)을 호출하여 프로그램 종료

log.Fatal("This is a fatal log message.")
log.Fatalf("This is a fatal log message with a number: %d", 42)

 

 

log.Panic    |    log.Panicln    |    log.Panicf
- 로그 메시지를 출력한 후, panic을 호출하여 패닉 발생

log.Panicf("This is a panic log message with a number: %d", 42)

 

더보기

panic

- Go 언어에서 프로그램 실행 중에 발생하는 심각한 오류를 처리하는 메커니즘

- panic이 호출되면 현재 함수의 실행이 중단되고, 해당 함수의 defer 문이 실행된 후, 호출 스택을 따라 상위 함수로 전파된다

- 최종적으로 프로그램이 종료된다
- panic은 주로 복구할 수 없는 심각한 오류가 발생했을 때 사용된다

- 예를 들어, 배열의 인덱스가 범위를 벗어났을 때, nil 포인터 참조가 발생했을 때 등이 있다

더보기

프로그램 종료 방식:
- log.Fatal: 로그 메시지를 출력한 후, os.Exit(1)을 호출하여 프로그램을 종료한다.
- log.Panic: 로그 메시지를 출력한 후, panic을 호출하여 패닉을 발생시킨다. 패닉이 호출 스택을 따라 전파되며, 최종적으로 프로그램이 종료된다


defer 함수 실행 여부:
- log.Fatal: defer 함수가 실행되지 않는다
- log.Panic: defer 함수가 실행된다

 

복구 가능 여부:
- log.Fatal: 프로그램이 종료되므로 복구할 수 없다.
- log.Panic: recover를 사용하여 패닉을 복구할 수 있다.

 

 

log.SetFlags
- 로그 메시지 형식 설정. 여러 플래그를 조합하여 사용할 수 있다

log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)

 

 

log.SetPrefix
- 로그 메시지의 접두사 설정.

log.SetPrefix("LOG: ")

 

 

log.SetOutput
- 로그 메시지를 출력할 io.Writer 설정.

- 기본적으로 표준 오류 출력(os.Stderr)에 출력된다.

file, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
    log.Fatal(err)
}
log.SetOutput(file)

'IT > Go' 카테고리의 다른 글

defer  (0) 2025.01.30
메서드 리시버  (0) 2025.01.29
Golang Live Reloading command line utility  (0) 2025.01.23
Java Spring Boot 애플리케이션에서 Go REST API 호출  (0) 2025.01.22
Go 변수, 데이터타입  (0) 2024.12.26