slogpretty

package module
v0.1.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 16, 2025 License: MIT Imports: 9 Imported by: 1

README

slogpretty ✨

Um handler personalizável e colorido para o slog handler em Go — projetado para saída estruturada, legível e bonita no terminal.

demo banner

Funcionalidades

  • 🌈 Níveis de log com cores (DEBUG, INFO, WARN, ERROR)
  • 📝 Atributos estruturados com formatação
  • 📂 Rastreamento inteligente da origem (arquivo:linha)
  • 🪄 Modo multilinha para dados complexos
  • ⏱️ Formatação personalidada de timestamp

Instalação

go get github.com/Marlliton/slogpretty

Uso Básico

Configure o slogpretty como handler padrão:

package main

import (
	"log/slog"
	"os"

	"github.com/Marlliton/slogpretty"
)

func main() {
	// Minimal setup
	handler := slogpretty.New(os.Stdout, nil)
	slog.SetDefault(slog.New(handler))

	slog.Info("Server started", "port", 8080)
}

minimal setup

Configurações Avançadas

Você pode configurar o handler usando a struct Options:

handler := slogpretty.New(os.Stdout, &slogpretty.Options{
	Level:      slog.LevelDebug,
	AddSource:  true,                            // Mostrar localização do arquivo
	Colorful:   true,                            // Habilitar cores. Valor padrão (true)
	Multiline:  true,                            // Impressão bonita para dados complexos
	TimeFormat: slogpretty.DefaultTimeFormat,    // Formato personalizado (ex: time.Kitchen)
})

minimal setup

Funcionalidades

  1. Níveis coloridos

    Cada nível de log tem uma cor distinta

  2. Atributos estruturados

    Formatação limpa dos atributos

	slog.Debug("Debugging data")
	slog.Info("Informational message")
	slog.Warn("Potential issue detected")
	slog.Error("Operation failed")
	slog.Info("User logged in", "user_id", 1234, "email", "user@example.com", "active", true)

minimal setup

  1. Dados Complexos em Multiplas linhas
	slog.Info("Evento com grupo e subgrupos",
		"user", "bob",
		slog.Group("details",
			slog.Int("port", 8080),
			slog.String("status", "inactive"),
			slog.Group("metrics",
				slog.Float64("cpu", 72.5),
				slog.Float64("memory", 65.3),
			),
			slog.Group("location",
				slog.String("country", "Brazil"),
				slog.String("region", "SP"),
				slog.Group("coordinates",
					slog.Float64("lat", -23.5505),
					slog.Float64("lon", -46.6333),
				),
			),
		),
		"session", "0x93AF21",
		"authenticated", false,
	)

minimal setup

💡 Boas práticas

🛠 Desenvolvimento: Habilite quantos recursos desejar

Em ambientes de desenvolvimento, é recomendável ativar o máximo de recursos possível para melhorar a leitura, depuração e rastreabilidade dos logs:

&pretty.Options{
    Level:     slog.LevelDebug,
    AddSource: true,
    Colorful:  true,
    Multiline: true,
}

Essas opções permitem:

  • Logs a partir do nível de debug (LevelDebug)
  • Rastreamento de origem (AddSource)
  • Saída colorida para melhor visibilidade no terminal (Colorful)
  • Formatação estruturada em várias linhas (Multiline)

🚀 Produção: Use o JSONHandler nativo do slog

Para produção, é melhor usar o slog.NewJSONHandler, que gera logs em formato JSON:

JSONhandler := slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
	Level: slog.LevelInfo,
})
slog.SetDefault(slog.New(JSONhandler))

slog.Info("Event with groups and subgroups",
	"user", "bob",
	slog.Group("details",
		slog.Int("port", 8080),
		slog.String("status", "inactive"),
		slog.Group("metrics",
			slog.Float64("cpu", 72.5),
			slog.Float64("memory", 65.3),
		),
		slog.Group("location",
			slog.String("country", "Brazil"),
			slog.String("region", "SP"),
			slog.Group("coordinates",
				slog.Float64("lat", -23.5505),
				slog.Float64("lon", -46.6333),
			),
		),
	),
	"session", "0x93AF21",
	"authenticated", false,
)
✅ Por que usar JSON em produção?
  • Compatível com ferramentas de observabilidade (ex: Datadog, Loki, Grafana)
  • Formato altamente aceito — facilita análise, busca etc.
  • Estrutura padronizada — ideal para sistemas distribuídos e logs centralizados
  • Eficiente — evita sobrecarga com formatação visual desnecessária

Documentation

Index

Constants

View Source
const DefaultTimeFormat = "2006-01-02 15:04:05.000"

Variables

This section is empty.

Functions

This section is empty.

Types

type Options

type Options struct {
	Level      slog.Level
	AddSource  bool
	Colorful   bool
	Multiline  bool
	TimeFormat string
}

func DefaultOptions

func DefaultOptions() *Options

type SlogPretty

type SlogPretty struct {
	// contains filtered or unexported fields
}

func New

func New(out io.Writer, opts *Options) *SlogPretty

==================== Initialization ====================

func (*SlogPretty) Enabled

func (h *SlogPretty) Enabled(ctx context.Context, level slog.Level) bool

==================== Handler Interface Methods ====================

func (*SlogPretty) Handle

func (h *SlogPretty) Handle(ctx context.Context, r slog.Record) error

func (*SlogPretty) WithAttrs

func (h *SlogPretty) WithAttrs(attrs []slog.Attr) slog.Handler

func (*SlogPretty) WithGroup

func (h *SlogPretty) WithGroup(name string) slog.Handler

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL