Cuihua Logger
/install cuihua-logger
cuihua-logger - Production-Ready Logging 📝
Debug faster with intelligent, structured logging.
An AI-powered logging assistant that automatically:
- 📝 Generates structured logs with proper context
- 🎯 Selects appropriate log levels (debug, info, warn, error)
- 📊 Adds performance metrics and timing
- 🔍 Detects missing logs in critical paths
- ⚡ Optimizes log output for production
🎯 Why cuihua-logger?
The problem:
- ❌ Too many
console.log()everywhere - ❌ No structure, hard to search
- ❌ Wrong log levels (everything is "info")
- ❌ Missing context (what user? what request?)
- ❌ Performance overhead in production
cuihua-logger solves all of this.
🚀 Quick Start
Analyze logging coverage
"Check logging coverage in src/"
Add structured logging
"Add logging to getUserById function"
Generate performance logs
"Add performance logging to API endpoints"
🎨 Features
1. Structured Logging ✨
// ❌ BEFORE - Unstructured
async function getUserById(id) {
console.log('Getting user:', id);
const user = await db.query('SELECT * FROM users WHERE id = $1', [id]);
console.log('User found:', user);
return user;
}
// ✅ AFTER - Structured
async function getUserById(id) {
logger.info('Fetching user', {
userId: id,
operation: 'getUserById'
});
const startTime = Date.now();
const user = await db.query('SELECT * FROM users WHERE id = $1', [id]);
const duration = Date.now() - startTime;
logger.info('User fetched successfully', {
userId: id,
operation: 'getUserById',
duration,
found: !!user
});
return user;
}
2. Smart Log Levels 🎯
// Automatic level selection based on context
logger.debug('Cache hit', { key, ttl }); // Development only
logger.info('User logged in', { userId, ip }); // Important events
logger.warn('Rate limit approaching', {
userId,
current: 95,
limit: 100
}); // Potential issues
logger.error('Payment failed', {
orderId,
error: error.message,
stack: error.stack
}); // Critical errors
3. Performance Logging ⚡
async function fetchData() {
const timer = logger.startTimer();
const data = await expensiveOperation();
timer.done({ level: 'info', message: 'Operation complete' });
return data;
}
// Output: "Operation complete" duration=1234ms
4. Request Tracking 🔍
app.use((req, res, next) => {
req.requestId = generateId();
req.logger = logger.child({
requestId: req.requestId,
method: req.method,
path: req.path
});
req.logger.info('Request started');
res.on('finish', () => {
req.logger.info('Request completed', {
statusCode: res.statusCode,
duration: Date.now() - req.startTime
});
});
next();
});
📋 Usage Examples
Example 1: Add Logging to Function
User: "Add logging to processOrder function"
Generated:
async function processOrder(orderId, items) {
logger.info('Processing order', { orderId, itemCount: items.length });
try {
// Validate
if (!orderId || !items.length) {
logger.warn('Invalid order data', { orderId, items });
throw new ValidationError('Invalid order');
}
// Create order
const order = await createOrder(orderId, items);
logger.info('Order created', { orderId, orderNumber: order.number });
// Process payment
const payment = await processPayment(order);
logger.info('Payment processed', {
orderId,
paymentId: payment.id,
amount: payment.amount
});
return order;
} catch (error) {
logger.error('Order processing failed', {
orderId,
error: error.message,
stack: error.stack
});
throw error;
}
}
Example 2: API Endpoint Logging
app.post('/api/users', async (req, res) => {
const { logger } = req;
logger.info('Creating user', { email: req.body.email });
try {
const user = await userService.create(req.body);
logger.info('User created successfully', {
userId: user.id,
email: user.email
});
res.status(201).json(user);
} catch (error) {
logger.error('User creation failed', {
email: req.body.email,
error: error.message
});
res.status(500).json({ error: 'Failed to create user' });
}
});
⚙️ Logger Configuration
Winston
import winston from 'winston';
const logger = winston.createLogger({
level: process.env.LOG_LEVEL || 'info',
format: winston.format.combine(
winston.format.timestamp(),
winston.format.errors({ stack: true }),
winston.format.json()
),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
Pino (fastest)
import pino from 'pino';
const logger = pino({
level: process.env.LOG_LEVEL || 'info',
timestamp: pino.stdTimeFunctions.isoTime,
formatters: {
level: (label) => ({ level: label })
}
});
📊 Log Levels
| Level | When to Use | Example |
|---|---|---|
| debug | Development debugging | logger.debug('Cache miss', { key }) |
| info | Important events | logger.info('User logged in', { userId }) |
| warn | Potential issues | logger.warn('Rate limit approaching', { userId }) |
| error | Errors that need attention | logger.error('Payment failed', { orderId }) |
💰 Pricing
Free
- ✅ Basic log generation
- ✅ Up to 10 files
Pro ($8/month)
- ✅ Unlimited files
- ✅ Performance logging
- ✅ Request tracking
- ✅ CI/CD integration
Enterprise ($59/month)
- ✅ Team policies
- ✅ Log aggregation setup
- ✅ Custom formatters
📚 Best Practices
- Always log errors with context
- Use structured logging (objects, not strings)
- Include request IDs for tracing
- Don't log sensitive data (passwords, tokens)
- Use appropriate log levels
📜 License
MIT
🙏 Acknowledgments
Built with 🌸 by 翠花 (Cuihua)
Made with 🌸 | Cuihua Series | ClawHub Pioneer
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install cuihua-logger - 安装完成后,直接呼叫该 Skill 的名称或使用
/cuihua-logger触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
Cuihua Logger 是什么?
📝 AI-powered logging assistant that generates production-ready structured logs. Automatically add intelligent logging to your code with proper levels, conte... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 133 次。
如何安装 Cuihua Logger?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install cuihua-logger」即可一键安装,无需额外配置。
Cuihua Logger 是免费的吗?
是的,Cuihua Logger 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
Cuihua Logger 支持哪些平台?
Cuihua Logger 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 Cuihua Logger?
由 supermario11(@supermario11)开发并维护,当前版本 v1.0.0。