>  기사  >  백엔드 개발  >  golang 오류 로그 수집

golang 오류 로그 수집

WBOY
WBOY원래의
2023-05-10 11:39:36609검색

golang 애플리케이션을 개발할 때 오류 처리는 특히 중요합니다. 오류 로그 수집은 프로그램의 문제를 적시에 찾는 데 도움이 될 수 있고 오류 문제 해결 단계의 속도를 높일 수 있기 때문에 매우 중요한 링크입니다. 아래에서는 golang에서 오류 로그를 수집하는 방법을 소개합니다.

1. 로그 라이브러리를 사용하여 오류 로그 기록

Golang의 내장 로그 라이브러리는 대부분의 인쇄 요구 사항을 충족할 수 있는 간단하고 강력한 로깅 기능을 제공합니다. 로그 라이브러리를 통해 정보를 콘솔, 파일 또는 기타 다른 위치에 출력할 수 있습니다. 동시에 로그 라이브러리는 다양한 수준의 로그 기록도 지원합니다.

로그 라이브러리는 사용이 매우 간단합니다. 로그 라이브러리를 가져오고 코드에서 Println() 또는 Fatal() 함수를 호출하기만 하면 됩니다. 예:

import "log"

log.Println("This is a log message")
log.Fatalf("This is a fatal error message")

Println() 함수를 사용하여 정보를 콘솔과 표준 출력으로 출력합니다. 오류 정보를 출력하고 프로그램을 종료하려면 Fatal() 함수를 사용하십시오.

2. 타사 로그 라이브러리 사용

Golang에 내장된 로그 라이브러리를 사용하는 것 외에도 일부 고급 타사 로그 라이브러리를 사용할 수도 있습니다. logrus, zap 또는 zerolog 등과 같은 라이브러리는 맞춤형 로깅을 보다 유연하게 구현할 수 있으며 다양한 프로젝트의 로깅 요구 사항을 더 잘 충족할 수도 있습니다.

1. logrus 사용

logrus는 효율적인 로깅을 달성할 수 있고 다양한 로그 형식을 지원하는 구조화된 로깅 라이브러리입니다. logrus를 사용하면 쉽게 JSON 형식을 내보내고 로그를 원격 시스템이나 기타 타사 로거로 보낼 수 있으며 동시에 로그 수준과 형식을 사용자 지정할 수도 있습니다. Logrus는 사용하기에도 매우 편리합니다. logrus 패키지를 가져오고 로그 개체를 인스턴스화하기만 하면 됩니다. 예:

import (
  "github.com/sirupsen/logrus"
)

log := logrus.New()
log.SetFormatter(&logrus.JSONFormatter{})
log.SetLevel(logrus.DebugLevel)
log.WithFields(logrus.Fields{
  "animal": "walrus",
}).Info("A walrus appears")

2. zap 사용

zap은 고성능을 달성하도록 설계되었으며 프로덕션 환경에 유연하게 배포할 수 있는 빠르고 구조화된 로깅 라이브러리입니다. Zap에서 로깅은 지정된 출력 소스(예: 파일 또는 MongoDB)에 대한 로깅을 포함하는 작업으로 처리되며 로그 수준 및 형식도 사용자 정의할 수 있습니다. Zap을 사용하면 애플리케이션 활동을 효과적으로 기록할 수 있으며, 문제 해결이 필요할 때 문제를 쉽게 찾아서 찾을 수 있습니다. 예:

package main

import (
    "go.uber.org/zap"
)

func main() {
    logger, _ := zap.NewProduction()
    defer logger.Sync()
    logger.Info("logrus-start")
}

3. 분산 추적 시스템 사용

대규모 분산 시스템에서는 로그 라이브러리를 사용하여 오류 로그를 기록하는 것이 우리의 요구 사항을 충족하지 못할 수 있습니다. 오류 로그의 수가 많고 수동 검사가 필요하기 때문에 매우 번거롭고 시간이 많이 소요되는 경우가 많습니다. 이 경우 Jaeger, Zipkin, SkyWalking과 같은 분산 추적 시스템 사용을 고려할 수 있습니다. 이러한 시스템은 분산 시스템의 요청 방향과 오류 정보를 추적하는 데 더 도움이 될 수 있습니다.

이러한 시스템을 사용하면 분산 시스템에서 요청을 추적 및 기록하고 요청에 대한 투명성 분석이 가능하다는 이점이 있습니다. 문제가 발생하면 이러한 시스템은 적시에 결함을 감지하고 문제를 해결하는 데 도움이 될 수 있습니다.

분산 추적 시스템을 사용하는 경우 해당 추적 코드를 애플리케이션에 추가해야 합니다. 예를 들어 Jaeger를 사용하는 경우 프로그램에 다음 코드를 추가해야 합니다.

package main

import (
    "net/http"

    "github.com/opentracing/opentracing-go"
    "github.com/uber/jaeger-client-go"
    "github.com/uber/jaeger-client-go/config"
)

func main() {
    cfg := &config.Configuration{
        Sampler: &config.SamplerConfig{
            Type:  "const",
            Param: 1,
        },
        Reporter: &config.ReporterConfig{
            LogSpans:            true,
            LocalAgentHostPort:  "127.0.0.1:6831",
            BufferFlushInterval: 1 * time.Second,
        },
    }
    tracer, closer, err := cfg.New(
        "my-golang-app",
        config.Logger(jaeger.StdLogger),
    )
    if err != nil {
        log.Fatalf("Failed to create tracer: %v", err)
    }
    defer closer.Close()
    opentracing.SetGlobalTracer(tracer)
    r := http.NewServeMux()
    r.HandleFunc("/", handler)
    http.ListenAndServe(":8080", r)
}

위 코드에서는 Jaeger 분산 추적 시스템을 사용하여 Golang 애플리케이션을 추적합니다. 구성에서는 샘플러를 1로 설정하고 로그 보고를 확인하며 로컬 에이전트에서 사용하는 주소는 "127.0.0.1:6831"이고 버퍼 새로 고침 시간은 1초입니다. 그런 다음 전역 추적기를 정의하고 이를 opentracing용 전역 추적기로 설정했습니다.

4. 요약

Golang 개발 과정에서 오류 로그 수집은 빼놓을 수 없는 부분입니다. Golang의 표준 라이브러리는 간단하고 강력한 로깅 라이브러리를 제공하는 반면 타사 로깅 라이브러리는 보다 유연한 사용자 정의 기능을 제공합니다. 특히 대규모 분산 시스템에서 분산 추적 시스템을 사용하면 오류 로그를 더 잘 수집하고 문제를 해결하는 데 도움이 될 수 있습니다. 로그 라이브러리를 사용할 때 특정 프로젝트 요구 사항 및 애플리케이션 시나리오를 기반으로 적합한 로그 라이브러리를 선택하고 문제를 더 잘 찾아 해결할 수 있도록 주요 로그 정보 수집에 주의를 기울여야 합니다.

위 내용은 golang 오류 로그 수집의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.