[go] log 패키지를 활용한 로깅 설정 파일 사용

Go 언어에서 개발한 애플리케이션에서 로깅을 통해 정보를 기록하는 것은 매우 중요합니다. 로그를 기록하여 애플리케이션의 동작 및 성능을 분석하고, 잠재적인 오류를 식별하고 해결할 수 있습니다. Go 언어의 log 패키지를 사용하여 로깅을 구현할 때 설정 파일을 활용하면 로그 출력 형식, 로그 레벨, 로그 파일 경로 및 기타 구성 요소를 구성할 수 있습니다.

목차

로그 설정 파일 작성

먼저, 로그 설정을 담은 설정 파일을 작성합니다. JSON 또는 YAML과 같은 형식을 사용하여 로그 레벨, 출력 형식, 출력 위치 등의 설정을 포함할 수 있습니다. 다음은 JSON 형식의 예시입니다.

{
  "log_level": "info",
  "log_format": "text",
  "log_output": "file",
  "log_file_path": "/var/log/myapp.log"
}

위 예시에서는 로그 레벨은 “info”로 설정되어 있고, 로그 형식은 “text”이며, 파일로 출력됩니다. 또한 로그 파일의 경로는 “/var/log/myapp.log”에 지정되어 있습니다.

로그 설정 파일 로드

애플리케이션이 시작될 때, 설정 파일을 로드하여 log 패키지에 설정을 적용합니다.

package main

import (
	"encoding/json"
	"log"
	"os"
)

type Config struct {
	LogLevel    string `json:"log_level"`
	LogFormat   string `json:"log_format"`
	LogOutput   string `json:"log_output"`
	LogFilePath string `json:"log_file_path"`
}

func main() {
	file, err := os.Open("config.json")
	if err != nil {
		log.Fatal("Failed to open config file:", err)
	}
	defer file.Close()

	config := Config{}
	err = json.NewDecoder(file).Decode(&config)
	if err != nil {
		log.Fatal("Failed to decode config file:", err)
	}

	log.SetOutput(os.Stdout) // 기본은 표준 출력
	if config.LogOutput == "file" {
		logFile, err := os.OpenFile(config.LogFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
		if err != nil {
			log.Fatal("Failed to open log file:", err)
		}
		defer logFile.Close()
		log.SetOutput(logFile)
	}

	switch config.LogFormat {
	case "text":
		log.SetFlags(log.LstdFlags)
	case "json":
		log.SetFlags(0)
	}

	switch config.LogLevel {
	case "info":
		log.SetPrefix("INFO: ")
	case "error":
		log.SetPrefix("ERROR: ")
	}
}

위 코드에서는 설정 파일을 읽어들여 각 설정값에 따라 log 패키지의 각종 설정을 변경합니다. 예를 들어, 파일 출력을 사용할 경우에는 로그 파일을 열어 파일 출력을 적용합니다.

로그 파일에 로그 기록

이제 설정 파일을 로드하고 적용한 후, log 패키지의 기능을 사용하여 로그를 기록할 수 있습니다.

log.Println("This is an informational message")
log.Printf("Error occurred: %s", err)

위와 같이 log 패키지의 함수를 활용하여 로그 메시지를 출력할 수 있습니다.

위와 같이 설정 파일을 통해 log 패키지를 활용하면 로깅 설정을 유연하게 관리할 수 있으며, 로깅 관련 기능을 쉽게 변경하고 확장할 수 있습니다.

이상으로 이번 포스팅을 마칩니다. 관련하여 더 궁금한 사항이 있으시다면 여기를 참고하시기 바랍니다.