log.Printf în Go

Scrie în jurnal un mesaj formatat după un șablon (ca fmt.Printf), precedat de dată și oră.

Sintaxă
func Printf(format string, v ...any)

Ce face log.Printf

log.Printf folosește aceleași verbe de formatare ca fmt.Printf: %s, %d, %v, %q, %.2f, %w nu (acela e doar pentru fmt.Errorf). Adaugă un rând nou la final dacă lipsește.

go vet verifică șabloanele lui log.Printf la fel ca pe cele ale lui fmt.Printf: număr greșit de argumente sau verb nepotrivit opresc verificarea.

Parametri

Parametru Descriere
format Șablonul mesajului.
v Valorile care înlocuiesc verbele din șablon.

Ce returnează

Nimic.

Exemple

Exemplul 1: Mesaje formatate

package main

import (
    "log"
    "os"
    "time"
)

func main() {
    log.SetOutput(os.Stdout)
    log.SetFlags(0)

    log.Printf("comanda %d: %s, total %.2f lei", 1042, "Ana Popescu", 249.9)
    log.Printf("fișier %q procesat în %v", "clienti.csv", 1500*time.Millisecond)
    log.Printf("stoc: %v", map[string]int{"mere": 12, "pere": 0})
}

Rezultat

comanda 1042: Ana Popescu, total 249.90 lei
fișier "clienti.csv" procesat în 1.5s
stoc: map[mere:12 pere:0]

Exemplul 2: Jurnalul unei cereri HTTP (simulat)

package main

import (
    "log"
    "os"
    "time"
)

func main() {
    log.SetOutput(os.Stdout)
    log.SetFlags(0)

    cereri := []struct {
        metoda, cale string
        status       int
        durata       time.Duration
    }{
        {"GET", "/produse", 200, 12 * time.Millisecond},
        {"POST", "/cos", 201, 48 * time.Millisecond},
        {"GET", "/admin", 403, 2 * time.Millisecond},
    }
    for _, c := range cereri {
        log.Printf("%-4s %-9s %d %6v", c.metoda, c.cale, c.status, c.durata)
    }
}

Rezultat

GET  /produse  200   12ms
POST /cos      201   48ms
GET  /admin    403    2ms

Greșeli frecvente

  • Dai lui log.Printf un text venit de la utilizator ca șablon: log.Printf(mesaj). Dacă textul conține %, apar valori ciudate; scrie log.Printf("%s", mesaj) sau log.Print(mesaj).

Comenzi înrudite

  • log.Println: Scrie un mesaj în jurnal, precedat de dată și oră; Println pune spații între valori, Print ca fmt.Print.
  • log.Fatal: Scrie mesajul în jurnal și oprește imediat programul cu codul 1 (ca log.Print urmat de os.Exit(1)).
  • log.New: Creează un jurnal separat (*log.Logger), cu propria destinație, prefix și opțiuni.
  • slog.Info: Scrie în jurnalul structurat implicit un mesaj de nivel INFO, cu perechi cheie-valoare.