Rumah  >  Artikel  >  pembangunan bahagian belakang  >  koleksi log ralat golang

koleksi log ralat golang

WBOY
WBOYasal
2023-05-10 11:39:36609semak imbas

Pengendalian ralat amat penting apabila membangunkan aplikasi golang. Pengumpulan log ralat ialah pautan yang sangat penting, kerana ia boleh membantu kami mencari masalah dalam program tepat pada masanya, dan ia juga boleh mempercepatkan langkah kami untuk menyelesaikan masalah. Di bawah ini kami akan memperkenalkan cara mengumpul log ralat dalam golang.

1. Gunakan perpustakaan log untuk merekod log ralat

Pustaka log terbina dalam Golang menyediakan fungsi pengelogan yang mudah dan berkuasa yang boleh memenuhi kebanyakan keperluan percetakan. Melalui perpustakaan log, kami boleh mengeluarkan maklumat ke konsol, fail atau tempat lain yang berbeza. Pada masa yang sama, pustaka log juga menyokong log rakaman pada tahap yang berbeza.

Pustaka log sangat mudah digunakan. Hanya import perpustakaan log dan panggil fungsi Println() atau Fatal() dalam kod. Contohnya:

import "log"

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

Gunakan fungsi Println() untuk mengeluarkan maklumat ke konsol dan output standard. Gunakan fungsi Fatal() untuk mengeluarkan maklumat ralat dan menamatkan program.

2. Gunakan pustaka log pihak ketiga

Selain menggunakan pustaka log terbina dalam Golang, kami juga boleh menggunakan beberapa pustaka log pihak ketiga lanjutan. Seperti logrus, zap atau zerolog, dsb., perpustakaan ini boleh melaksanakan pembalakan tersuai dengan lebih fleksibel, dan juga boleh memenuhi keperluan pembalakan bagi projek yang berbeza dengan lebih baik.

1. Gunakan logrus

Logrus ialah perpustakaan pengelogan berstruktur yang boleh mencapai pengelogan yang cekap dan menyokong berbilang format log. Menggunakan logrus, anda boleh mengeksport format JSON dengan mudah dan menghantar log ke sistem jauh atau pembalak pihak ketiga yang lain, sambil menyesuaikan tahap dan format log. Logrus juga sangat mudah digunakan Anda hanya perlu mengimport pakej logrus dan membuat instantiat objek log. Contohnya:

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. Gunakan zap

zap ialah perpustakaan log berstruktur yang pantas yang direka untuk mencapai prestasi tinggi dan boleh digunakan secara fleksibel dalam persekitaran pengeluaran. Dalam zap, pengelogan dianggap sebagai tugas, yang termasuk pengelogan ke sumber output tertentu (seperti fail atau MongoDB), dan tahap dan format log juga boleh disesuaikan. Menggunakan zap boleh merekodkan aktiviti aplikasi dengan berkesan, dan anda boleh mencari dan mengesan masalah dengan mudah apabila anda perlu menyelesaikannya. Contohnya:

package main

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

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

3. Gunakan sistem pengesanan teragih

Dalam sistem teragih yang besar, menggunakan perpustakaan log untuk merekod log ralat mungkin tidak memenuhi keperluan kita. Oleh kerana bilangan log ralat adalah besar dan pemeriksaan manual diperlukan, ini selalunya sangat menyusahkan dan memakan masa. Dalam kes ini, kami boleh mempertimbangkan untuk menggunakan sistem pengesanan teragih seperti Jaeger, Zipkin dan SkyWalking. Sistem ini boleh membantu kami menjejaki arah permintaan dan maklumat ralat sistem yang diedarkan dengan lebih baik.

Faedah menggunakan sistem ini ialah ia boleh membantu kami menjejak dan merekod permintaan dalam sistem yang diedarkan dan membolehkan analisis ketelusan permintaan. Apabila masalah berlaku, sistem ini boleh membantu kami mengesan kerosakan tepat pada masanya dan membantu kami menyelesaikan masalah.

Apabila menggunakan sistem penjejakan yang diedarkan, kami perlu menambah kod penjejakan yang sepadan pada aplikasi. Contohnya, apabila menggunakan Jaeger, kita perlu menambah kod berikut pada program:

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)
}

Dalam kod di atas, kami menggunakan sistem pengesanan teragih Jaeger untuk menjejak aplikasi Golang. Dalam konfigurasi, kami menetapkan pensampel kepada 1, mengesahkan pelaporan log, alamat yang digunakan oleh ejen tempatan ialah "127.0.0.1:6831", dan masa muat semula penimbal ialah 1 saat. Selepas itu, kami menentukan penjejak global dan menetapkannya sebagai penjejak global untuk penjejakan terbuka.

4. Ringkasan

Dalam proses pembangunan Golang, pengumpulan log ralat merupakan bahagian yang amat diperlukan. Pustaka standard Golang menyediakan perpustakaan pengelogan yang ringkas dan berkuasa, manakala perpustakaan pengelogan pihak ketiga menyediakan fungsi penyesuaian yang lebih fleksibel. Terutamanya dalam sistem teragih yang besar, menggunakan sistem pengesanan teragih boleh membantu kami mengumpul dan menyelesaikan masalah log ralat dengan lebih baik. Apabila menggunakan perpustakaan log, kita perlu memilih perpustakaan log yang sesuai berdasarkan keperluan projek dan senario aplikasi tertentu, dan memberi perhatian kepada pengumpulan maklumat log utama supaya kita dapat mencari dan menyelesaikan masalah dengan lebih baik.

Atas ialah kandungan terperinci koleksi log ralat golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:golang start dan stop serviceArtikel seterusnya:golang start dan stop service