slog.Time în Go

Creează un atribut cu o dată și oră (time.Time), scrisă în format RFC 3339.

Sintaxă
func Time(key string, v time.Time) Attr

Ce face slog.Time

slog.Time adaugă un moment în timp: data unei comenzi, termenul de livrare, ultima autentificare. Handler-ul text îl scrie ca RFC 3339 cu milisecunde (2025-03-14T10:30:00.000Z), iar cel JSON ca RFC 3339 ("2025-03-14T10:30:00Z").

Nu confunda cu atributul automat time (cheia slog.TimeKey), pe care handler-ul îl adaugă singur fiecărui mesaj cu momentul scrierii.

Parametri

Parametru Descriere
key Numele câmpului.
v Momentul.

Ce returnează

Un slog.Attr.

Exemple

Exemplul 1: Termen de livrare

package main

import (
    "log/slog"
    "os"
    "time"
)

func faraTimp(groups []string, a slog.Attr) slog.Attr {
    if a.Key == slog.TimeKey && len(groups) == 0 {
        return slog.Attr{} // un atribut gol nu este afișat
    }
    return a
}

func main() {
    opt := &slog.HandlerOptions{ReplaceAttr: faraTimp}
    plasata := time.Date(2025, time.March, 14, 10, 30, 0, 0, time.UTC)
    livrare := plasata.AddDate(0, 0, 3)

    slog.New(slog.NewTextHandler(os.Stdout, opt)).Info("comandă plasată",
        slog.Time("plasata", plasata), slog.Time("livrare", livrare))
    slog.New(slog.NewJSONHandler(os.Stdout, opt)).Info("comandă plasată",
        slog.Time("plasata", plasata), slog.Time("livrare", livrare))
}

Rezultat

level=INFO msg="comandă plasată" plasata=2025-03-14T10:30:00.000Z livrare=2025-03-17T10:30:00.000Z
{"level":"INFO","msg":"comandă plasată","plasata":"2025-03-14T10:30:00Z","livrare":"2025-03-17T10:30:00Z"}

Exemplul 2: Atributul time automat

Fără ReplaceAttr, fiecare rând începe cu momentul scrierii, care diferă la fiecare rulare.

package main

import (
    "log/slog"
    "os"
)

func main() {
    logger := slog.New(slog.NewTextHandler(os.Stdout, nil))
    logger.Info("aplicație pornită")
}

Rezultat posibil (diferă la fiecare rulare)

time=2025-03-14T12:30:00.482+02:00 level=INFO msg="aplicație pornită"

Greșeli frecvente

  • Formatezi singur data ca text ("02.01.2006") înainte de jurnal. Pierzi fusul orar și ordonarea corectă; lasă slog.Time să scrie formatul standard.

Comenzi înrudite

  • slog.Duration: Creează un atribut cu o durată (time.Duration): în text apare ca 1.5s, în JSON ca număr de nanosecunde.
  • slog.HandlerOptions: Opțiunile handler-elor text și JSON: nivelul minim, adăugarea fișierului sursă și modificarea oricărui atribut.
  • slog.String: Creează un atribut tipizat (text, întreg, boolean) pentru un mesaj slog, în locul perechii cheie, valoare.