.cursor/skills/golang-logging/SKILL.md
Контекстное логирование в Go с github.com/muonsoft/clog. Используй при добавлении логов, работе с контекстным логгером в internal/ и cmd/.
npx skillsauth add strider2038/knowledge-db golang-loggingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Пакет: github.com/muonsoft/clog (надстройка над log/slog).
context.Contextslog.Attr) добавляются к логгеруgithub.com/muonsoft/errors логируются напрямую — атрибуты подхватываютсяimport (
"log/slog"
"github.com/muonsoft/clog"
)
// В middleware или main:
logger := slog.Default().With(
slog.String("request_method", r.Method),
slog.String("request_url", r.URL.Path),
)
ctx := clog.NewContext(r.Context(), logger)
Извлечение: logger := clog.FromContext(ctx)
| Уровень | Использование |
|---------|---------------|
| Debug | Отладочная информация |
| Info | Нормальный ход работы |
| Warn | Нештатные, некритичные ситуации (fallback, опциональный шаг) |
| Error | Ошибки важных частей логики — с clog.Errorf и %w для сохранения стека |
Обязательно использовать clog.Errorf, а не clog.Error + slog.String("error", ...):
// Неправильно
clog.Error(ctx, "failed", slog.String("error", err.Error()))
// Правильно
clog.Errorf(ctx, "get node failed: %w", err)
Для ошибок важных частей логики (перевод, сохранение, критичные шаги pipeline) — использовать clog.Errorf с %w, а не Warn:
// Неправильно — теряется стек, уровень занижен
clog.Warn(ctx, "translation failed", "error", err)
// Правильно — стек сохраняется через %w
clog.Errorf(ctx, "ingest text: translation failed: %w", err)
Warn — для некритичных ситуаций (fallback, опциональный шаг). Error — когда сбой влияет на результат.
Не вызывать clog.FromContext(ctx) многократно в одной функции — только для однократного извлечения, если логгер переиспользуется:
// Неправильно — многократный вызов FromContext
clog.FromContext(ctx).Info("start", "x", 1)
clog.FromContext(ctx).Info("done", "x", 2)
// Правильно — сокращённый метод
clog.Info(ctx, "start", "x", 1)
clog.Info(ctx, "done", "x", 2)
// Либо — однократное извлечение при частом переиспользовании
logger := clog.FromContext(ctx)
logger.Info("start", "x", 1)
logger.Debug("step", "y", 2)
logger.Info("done", "x", 2)
Сокращённые методы: clog.Info(ctx, msg, args...), clog.Warn(ctx, msg, args...), clog.Debug(ctx, msg, args...).
clog.FromContext или clog.Info(ctx, ...) и т.п.)clog.FromContext(ctx) или clog.*(ctx, ...), не slog.* напрямую"get node", "validate base"clog.Errorf с %w, не Warn с атрибутомdevelopment
Knowledge base layout and node format for knowledge-db. Use when creating or editing KB markdown files. Root path placeholder {{DATA_PATH}}.
development
Frontend web/ (React, TypeScript, Vite). Используй при работе с web/src/**/*.tsx, web/src/**/*.ts.
tools
Регистрация фоновых процессов через pior/runnable. Используй при добавлении Telegram bot и других воркеров в kb-server.
testing
Verify implementation matches change artifacts. Use when the user wants to validate that implementation is complete, correct, and coherent before archiving.