|
Standardní knihovna Go poskytuje přímočaré nástroje pro výpis logů z Go programů: balíček log pro volně formátovaný výstup a balíček log/slog pro strukturovaný výstup. |
![]()
package main
|
import (
"bytes"
"fmt"
"log"
"os"
|
|
"log/slog"
)
|
|
func main() {
|
|
|
Prosté zavolání funkcí jako |
log.Println("standardní logger")
|
|
Loggery je možné nastavit pomocí příznaků
(flags), které určují formát jejich výstupu.
Ve výchozím stavu má standardní logger nastavené
příznaky |
log.SetFlags(log.LstdFlags | log.Lmicroseconds)
log.Println("s mikrosekundami")
|
|
Podporuje také výpis názvu souboru a řádku,
ze kterého je funkce |
log.SetFlags(log.LstdFlags | log.Lshortfile)
log.Println("se souborem/řádkem")
|
|
Může se hodit vytvořit si vlastní logger a předávat ho dál. Při vytváření nového loggeru můžeme nastavit prefix, který odliší jeho výstup od ostatních loggerů. |
mylog := log.New(os.Stdout, "my:", log.LstdFlags)
mylog.Println("z mylog")
|
|
Prefix můžeme nastavit i u existujících loggerů
(včetně standardního) pomocí metody |
mylog.SetPrefix("ohmy:")
mylog.Println("z mylog")
|
|
Loggery mohou mít vlastní výstupní cíle;
funguje jakýkoli |
var buf bytes.Buffer
buflog := log.New(&buf, "buf:", log.LstdFlags)
|
|
Toto volání zapíše výstup logu do |
buflog.Println("ahoj")
|
|
A tohle ho skutečně zobrazí na standardním výstupu. |
fmt.Print("z buflog:", buf.String())
|
|
Balíček |
jsonHandler := slog.NewJSONHandler(os.Stderr, nil)
myslog := slog.New(jsonHandler)
myslog.Info("ahoj")
|
|
Kromě zprávy může výstup |
myslog.Info("znovu ahoj", "key", "val", "age", 25)
}
|
|
Ukázkový výstup; vypsané datum a čas budou záviset na tom, kdy byl příklad spuštěn. |
$ go run logging.go
2023/08/22 10:45:16 standardní logger
2023/08/22 10:45:16.904141 s mikrosekundami
2023/08/22 10:45:16 logging.go:39: se souborem/řádkem
my:2023/08/22 10:45:16 z mylog
ohmy:2023/08/22 10:45:16 z mylog
z buflog:buf:2023/08/22 10:45:16 ahoj
|
|
Tyto řádky jsou pro přehlednost na webu zalomené; ve skutečnosti se vypisují na jednom řádku. |
{"time":"2023-08-22T10:45:16.904166391-07:00",
"level":"INFO","msg":"ahoj"}
{"time":"2023-08-22T10:45:16.904178985-07:00",
"level":"INFO","msg":"znovu ahoj",
"key":"val","age":25}
|
Další příklad: HTTP Klient.