Explication détaillée du journal/slog du package de journaux structurés Golang (3) : champs d'attribut et niveaux de journalisation

L'article précédent expliquait comment utiliser le gestionnaire dans le package log/slog. Les journaux dans différents formats peuvent être générés via différents gestionnaires. Voyons ensuite comment personnaliser les champs d'attributs et les niveaux de journalisation du journal.

Attribut

De nombreux journaux ont des champs communs, tels que le niveau de journalisation, la durée d'enregistrement du journal, le message d'informations du journal, etc. Ces champs sont des champs d'attributs. Le package log/slog est livré avec une fonction de sortie de journal avec des champs d'attribut, et il n'est pas nécessaire de l'ajouter vous-même au contenu du journal. Les champs d'attribut peuvent être définis via la fonction With. Regardons un exemple simple :

package main

import "log/slog"

func main() {
	logger := slog.With("host", "xxx.com")
	logger.Info("hello", "标题", "路多辛的博客")
}

Courez pour voir l'effet :

2023/09/12 21:11:35 INFO hello host=xxx.com 标题=路多辛的博客

Vous pouvez voir qu'il existe un champ hôte dans le journal de sortie. Les paramètres de la fonction With apparaîtront dans le journal sous la forme de paires clé-valeur et renverront un nouveau Logger. Lorsque vous utilisez le nouveau Logger pour sortir le journal, de nouveaux champs d'attributs apparaîtront dans chaque sortie. Plusieurs champs d'attributs intégrés du package log/slog sont les suivants :

  • heure, heure d'enregistrement
  • niveau, niveau de journalisation
  • msg, informations du journal
  • source, informations sur le fichier source

Niveaux de journalisation (Niveaux)

slog.Level est un type entier qui représente l'importance ou la gravité de l'événement enregistré. Plus le niveau est élevé, plus l'incident est grave. Le package log/slog définit les niveaux couramment utilisés suivants :

const (
    LevelDebug Level = -4
    LevelInfo  Level = 0
    LevelWarn  Level = 4
    LevelError Level = 8
)

Dans les applications, seuls les journaux d'un certain niveau ou plus sont généralement enregistrés. Une pratique courante consiste à définir le niveau de journalisation au niveau Info dans les environnements hors production et au niveau Avertissement ou Erreur dans l'environnement de production. Le niveau de journalisation peut être ajusté dynamiquement via le fichier de configuration. Lorsque vous rencontrez des problèmes difficiles à résoudre, définir temporairement le journal. Pour le niveau de débogage, ajustez-le après avoir localisé le problème.

Le gestionnaire intégré peut définir le niveau de journalisation via le paramètre HandlerOptions.Level. La valeur par défaut est le niveau d'information. Pour modifier dynamiquement le niveau de l'ensemble du programme, vous devez d'abord initialiser un LevelVar global, puis utiliser LevelVar pour construire un Handler et le définir comme valeur par défaut. L'exemple de code est le suivant :

package main

import (
	"log/slog"
	"os"
)

func main() {
	var programLevel = new(slog.LevelVar)
	h := slog.NewJSONHandler(os.Stderr, &slog.HandlerOptions{Level: programLevel})
	slog.SetDefault(slog.New(h))
	slog.Debug("hello", "标题", "路多辛的博客")
}

Lorsque vous exécutez le code, rien ne sera affiché. Étant donné que le niveau de journalisation est défini sur Info, les journaux de niveau débogage ne seront pas affichés. Après avoir modifié le niveau de journalisation en Debug, utilisez la fonction Debug pour afficher à nouveau :

package main

import (
	"log/slog"
	"os"
)

func main() {
	var programLevel = new(slog.LevelVar)
	h := slog.NewJSONHandler(os.Stderr, &slog.HandlerOptions{Level: programLevel})
	slog.SetDefault(slog.New(h))
	slog.Debug("hello", "标题", "路多辛的博客")

	programLevel.Set(slog.LevelDebug)
	slog.Debug("hello2", "标题2", "路多辛的博客")
}

Exécutez le code et entrez ce qui suit :

{"time":"2023-09-12T21:41:59.960653+08:00","level":"DEBUG","msg":"hello2","标题2":"路多辛的博客"}

On peut voir que le niveau de journalisation a été modifié avec succès en Debug et que les journaux correspondants ont été générés.

Guess you like

Origin blog.csdn.net/luduoyuan/article/details/132841556