Ce face log.SetOutput
Implicit, jurnalul scrie pe os.Stderr. log.SetOutput îl redirecționează spre orice io.Writer: un fișier deschis cu O_APPEND, os.Stdout, un bytes.Buffer (util în teste), io.MultiWriter (în mai multe locuri) sau io.Discard (aruncă tot).
Parametri
| Parametru | Descriere |
|---|---|
w |
Destinația nouă. |
Ce returnează
Nimic. log.Writer() returnează destinația curentă.
Exemple
Exemplul 1: Jurnal într-un fișier și pe ecran
package main
import (
"fmt"
"io"
"log"
"os"
)
func main() {
f, err := os.OpenFile("aplicatie.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0o644)
if err != nil {
log.Fatal(err)
}
defer f.Close()
log.SetOutput(io.MultiWriter(os.Stdout, f))
log.SetFlags(0)
log.Println("aplicația a pornit")
log.Println("3 comenzi noi")
date, _ := os.ReadFile("aplicatie.log")
fmt.Printf("în fișier: %q\n", date)
}
Rezultat
aplicația a pornit
3 comenzi noi
în fișier: "aplicația a pornit\n3 comenzi noi\n"
Exemplul 2: Capturarea jurnalului într-un buffer
package main
import (
"bytes"
"fmt"
"log"
"strings"
)
func trimiteEmail(catre string) {
log.Printf("e-mail trimis către %s", catre)
}
func main() {
var buf bytes.Buffer
log.SetOutput(&buf)
log.SetFlags(0)
trimiteEmail("mihai@exemplu.ro")
fmt.Println("jurnalul conține adresa:", strings.Contains(buf.String(), "mihai@exemplu.ro"))
}
Rezultat
jurnalul conține adresa: true
Exemplul 3: Oprirea jurnalului cu io.Discard
package main
import (
"fmt"
"io"
"log"
)
func main() {
log.SetOutput(io.Discard)
log.Println("acest mesaj dispare")
fmt.Println("doar acest rând apare")
}
Rezultat
doar acest rând apare
Greșeli frecvente
- Deschizi fișierul de jurnal fără
O_APPEND(cuos.Create) și pierzi jurnalul vechi la fiecare pornire.
Comenzi înrudite
log.New: Creează un jurnal separat (*log.Logger), cu propria destinație, prefix și opțiuni.log.SetFlags: Alege ce informații se pun la începutul fiecărui rând din jurnal: data, ora, microsecundele, fișierul și linia.io.Writer: Interfața pentru orice destinație în care se pot scrie octeți: fișiere, ecran, buffer-e, răspunsuri HTTP.os.File: Tipul care reprezintă un fișier deschis; îl obții cu os.Open, os.Create sau os.OpenFile.