Structured logging — логирование в виде пар ключ-значение вместо произвольных строк. Вместо log.Printf("user %d logged in from %s", id, ip) пишешь slog.Info("user logged in", "user_id", id, "ip", ip).
// плохо — неструктурировано, не парсится
log.Printf("Failed to process order 123 for user 456")
// хорошо — структурировано, легко искать
slog.Error("failed to process order",
"order_id", 123,
"user_id", 456,
"err", err,
)
// {"level":"ERROR","msg":"failed to process order","order_id":123,"user_id":456}
Зачем: структурированные логи можно индексировать, фильтровать, агрегировать в ELK, Loki, Datadog. Найти все ошибки для user_id=456 — один запрос вместо regex по строкам. Это основа observability в современных системах. Если твои логи нельзя парсить машиной — они почти бесполезны в проде.