lazygophers/log

Go Version Test Coverage Go Report Card License: MIT

Una biblioteca de registro Go de alto rendimiento y flexible, construida sobre zap, que ofrece funciones ricas y una API simple.

📖 Idiomas de documentación

✨ Características

  • 🚀 Alto rendimiento : Construido sobre zap con reutilización de objetos Entry a través de un pool, reduciendo la asignación de memoria
  • 📊 Niveles de registro ricos : Niveles Trace, Debug, Info, Warn, Error, Fatal, Panic
  • ⚙️ Configuración flexible :
    • Control de nivel de registro
    • Registro de información del llamador
    • Información de traza (incluyendo ID de goroutine)
    • Prefijos y sufijos de registro personalizados
    • Destinos de salida personalizados (consola, archivos, etc.)
    • Opciones de formato de registro
  • 🔄 Rotación de archivos : Soporte para rotación horaria de archivos de registro
  • 🔌 Compatibilidad con Zap : Integración perfecta con zap WriteSyncer
  • 🎯 API simple : API limpia similar a la biblioteca de registro estándar, fácil de usar

🚀 Inicio rápido

Instalación

go get github.com/lazygophers/log

Uso básico

package main

import (
    "github.com/lazygophers/log"
)

func main() {
    // Usar el registrador global por defecto
    log.Debug("Mensaje de depuración")
    log.Info("Mensaje de información")
    log.Warn("Mensaje de advertencia")
    log.Error("Mensaje de error")

    // Usar salida formateada
    log.Infof("El usuario %s ha iniciado sesión correctamente", "admin")

    // Configuración personalizada
    customLogger := log.New().
        SetLevel(log.InfoLevel).
        EnableCaller(false).
        SetPrefixMsg("[MyApp]")

    customLogger.Info("Este es un registro del registrador personalizado")
}

📚 Uso avanzado

Registrador personalizado con salida a archivo

package main

import (
    "os"
    "github.com/lazygophers/log"
)

func main() {
    // Crear registrador con salida a archivo
    logger := log.New().
        SetLevel(log.DebugLevel).
        EnableCaller(true).
        EnableTrace(true).
        SetOutput(os.Stdout, log.GetOutputWriterHourly("/var/log/myapp.log"))

    logger.Debug("Mensaje de depuración con información del llamador")
    logger.Info("Mensaje de información con información de traza")
}

Control de nivel de registro

package main

import "github.com/lazygophers/log"

func main() {
    logger := log.New().SetLevel(log.WarnLevel)

    // Solo se registrarán los mensajes warn y superiores
    logger.Debug("Esto no se registrará")  // Ignorado
    logger.Info("Esto no se registrará")   // Ignorado
    logger.Warn("Esto se registrará")    // Registrado
    logger.Error("Esto se registrará")   // Registrado
}

🔧 Opciones de configuración

Configuración del Logger

Método Descripción Valor por defecto
SetLevel(level) Establecer nivel mínimo de registro DebugLevel
EnableCaller(enable) Habilitar/deshabilitar información del llamador false
EnableTrace(enable) Habilitar/deshabilitar información de traza false
SetCallerDepth(depth) Establecer profundidad del llamador 2
SetPrefixMsg(prefix) Establecer prefijo de registro ""
SetSuffixMsg(suffix) Establecer sufijo de registro ""
SetOutput(writers...) Establecer destinos de salida os.Stdout

Niveles de registro

Nivel Descripción
TraceLevel El más detallado, para traza detallada
DebugLevel Información de depuración
InfoLevel Información general
WarnLevel Mensajes de advertencia
ErrorLevel Mensajes de error
FatalLevel Errores fatales (llama a os.Exit(1))
PanicLevel Errores de pánico (llama a panic())

🏗️ Arquitectura

Componentes principales

  • Logger : Estructura principal de registro con niveles, salidas, formateadores y profundidad del llamador configurables
  • Entry : Registro individual de registro con soporte completo de metadatos
  • Level : Definiciones de niveles de registro y funciones auxiliares
  • Format : Interfaz e implementaciones de formato de registro

Optimizaciones de rendimiento

  • Pool de objetos : Reutilización de objetos Entry para reducir la asignación de memoria
  • Registro condicional : Registro de campos costosos solo cuando sea necesario
  • Verificación rápida de nivel : Verificación del nivel de registro en la capa más externa
  • Diseño sin bloqueo : La mayoría de las operaciones no requieren bloqueo

📊 Comparación de rendimiento

Característica lazygophers/log zap logrus registro estándar
Rendimiento Alto Alto Medio Bajo
Simplicidad de API Alto Medio Alto Alto
Riqueza de funciones Medio Alto Alto Bajo
Flexibilidad Medio Alto Alto Bajo
Curva de aprendizaje Baja Medio Medio Baja

🔗 Documentación relacionada

🚀 Obtener ayuda

📄 Licencia

Este proyecto está licenciado bajo la Licencia MIT - consulte el archivo LICENSE para más detalles.

🤝 Contribuir

¡Bienvenidas las contribuciones! Por favor, consulte nuestra Guía de contribución para más detalles.


lazygophers/log está diseñado para ser la solución de registro predeterminada para desarrolladores Go que valoran tanto el rendimiento como la simplicidad. Ya sea que esté construyendo una pequeña utilidad o un sistema distribuido de gran escala, esta biblioteca ofrece el equilibrio adecuado entre funcionalidad y facilidad de uso.