[go] log 패키지를 활용한 로깅과 동시에 예외 로깅
Go 언어를 사용하여 애플리케이션을 개발할 때 로깅은 매우 중요한 요소입니다. log 패키지를 이용하면 간편하게 로그를 남기고 예외를 추적할 수 있습니다. 이 글에서는 Go 프로젝트에서 log 패키지를 활용하여 로깅 및 예외 로깅을 구현하는 방법에 대해 알아보겠습니다.
목차
로깅
로그 레벨 설정
log
패키지는 메시지를 출력하는 데 여러 로그 레벨을 제공합니다. 로그 레벨은 Println
, Printf
, Print
, Fatal
, Panic
등이 있습니다. 주요 로그 레벨은 다음과 같습니다.
Println
: 새 줄로 나뉜 형태로 출력Printf
: 서식을 지정하여 출력Print
: 서식 없이 출력Fatal
: 메시지를 출력한 후 os.Exit(1)을 호출하여 프로그램 종료Panic
: 메시지를 출력한 후 panic을 호출하여 프로그램 패닉 상태로 전환
package main
import "log"
func main() {
log.Println("This is a log message")
log.Printf("This is a formatted log message with value: %d", 10)
log.Print("This is a log message without formatting")
log.Fatal("This is a fatal log message")
log.Panic("This is a panic log message")
}
로그 파일에 기록
로그를 파일에 기록하려면 os.OpenFile
과 log.New
를 사용하여 새로운 로거를 만들고 해당 로거에 출력할 파일을 지정해야 합니다.
package main
import (
"log"
"os"
)
func main() {
file, err := os.OpenFile("app.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
if err != nil {
log.Fatal(err)
}
defer file.Close()
logger := log.New(file, "prefix: ", log.LstdFlags)
logger.Println("This is a log message")
}
예외 로깅
panic 상황에서 로깅하기
예외 상황이 발생했을 때 해당 상황을 기록하고 싶을 때는 defer
키워드와 recover
함수를 사용하여 패닉 내용을 로깅할 수 있습니다.
package main
import "log"
func main() {
defer func() {
if r := recover(); r != nil {
log.Printf("Recovered from panic: %v", r)
}
}()
panic("This is a panicking message")
}
결론
Go 언어의 log 패키지를 사용하면 간편하게 로그를 남기고 예외를 추적할 수 있습니다. 적절한 로그 레벨을 선택하여 로깅하고, os.OpenFile
과 log.New
를 이용하여 로그를 파일에 기록할 수 있습니다. 또한, defer
와 recover
를 활용하여 예외 상황에서도 로깅을 수행할 수 있습니다.
이렇게 log 패키지를 활용하여 로깅과 동시에 예외 로깅을 구현함으로써 애플리케이션의 안정성을 높일 수 있습니다.
내용 출처: Go 언어 공식 문서
이 자료는 보다 나은 설명을 위해 공식 문서 및 각종 자료를 참고하여 작성되었습니다.