Skip to main content


Logs básicos​


Os logs são registros de informações geradas durante a execução de um programa, eles servem para acompanhar o funcionamento e identificar possíveis problemas. Podemos criar logs usando o package log, que oferece funções para registrar mensagens com data e hora. Também temos o package log/slog, que permite organizar os registros por níveis, como informações, avisos e erros.



Criando logs com o package log​


O package log faz parte da biblioteca padrão do Go e permite registrar mensagens de forma parecida com fmt.Println, mas adicionando automaticamente a data e a hora em que cada mensagem foi gerada. Por padrão, essas mensagens são enviadas para o stderr, que já estudamos anteriormente.

package main

import "log"

func main() {
// Registra informações sobre a execução.
log.Println("Programa iniciado")

log.Println("Carregando usuários...")

log.Println("Usuários carregados com sucesso")
}

Resultado possível:

2026/10/10 10:30:00 Programa iniciado
2026/10/10 10:30:00 Carregando usuários...
2026/10/10 10:30:00 Usuários carregados com sucesso

A diferença de log.Println(), é que ele registra as mensagens sem a gente precise informar manualmente a data e a hora, o outro lado que não vemos, é que ele não usa stdout e sim stderr.


Também podemos usar log.Printf() quando precisamos formatar os valores dentro da mensagem.

quantidade := 20

// Registra uma mensagem com formatação.
log.Printf("Foram encontrados %d usuários", quantidade)


Níveis de log com slog​


O package log/slog foi adicionado à biblioteca padrão do Go na versão 1.21 e permite criar logs estruturados, organizando as mensagens por níveis e adicionando informações em formato de chave e valor. Os níveis servem para identificar a importância de cada registro. O DEBUG é usado para informações detalhadas durante o desenvolvimento, o INFO para registrar o funcionamento normal do programa, o WARN para situações que precisam de atenção e o ERROR para registrar problemas que ocorreram durante a execução.

package main

import (
"log/slog"
"os"
)

func main() {
// Cria um logger que escreve no stdout.
logger := slog.New(slog.NewTextHandler(os.Stdout, nil))

// Registra informações em diferentes níveis.
logger.Debug("Iniciando conexão")
logger.Info("Programa iniciado")
logger.Warn("Conexão demorando para responder")
logger.Error("Falha ao conectar")
}

Resultado possível:

time=2026-10-10T10:30:00-03:00 level=INFO msg="Programa iniciado"
time=2026-10-10T10:30:00-03:00 level=WARN msg="Conexão demorando para responder"
time=2026-10-10T10:30:00-03:00 level=ERROR msg="Falha ao conectar"

Observe que a mensagem DEBUG não apareceu, isso acontece porque o slog usa o nível INFO como padrão, mostrando apenas mensagens desse nível ou superiores. Para permitir mensagens de DEBUG, podemos configurar o nível mínimo usando slog.HandlerOptions.

// Cria um logger que também mostra mensagens DEBUG.
logger := slog.New(slog.NewTextHandler(
os.Stdout,
&slog.HandlerOptions{
Level: slog.LevelDebug,
},
))

Também podemos adicionar informações aos logs por meio de pares de chave e valor.

// Registra informações sobre o usuário.
logger.Info("Usuário cadastrado", "id", 10, "nome", "Ana")

Resultado possível:

time=2026-10-10T10:30:00-03:00 level=INFO msg="Usuário cadastrado" id=10 nome=Ana

Além do formato de texto, o slog também permite gerar registros em JSON usando slog.NewJSONHandler(), o que facilita o processamento dos logs por ferramentas de monitoramento.