Go بالأمثلة: التسجيل (Logging)

توفر لغة Go حزم مدمجة للتسجيل (Logging). حزمة log مخصصة للتسجيل البسيط، وحزمة log/slog للتسجيل المهيكل (structured logging).

package main

import (
    "bytes"
    "fmt"
    "log"
    "log/slog"
    "os"
)

func main() {

استدعاء log.Println يطبع في المسجل القياسي (standard logger).

    log.Println("standard logger")

يمكن تخصيص المسجلات بالأعلام. بشكل افتراضي، المسجل يحتوي على التاريخ والوقت.

    log.SetFlags(log.LstdFlags | log.Lshortfile)
    log.Println("with file and line number")

يدعم إنشاء مسجلات مخصصة وإرسالها لمخرجات مختلفة.

    var buf bytes.Buffer
    mylog := log.New(&buf, "my: ", log.LstdFlags)
    mylog.Println("hello")
    fmt.Print("from mylog:", buf.String())

حزمة slog توفر تسجيلاً مهيكلاً بصيغة مفتاح=قيمة أو JSON.

    slog.Info("hi there")
    slog.Info("hello", "count", 3)

للتسجيل بصيغة JSON.

    jsonHandler := slog.NewJSONHandler(os.Stdout, nil)
    jsonLogger := slog.New(jsonHandler)
    jsonLogger.Info("hi in json", "user", "joe")
}

تشغيل البرنامج:

$ go run logging.go
2023/08/22 10:45:16 standard logger
logging.go:16: with file and line number
from mylog:my: 2023/08/22 10:45:16 hello
2023-08-22T10:45:16.892+02:00 INFO hi there
2023-08-22T10:45:16.892+02:00 INFO hello count=3
{"time":"2023-08-22T10:45:16.892+02:00","level":"INFO","msg":"hi in json","user":"joe"}

المثال التالي: عميل HTTP.