Niveles de registro en Go

Sheeraz Gul 20 junio 2023
  1. Niveles de registro en Go
  2. Niveles de registro en Go With zerolog
  3. Niveles de registro en Go With Logrus
Niveles de registro en Go

Este tutorial demuestra cómo crear y usar niveles de registro en Golang.

Niveles de registro en Go

Golang proporciona un paquete de registro llamado log, que es un paquete de registro simple. Este paquete no ofrece registro nivelado; si queremos un registro nivelado, tenemos que agregar manualmente prefijos como depurar, info y advertir.

Incluso el paquete de registro de Golang no tiene la funcionalidad de registro nivelado, pero aún proporciona las herramientas básicas para implementar niveles de registro manualmente. Probemos un ejemplo básico para el paquete log de Golang:

package main

import "log"

func main() {
    log.Println("Hello, This is delftstack.com!")
}

El código anterior registrará el contenido dado y lo imprimirá. Ver la salida:

2009/11/10 23:00:00 Hello, This is delftstack.com!

Pero, ¿qué pasa con los niveles de registro? Como se mencionó anteriormente, podemos crear niveles de registro personalizados y un registrador personalizado.

Podemos usar el método log.New(), que toma los siguientes tres parámetros para crear un nuevo registrador:

  1. out: out se utiliza para implementar la interfaz io.writer para escribir los datos de registro.
  2. prefijo: un prefijo es una cadena que se agregará al comienzo de cada línea.
  3. bandera: la bandera se utiliza para definir qué propiedades utilizará el registrador.

Ahora se suelen utilizar siete niveles de registro:

Nivel de registro Descripción
Trace Nivel más bajo
Debug Segundo nivel
Info Tercer nivel
Warn Cuarto Nivel
Error Quinto Nivel
Fatal Sexto Nivel
Panic Nivel más alto

Probemos un ejemplo para crear niveles de registro personalizados basados en los niveles de Información, Advertencia, Depuración y Error:

package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "os"
)

var (
    Warning_Level *log.Logger
    Info_Level    *log.Logger
    Debug_Level   *log.Logger
    Error_Level   *log.Logger
)

