Protokolování je technika uchovávání záznamů pro budoucí účely v cyklu vývoje softwaru. Protokolování je zásadní, protože protokoly pomáhají s laděním, diagnostikou, odstraňováním problémů a monitorováním projektu.

Protokolování na různých úrovních aplikací můžete použít pro chyby, varování, ladění a další.

Přihlášení Go

Standardní knihovna Go obsahuje a log balíček bohatý na funkce. Zvládá různé úrovně protokolování a základní metody související s protokolováním, které budete pro svou aplikaci potřebovat. Nicméně, log balíček nemusí být nejlepší volbou, pokud je vaše aplikace složitá a chcete upřednostnit produktivitu.

The log balíček neposkytuje funkce pro strukturované protokoly. Strukturované protokolovací balíčky poskytují funkce, které zjednodušují a zlepšují proces protokolování. Ekosystém Go je domovem mnoha takových balíčků.

1. Zap od Uberu

Zap je rychlý, strukturovaný a vyrovnaný protokolovací balíček vytvořený open-source týmem Uberu pro psaní protokolů v Go. Uber vytvořil balíček Zap, aby poskytoval výkonnější protokolování než jiné balíčky v ekosystému Go, včetně log balík.

V balíčku Zap jsou dva odlišné loggery. The Logger funkce zpracovává kritické případy výkonu. The SugaredLogger nabízí větší flexibilitu s API ve stylu printf, ale přichází s malým kompromisem ve výkonu. Dokonce i pomalejší balíček SugaredLogger je 4-10krát rychlejší než jiné balíčky strukturovaného protokolování.

Pro instalaci balíčku Zap spusťte na příkazovém řádku následující:

jít dostat -u jít.uber.org/zap

K instalaci a úspěšnému používání funkcí balíčku Zap budete potřebovat nejnovější verzi Go.

dřevorubec, chyba := zap. NewProduction() // zap instance loggeru

-li chyba!= nula {
fmt. Println (chyba. Chyba())
}

odložit záznamník. Sync() // vyprázdní vyrovnávací paměti, pokud existují
cukr := dřevorubec. Cukr() //sugared logger zde

cukr. Infow("nepodařilo se načíst URL",
// Strukturovaný kontext jako volně napsané páry klíč–hodnota.
"url", url,
"pokus", 3,
"backoff", čas. Druhý,
)

cukr. Infof("Nepodařilo se načíst URL: %s", URL) // pomocí formátovače stylu printf

The záznamník proměnná je instancí třídy zap záznamník a Cukr metoda je slazená instance loggeru.

The Infow metoda zapisuje na výstup a Infof je formátovací verze Infow metoda.

2. Balíček Logrus

Logrus je strukturovaný protokolovací balíček pro aplikace Go. Logrus je kompatibilní se standardním knihovním loggerem s podobnou funkčností. Pokud máte zkušenosti s používáním log balíček, najdete sadu pracující s Logrus.

Logrus ve výchozím nastavení nepodporuje formátování JSON. Vždy však můžete použít knihovnu JSON, jako je vestavěná json balíček s Logrus' SetFormatter metoda.

Logrus podporuje protokolování na různých úrovních, a přestože není tak výkonný jako většina protokolovacích balíčků, je bohatý na funkce a bezpečný.

Tento příkaz můžete použít k instalaci Logrusu do vašeho pracovního adresáře:

jít získejte github.com/sirupsen/logrus

Zde je příklad protokolování pomocí balíčku Logrus.

import (
"os"
log "github.com/sirupsen/logrus" // import aliasů
)

funchlavní {
log. SetFormatter(&log. JSONFormatter{}) // nastaví formátovač na JSON
log. SetOutput (os. Stdout) // výstup na standardní výstup
log. SetLevel (log. WarnLevel) // nastavení úrovně varování

log. WithFields (log. pole{
"Jméno": "John Doe",
"Stáří": 40,
}).Info("John's Bio Data")
}

Tento kód importuje knihovnu Logrus a vytvoří pro ni alias s názvem log. V hlavní funkce, volá SetFormatter metoda pro nastavení formátovače pro protokoly. Můžete použít SetOutput metoda k určení, kam by zprávy protokolu měly chodit; v tomto případě standardní výstup.

The SetLevel metoda zaznamenává varování na zadané úrovni nebo vyšší.

3. Balíček ZeroLog

ZeroLog je rychlá knihovna pro protokolování JSON inspirovaná Zapem, navržená pro výkon. Využívá jedinečné řetězení API, které umožňuje Zerologu zapisovat JSON a protokolovat události bez alokací a odrazů.

Zerolog si klade za cíl poskytovat snadněji použitelné API a vyšší výkon při zachování jednoduché základny kódu a API. Zaměřuje se na strukturované protokolování a můžete použít ConsoleWriter metoda pro hezké přihlášení na vaší konzoli.

Balíček Zerolog má nízkou alokaci, úrovňové protokolování, vzorkování, háky, kontextová pole a protokolování chyb s volitelnými funkcemi trasování zásobníku. Můžete také integrovat Zerolog s kontext a http balíčky.

Spusťte tento příkaz v terminálu vašeho pracovního prostoru a nainstalujte Zerolog balík.

jít get -u [github.com/rs/zerolog/log](http://github.com/rs/zerolog/log)

Zde je jednoduchý příklad použití balíčku Zerolog pro jednoduchou operaci.

import (
"github.com/rs/zerolog" // zerolog pro konfigurace
"github.com/rs/zerolog/log" // log pro logování
)

funchlavní() {
// UNIX Time je rychlejší a menší než většina časových razítek
zerolog. TimeFieldFormat = zerolog. TimeFormatUnix

log. Tisk ("ahoj světe")
}

The TimeFieldFormat volba je nastavena na formát času Unix a Tisk příkaz zapíše textový argument na standardní výstup.

4. Balíček Log15

The Log15 balíček je jednoduchá sada nástrojů pro lidské i strojově čitelné protokolování s osvědčenými postupy v Go. Model Log15 io a http balíčky ze standardní knihovny Go jako alternativa k vestavěné log balík.

Mezi vlastnosti balíčku Log15 patří:

  • jednoduché, snadno srozumitelné API
  • strukturované protokolování s páry klíč-hodnota
  • dětské loggery se soukromým kontextem
  • rozhraní handleru pro vytváření vlastních konfigurací protokolování přes malé API
  • barevná podpora terminálu
  • vestavěná podpora pro protokolování souborů, streamů, systémových protokolů a síťových protokolů
  • ukládání záznamů do vyrovnávací paměti na výstup.

Můžete nainstalovat Log15 do vašich balíčků Go pomocí tohoto příkazu.

jít získejte github.com/inconshreveable/log15

Začít s balíčkem Log15 je snadné. Zde je příklad vytvoření instance loggeru a přihlášení na úrovni informací a chyb s balíčkem.

import (
log "github.com/inconshreveable/log15" // import aliasu jako log
)

funchlavní() {
serverLog := log. Nové("úložiště", "Nový úložiště") // vytváření instancí loggeru
serverLog. Info("kontrola stavu vrstvy úložiště úspěšná") // info log
serverLog. Chyba ("kontrola stavu vrstvy úložiště se nezdařila") // protokol chyb
}

The serverLog proměnná je instancí loggeru Log15; a Nový metoda vrací logger s argumenty kontextu, které zadáte.

The Info metoda vrátí informační zprávu a Chyba metoda vrací chybovou zprávu.

Pište si užitečné a srozumitelné protokoly

Protokolování může být stejně důležité jako jakákoli jiná část vývojového procesu. V počátečních fázích se to může zdát velmi snadné, ale dodržování základních postupů může tento proces zkomplikovat. Abyste zvládli každý okrajový případ a aspekt protokolování, měli byste použít protokolovací balíček, který vám usnadní práci.

Použijte úrovně protokolování, strukturu a kontext, aby byly vaše protokoly srozumitelné a vhodné pro zamýšlené účely.