К основному содержанию
скилл CX Codex

logging-best-practices · boristane — скилл для Claude Code: как установить

Скилл обучает агента практикам структурированного логирования wide events (канонических строк лога). Помогает отказаться от разрозненных console.log в пользу единого JSON-события на запрос.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add boristane/agent-skills --skill logging-best-practices -a claude-code
Открыть на GitHub

Что делает logging-best-practices

Скилл внедряет в агент концепцию wide events, или канонических строк лога (canonical log lines). Вместо десятков разрозненных вызовов console.log сервис формирует один структурированный JSON-объект. Он отдаёт его в блоке finally по завершении обработки запроса. В событие входят идентификаторы userId и requestId, параметры окружения вроде версии сервиса, а также бизнес-контекст — например, тариф пользователя или сумма в корзине.

Внутри лежат четыре руководства: rules/wide-events.md, rules/context.md, rules/structure.md и rules/pitfalls.md. Они предписывают завести единый экземпляр логгера на приложение, вынести тайминги в middleware и ограничиться двумя уровнями: info и error. Текстовые строки логировать запрещено. Отказ от промежуточных warn и debug потребует пересмотреть привычки команды, но избавит индекс от мусорных записей.

Какие задачи решает

  • заменить разрозненные вызовы console.log на единое JSON-событие на запрос
  • добавить бизнес-контекст и параметры окружения в каждую запись лога
  • настроить middleware для сквозного замера времени и статуса запросов
  • стандартизировать схему логирования и ограничить уровни до info и error
  • исключить неструктурированные текстовые строки из логов сервиса

Примеры запросов агенту

  • Перепиши логирование в роуте оплаты по правилам wide events из logging-best-practices
  • Проверь этот middleware на соответствие каноническим строкам лога: добавь requestId, userId и тайминги
  • Настрой один логгер для сервиса и переведи события на уровни info и error

Как установить logging-best-practices

1Через Skills CLI (Vercel)

npx skills add boristane/agent-skills --skill logging-best-practices -a claude-code

2Вручную: положить файлы

~/.claude/skills/logging-best-practices/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/logging-best-practices/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о logging-best-practices

Как установить logging-best-practices в Claude Code?

Выполните команду npx skills add boristane/agent-skills --skill logging-best-practices -a claude-code.

Что такое wide events в логировании?

Это подход (канонические строки лога), когда на каждый запрос сервис выпускает ровно одну запись в формате JSON при завершении обработки. В неё собирают технические метрики, идентификаторы запроса и пользователя, а также бизнес-данные.

Какие уровни логирования рекомендует скилл?

Скилл предписывает упростить логирование до двух уровней: info для штатных операций и error для сбоев. Промежуточные уровни вроде debug или warn не используются, а неструктурированные текстовые строки запрещены.

Исходный текст

SKILL.md · MIT
---
name: logging-best-practices
description: Logging best practices focused on wide events (canonical log lines) for powerful debugging and analytics
license: MIT
metadata:
  author: boristane
  version: "1.0.0"
---

# Logging Best Practices Skill

Version: 1.0.0

## Purpose

This skill provides guidelines for implementing effective logging in applications. It focuses on **wide events** (also called canonical log lines) - a pattern where you emit a single, context-rich event per request per service, enabling powerful debugging and analytics.

## When to Apply

Apply these guidelines when:
- Writing or reviewing logging code
- Adding console.log, logger.info, or similar
- Designing logging strategy for new services
- Setting up logging infrastructure

## Core Principles

### 1. Wide Events (CRITICAL)

Emit **one context-rich event per request per service**. Instead of scattering log lines throughout your handler, consolidate everything into a single structured event emitted at request completion.

```typescript
const wideEvent: Record<string, unknown> = {
  method: 'POST',
  path: '/checkout',
  requestId: c.get('requestId'),
  timestamp: new Date().toISOString(),
};

try {
  const user = await getUser(c.get('userId'));
  wideEvent.user = { id: user.id, subscription: user.subscription };

  const cart = await getCart(user.id);
  wideEvent.cart = { total_cents: cart.total, item_count: cart.items.length };

  wideEvent.status_code = 200;
  wideEvent.outcome = 'success';
  return c.json({ success: true });
} catch (error) {
  wideEvent.status_code = 500;
  wideEvent.outcome = 'error';
  wideEvent.error = { message: error.message, type: error.name };
  throw error;
} finally {
  wideEvent.duration_ms = Date.now() - startTime;
  logger.info(wideEvent);
}
```