func init() {
    file, err := os.OpenFile("Demo_logs.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666)
    if err != nil {
        log.Fatal(err)
    }

    Info_Level = log.New(file, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile)
    Warning_Level = log.New(file, "WARNING: ", log.Ldate|log.Ltime|log.Lshortfile)
    Debug_Level = log.New(file, "Debug: ", log.Ldate|log.Ltime|log.Lshortfile)
    Error_Level = log.New(file, "ERROR: ", log.Ldate|log.Ltime|log.Lshortfile)
}

func main() {
    Info_Level.Println("Loading the application.")
    Info_Level.Println("Loading taking time.")
    Warning_Level.Println("There is warning.")
    Debug_Level.Println("Here is debugging information.")
    Error_Level.Println("An Error Occured.")

    // read the log file
    data, err := ioutil.ReadFile("Demo_logs.txt")

    if err != nil {
        log.Panicf("failed reading data from file: %s", err)
    }
    fmt.Printf("\nThe file data is : %s", data)
}

El código anterior crea niveles de registro personalizados utilizando el paquete log de Golang y escribe la información de registro en un archivo. Ver la salida:

The file data is : INFO: 2009/11/10 23:00:00 prog.go:32: Loading the application.
INFO: 2009/11/10 23:00:00 prog.go:33: Loading taking time.
WARNING: 2009/11/10 23:00:00 prog.go:34: There is warning.
Debug: 2009/11/10 23:00:00 prog.go:35: Here is debugging information.
ERROR: 2009/11/10 23:00:00 prog.go:36: An Error Occured.

Program exited.

Los niveles Fatal y Pánico también pueden provocar la finalización de un programa o aplicación, por lo que es imposible crear estos niveles de registro con un paquete log integrado. Pero aparte del paquete log, algunos paquetes de registro de terceros proporcionan siete niveles de registro incorporados. Explorémoslos.

Niveles de registro en Go With zerolog

El zerolog es una biblioteca de terceros para Golang que se utiliza para el registro JSON estructurado. El zerolog proporciona un registrador global, que se puede usar junto con el subpaquete log para un registro simple.

Junto con el registro simple, el zerolog también proporciona niveles de registro integrados. Hay siete niveles de registro en zerolog, que incluyen Info, Advertencia, Depuración, Error y Trace.

El paquete zerolog se proporciona en GitHub y se puede descargar en Golang usando el siguiente comando:

go get -u github.com/rs/zerolog/log

Usar los niveles de registro es muy simple con zerolog. Vea el ejemplo a continuación:

package main

import (
    "github.com/rs/zerolog"
    "github.com/rs/zerolog/log"
)

func main() {
    zerolog.SetGlobalLevel(zerolog.InfoLevel)

    log.Trace().Msg("Tracing..")
    log.Info().Msg("The file is loading.")
    log.Debug().Msg("Here is some useful debugging information.")
    log.Warn().Msg("There is a warning!")
    log.Error().Msg("An Error Occured.")
    log.Fatal().Msg("An Fatal Error Occured.")
    log.Panic().Msg("This is a panic situation.")

}

El código anterior registrará la información según los niveles de registro. Ver la salida:

{"level":"info","time":"2009-11-10T23:00:00Z","message":"The file is loading."}
{"level":"warn","time":"2009-11-10T23:00:00Z","message":"There is a warning!"}
{"level":"error","time":"2009-11-10T23:00:00Z","message":"An Error Occured."}
{"level":"fatal","time":"2009-11-10T23:00:00Z","message":"An Fatal Error Occured."}

Program exited.

Niveles de registro en Go With Logrus

Logrus es otro paquete de terceros para Golang, que proporciona inicio de sesión en JSON. El paquete Logrus se proporciona en GitHub y se puede descargar usando el siguiente comando en cmd:

go get "github.com/Sirupsen/logrus"

Logrus proporciona los siete niveles de registro, que incluyen Trace, Debug, Info, Warn, Error, Fatal y Panic ordenados según la gravedad. El uso de estos niveles de registro también es similar al zerolog, donde necesitamos usar el subpaquete log.

Probemos un ejemplo con niveles de registro del Logrus:

package main

import (
    log "github.com/sirupsen/logrus"
)

func main() {
    log.SetFormatter(&log.JSONFormatter{})
    log.SetLevel(log.DebugLevel)
    log.SetLevel(log.TraceLevel)
    //log.SetLevel(log.PanicLevel)

    log.Trace("Tracing the log info, Lowest level")
    log.Debug("Debugging information. Level two")
    log.Info("Log Info. Level three")
    log.Warn("This is warning. Level Four")
    log.Error("An error occured. Level Five")
    // Calls os.Exit(1) after logging
    log.Fatal("Application terminated. Level Six")
    // Calls panic() after logging
    log.Panic("Panic Situation. Highest Level.")

}

El código anterior registrará la información en función de los niveles utilizando el paquete Logrus. Tenemos que establecer los niveles para mostrar algunos de los niveles de registro.

Ver la salida:

{"level":"trace","msg":"Tracing the log info, Lowest level","time":"2009-11-10T23:00:00Z"}
{"level":"debug","msg":"Debugging information. Level two","time":"2009-11-10T23:00:00Z"}
{"level":"info","msg":"Log Info. Level three","time":"2009-11-10T23:00:00Z"}
{"level":"warning","msg":"This is warning. Level Four","time":"2009-11-10T23:00:00Z"}
{"level":"error","msg":"An error occured. Level Five","time":"2009-11-10T23:00:00Z"}
{"level":"fatal","msg":"Application terminated. Level Six","time":"2009-11-10T23:00:00Z"}

Program exited.
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook