|
借助智能结构化日志,更快地调试。
一个AI驱动的日志助手,能够自动:
存在的问题:
cuihua-logger 解决了所有这些问题。
检查 src/ 中的日志覆盖范围
为 getUserById 函数添加日志
为 API 端点添加性能日志
javascript
// ❌ 之前 - 非结构化
async function getUserById(id) {
console.log(正在获取用户:, id);
const user = await db.query(SELECT * FROM users WHERE id = $1, [id]);
console.log(找到用户:, user);
return user;
}
// ✅ 之后 - 结构化
async function getUserById(id) {
logger.info(正在获取用户, {
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(用户获取成功, {
userId: id,
operation: getUserById,
duration,
found: !!user
});
return user;
}
javascript
// 基于上下文的自动级别选择
logger.debug(缓存命中, { key, ttl }); // 仅开发环境
logger.info(用户登录, { userId, ip }); // 重要事件
logger.warn(速率限制即将达到, {
userId,
current: 95,
limit: 100
}); // 潜在问题
logger.error(支付失败, {
orderId,
error: error.message,
stack: error.stack
}); // 严重错误
javascript
async function fetchData() {
const timer = logger.startTimer();
const data = await expensiveOperation();
timer.done({ level: info, message: 操作完成 });
return data;
}
// 输出:操作完成 duration=1234ms
javascript
app.use((req, res, next) => {
req.requestId = generateId();
req.logger = logger.child({
requestId: req.requestId,
method: req.method,
path: req.path
});
req.logger.info(请求开始);
res.on(finish, () => {
req.logger.info(请求完成, {
statusCode: res.statusCode,
duration: Date.now() - req.startTime
});
});
next();
});
用户:为 processOrder 函数添加日志
生成结果:
javascript
async function processOrder(orderId, items) {
logger.info(正在处理订单, { orderId, itemCount: items.length });
try {
// 验证
if (!orderId || !items.length) {
logger.warn(无效的订单数据, { orderId, items });
throw new ValidationError(无效订单);
}
// 创建订单
const order = await createOrder(orderId, items);
logger.info(订单已创建, { orderId, orderNumber: order.number });
// 处理支付
const payment = await processPayment(order);
logger.info(支付已处理, {
orderId,
paymentId: payment.id,
amount: payment.amount
});
return order;
} catch (error) {
logger.error(订单处理失败, {
orderId,
error: error.message,
stack: error.stack
});
throw error;
}
}
javascript
app.post(/api/users, async (req, res) => {
const { logger } = req;
logger.info(正在创建用户, { email: req.body.email });
try {
const user = await userService.create(req.body);
logger.info(用户创建成功, {
userId: user.id,
email: user.email
});
res.status(201).json(user);
} catch (error) {
logger.error(用户创建失败, {
email: req.body.email,
error: error.message
});
res.status(500).json({ error: 创建用户失败 });
}
});
javascript
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 })
]
});
javascript
import pino from pino;
const logger = pino({
level: process.env.LOG_LEVEL || info,
timestamp: pino.stdTimeFunctions.isoTime,
formatters: {
level: (label) => ({ level: label })
}
});
| 级别 | 使用场景 | 示例 |
|---|---|---|
| debug | 开发调试 | logger.debug(缓存未命中, { key }) |
| info |
MIT
由翠花(Cuihua)用 🌸 打造
该技能支持在以下平台通过对话安装:
帮我安装 SkillHub 和 cuihua-logger-1776056529 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 cuihua-logger-1776056529 技能
skillhub install cuihua-logger-1776056529
文件大小: 5.72 KB | 发布时间: 2026-4-14 14:22