### 2. High Cardinality & Dimensionality (CRITICAL)

Include fields with high cardinality (user IDs, request IDs - millions of unique values) and high dimensionality (many fields per event). This enables querying by specific users and answering questions you haven't anticipated yet.

### 3. Business Context (CRITICAL)

Always include business context: user subscription tier, cart value, feature flags, account age. The goal is to know "a premium customer couldn't complete a $2,499 purchase" not just "checkout failed."

### 4. Environment Characteristics (CRITICAL)

Include environment and deployment info in every event: commit hash, service version, region, instance ID. This enables correlating issues with deployments and identifying region-specific problems.

### 5. Single Logger (HIGH)

Use one logger instance configured at startup and import it everywhere. This ensures consistent formatting and automatic environment context.

### 6. Middleware Pattern (HIGH)

Use middleware to handle wide event infrastructure (timing, status, environment, emission). Handlers should only add business context.

### 7. Structure & Consistency (HIGH)

- Use JSON format consistently
- Maintain consistent field names across services
- Simplify to two log levels: `info` and `error`
- Never log unstructured strings

## Anti-Patterns to Avoid

1. **Scattered logs**: Multiple console.log() calls per request
2. **Multiple loggers**: Different logger instances in different files
3. **Missing environment context**: No commit hash or deployment info
4. **Missing business context**: Logging technical details without user/business data
5. **Unstructured strings**: `console.log('something happened')` instead of structured data
6. **Inconsistent schemas**: Different field names across services

## Guidelines

### Wide Events (`rules/wide-events.md`)
- Emit one wide event per service hop
- Include all relevant context
- Connect events with request ID
- Emit at request completion in finally block

### Context (`rules/context.md`)
- Support high cardinality fields (user_id, request_id)
- Include high dimensionality (many fields)
- Always include business context
- Always include environment characteristics (commit_hash, version, region)

### Structure (`rules/structure.md`)
- Use a single logger throughout the codebase
- Use middleware for consistent wide events
- Use JSON format
- Maintain consistent schema
- Simplify to info and error levels
- Never log unstructured strings

### Common Pitfalls (`rules/pitfalls.md`)
- Avoid multiple log lines per request
- Design for unknown unknowns
- Always propagate request IDs across services

References:
- [Logging Sucks](https://loggingsucks.com)
- [Observability Wide Events 101](https://boristane.com/blog/observability-wide-events-101/)
- [Stripe - Canonical Log Lines](https://stripe.com/blog/canonical-log-lines)

© boristane · MIT · boristane/agent-skills

Похожие скиллы

Всё по теме «Бэкенд и API» →

Сначала — logging-best-practices от других авторов.

logging-best-practices aj-geddes Скилл для настройки логирования: уровни, JSON-формат, контекст, защита PII и централизованный сбор логов. CX Codex +1 730установок logging-best-practices Mindrally Скилл задаёт правила логирования: структурный JSON, уровни, общие поля и работа с контекстом запроса. Пригодится, когда логи в проекте пишут кто как хочет. CX Codex +1 791установок logging-best-practices secondsky Скилл задаёт агенту правила структурного логирования: уровни, контекст запроса, маскировка персональных данных. Пригодится, когда логи пухнут или в них утекают пароли. CX Codex +1 396установок review-logging-patterns HugoRCD Скилл разбирает логирование в TypeScript-проекте: находит console.log-спам, ошибки без контекста и предлагает перейти на evlog. CX Codex +1 750установок logging codewithmukesh Скилл про наблюдаемость в .NET 10: разводит liveness и readiness, прокидывает correlation ID и задаёт уровни логов. CX Codex +1 2 800установок go-logging cxuu Скилл для ИИ-агента, который подсказывает, как писать логи в Go: уровни, структурные поля, контекст запроса. Пригодится, когда проект на Go обрастает логами и надо навести порядок. CX Codex +1 1 000установок sentry-instrument-logging getsentry Добавляет в приложение структурные логи Sentry: агент сам находит сервисы в репозитории и расставляет сообщения по общим правилам. CX Codex +1 533установок application-logging aj-geddes Скилл для настройки структурного логирования в приложениях: уровни, контекст, централизованный сбор и разбор логов. CX Codex +1 496установок hono-middleware bobmatnyc Скилл с паттернами middleware для Hono: создание, композиция, встроенные модули и порядок выполнения. Пригодится, когда в приложение нужно добавить авторизацию, CORS или логирование. CX Codex +1 431установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой