Ce face log.Println
Pachetul log este jurnalizarea simplă din Go. log.Println formatează valorile ca fmt.Println (cu spații între ele), adaugă la început data și ora (2025/03/14 10:30:00) și scrie rândul pe os.Stderr. log.Print formatează ca fmt.Print (spații doar între valorile care nu sunt texte).
Ambele adaugă singure un rând nou la final, dacă mesajul nu se termină deja cu \n. Scrierea este sigură din mai multe goroutine deodată: rândurile nu se amestecă.
Pentru că implicit scriu pe stderr cu data curentă, în exemplele de mai jos redirecționăm jurnalul pe os.Stdout cu log.SetOutput și eliminăm data cu log.SetFlags(0), ca rezultatul să fie mereu același.
Parametri
| Parametru | Descriere |
|---|---|
v |
Valorile de scris, oricâte și de orice tip. |
Ce returnează
Nimic.
Exemple
Exemplul 1: Jurnalul implicit, cu dată și oră
package main
import "log"
func main() {
log.Println("serverul pornește pe portul", 8080)
log.Print("conectat la baza de date ", "magazin")
}
Rezultat (pe stderr; data și ora sunt cele curente)
2025/03/14 10:30:00 serverul pornește pe portul 8080
2025/03/14 10:30:00 conectat la baza de date magazin
Exemplul 2: Println față de Print
Print nu pune spațiu între două texte, dar pune între numere; Println pune mereu.
package main
import (
"log"
"os"
)
func main() {
log.SetOutput(os.Stdout)
log.SetFlags(0)
log.Println("comanda", 1042, "de la", "Ana")
log.Print("comanda", 1042, "de la", "Ana")
log.Print(3, 4, 5)
log.Print("rând cu final propriu\n")
}
Rezultat
comanda 1042 de la Ana
comanda1042de laAna
3 4 5
rând cu final propriu
Exemplul 3: Jurnal pentru o operație lungă
package main
import (
"log"
"os"
)
func main() {
log.SetOutput(os.Stdout)
log.SetFlags(0)
comenzi := []string{"1042", "1043", "1044"}
log.Println("încep procesarea a", len(comenzi), "comenzi")
for i, c := range comenzi {
log.Println("procesez comanda", c, "-", i+1, "din", len(comenzi))
}
log.Println("gata")
}
Rezultat
încep procesarea a 3 comenzi
procesez comanda 1042 - 1 din 3
procesez comanda 1043 - 2 din 3
procesez comanda 1044 - 3 din 3
gata
Greșeli frecvente
- Cauți mesajele jurnalului în ieșirea standard (de exemplu cu
./program > iesire.txt) și nu le găsești.logscrie implicit pe stderr; folosește2>sau2>&1. - Folosești
log.Printlnpentru jurnale pe care le prelucrezi automat (căutări, alerte). Pentru date structurate (cheie=valoare, JSON) foloseștelog/slog.
Comenzi înrudite
log.Printf: Scrie în jurnal un mesaj formatat după un șablon (ca fmt.Printf), precedat de dată și oră.log.SetFlags: Alege ce informații se pun la începutul fiecărui rând din jurnal: data, ora, microsecundele, fișierul și linia.log.SetOutput: Schimbă locul în care scrie jurnalul implicit: alt fișier, ieșirea standard, un buffer sau mai multe deodată.log.Fatal: Scrie mesajul în jurnal și oprește imediat programul cu codul 1 (ca log.Print urmat de os.Exit(1)).slog.Info: Scrie în jurnalul structurat implicit un mesaj de nivel INFO, cu perechi cheie-valoare.