logging-best-practices · secondsky — скилл для Claude Code: структурные логи
Скилл задаёт агенту правила структурного логирования: уровни, контекст запроса, маскировка персональных данных. Пригодится, когда логи пухнут или в них утекают пароли.
npx skills add secondsky/claude-skills --skill logging-best-practices -a claude-codeЧто делает logging-best-practices
Скилл описывает, как писать логи в приложении: таблица уровней от DEBUG до FATAL с пометкой, что включать в продакшене, примеры на Winston с JSON-форматом и отдельным файлом для ошибок, контекст запроса через AsyncLocalStorage с requestId и userId, функция sanitize для полей вроде password, ssn, creditCard, token и маскировка email.
Внутри есть раздел с тем, чего делать не стоит: логировать пароли и токены, оставлять console.log в продакшене, писать логи внутри тесных циклов, отдавать стек-трейс на клиентские ошибки. Отдельный файл references/advanced-logging.md разбирает Python structlog, Go zap, ELK, AWS CloudWatch и OpenTelemetry.
Примеры кода в скилле на JavaScript, так что для Python или Go придётся идти в справочник и переносить идеи руками. Уровень по умолчанию — info через LOG_LEVEL, и это стоит проверить до выката: если переменная не задана, DEBUG-логи в продакшене всё равно не появятся, но и нужный уровень вы не переключите.
Какие задачи решает
- разложить сообщения по уровням и убрать DEBUG из продакшена
- добавить requestId и userId в каждую запись лога
- вычистить пароли, токены и email перед записью
- настроить ротацию и отдельный файл под ошибки
- связать логи нескольких сервисов через correlation ID
Примеры запросов агенту
- Настрой структурное логирование в этом сервисе по скиллу logging-best-practices
- Добавь контекст запроса в логи через AsyncLocalStorage, как в скилле
- Проверь логи на PII и замаскируй чувствительные поля
Как установить logging-best-practices
1Через Skills CLI (Vercel)
npx skills add secondsky/claude-skills --skill logging-best-practices -a claude-code2Вручную: положить файлы
~/.claude/skills/logging-best-practices/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/logging-best-practices/
1Через Skills CLI (Vercel)
npx skills add secondsky/claude-skills --skill logging-best-practices -a codex2Вручную: положить файлы
.agents/skills/logging-best-practices/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add secondsky/claude-skills --skill logging-best-practices -a cursor2Вручную: положить файлы
.cursor/skills/logging-best-practices/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install secondsky/claude-skills logging-best-practices2Вручную: положить файлы
.github/skills/logging-best-practices/SKILL.md1Через Skills CLI (Vercel)
npx skills add secondsky/claude-skills --skill logging-best-practices -a gemini-cli2Командой платформы
gemini skills install https://github.com/secondsky/claude-skills --path plugins/logging-best-practices/skills/logging-best-practicesВручную: положить файлы
.devin/skills/logging-best-practices/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add secondsky/claude-skills --skill logging-best-practices -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Из того же набора89
Другие версии logging-best-practices
Похожие
Рядом в теме «Бэкенд и API»
Всё по теме «Бэкенд и API» →Вопросы о logging-best-practices
Как установить logging-best-practices в Claude?
Выполните npx skills add secondsky/claude-skills --skill logging-best-practices -a claude-code. После этого файл скилла появится по пути ~/.claude/skills/logging-best-practices/SKILL.md.
Что делает logging-best-practices?
Описывает агенту, как вести логи: какие уровни использовать, как прокидывать контекст запроса, как маскировать персональные данные и что в логи писать нельзя.
Скилл работает только с JavaScript?
Основные примеры на Winston и AsyncLocalStorage, то есть JavaScript. Для Python structlog, Go zap, ELK, CloudWatch и OpenTelemetry в скилле есть отдельный справочный файл.
Исходный текст
SKILL.md · MIT
---
name: logging-best-practices
description: Structured logging with proper levels, context, PII handling, centralized aggregation. Use for application logging, log management integration, distributed tracing, or encountering log bloat, PII exposure, missing context errors.
license: MIT
---
# Logging Best Practices
Implement secure, structured logging with proper levels and context.
## Log Levels
| Level | Use For | Production |
|-------|---------|------------|
| DEBUG | Detailed debugging | Off |
| INFO | Normal operations | On |
| WARN | Potential issues | On |
| ERROR | Errors with recovery | On |
| FATAL | Critical failures | On |
## Structured Logging (Winston)
```javascript
const winston = require('winston');
const logger = winston.createLogger({
level: process.env.LOG_LEVEL || 'info',
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
),
defaultMeta: { service: 'api-service' },
transports: [
new winston.transports.Console(),
new winston.transports.File({ filename: 'error.log', level: 'error' })
]
});
// Usage
logger.info('User logged in', { userId: '123', ip: '192.168.1.1' });
logger.error('Payment failed', { error: err.message, orderId: '456' });
```
## Request Context
```javascript
const { AsyncLocalStorage } = require('async_hooks');
const storage = new AsyncLocalStorage();
app.use((req, res, next) => {
const context = {
requestId: req.headers['x-request-id'] || uuid(),
userId: req.user?.id
};
storage.run(context, next);
});
function log(level, message, meta = {}) {
const context = storage.getStore() || {};
logger.log(level, message, { ...context, ...meta });
}
```
## PII Sanitization
```javascript
const sensitiveFields = ['password', 'ssn', 'creditCard', 'token'];
function sanitize(obj) {
const sanitized = { ...obj };
for (const field of sensitiveFields) {
if (sanitized[field]) sanitized[field] = '[REDACTED]';
}
if (sanitized.email) {
sanitized.email = sanitized.email.replace(/(.{2}).*@/, '$1***@');
}
return sanitized;
}
```
## Best Practices
- Use structured JSON format
- Include correlation IDs across services
- Sanitize all PII before logging
- Use async logging for performance
- Implement log rotation
- Never log at DEBUG in production
## Additional Implementations
See [references/advanced-logging.md](references/advanced-logging.md) for:
- Python structlog setup
- Go zap high-performance logging
- ELK Stack integration
- AWS CloudWatch configuration
- OpenTelemetry tracing
## Never Do
- Log passwords or tokens
- Use console.log in production
- Log inside tight loops
- Include stack traces for client errors
© secondsky · MIT · secondsky/claude-skills