我想问的是,在应用运行过程中,经常会发生异常或错误,这些是不可避免的哈。
为了方便开发者快速定位和解决 Bug,如何使用 HiLog 有效地记录错误日志?特别是在 try-catch 代码块中捕获到异常时,开发者应该如何最佳实践地使用 HiLog 记录详细的异常信息 (例如,异常类型、错误堆栈、错误发生位置等),以便于后续的问题追踪和复现?
希望大家能分享一下 HiLog 在异常处理和错误日志记录中的最佳实践方法,最好能提供代码示例进行说明。
我想问的是,在应用运行过程中,经常会发生异常或错误,这些是不可避免的哈。
为了方便开发者快速定位和解决 Bug,如何使用 HiLog 有效地记录错误日志?特别是在 try-catch 代码块中捕获到异常时,开发者应该如何最佳实践地使用 HiLog 记录详细的异常信息 (例如,异常类型、错误堆栈、错误发生位置等),以便于后续的问题追踪和复现?
希望大家能分享一下 HiLog 在异常处理和错误日志记录中的最佳实践方法,最好能提供代码示例进行说明。
1.基础异常捕获与日志记录
import { hiLog } from 'HiLog';
try {
// 业务代码(如调用API、数据库操作)
const result = await someRiskyOperation();
} catch (error) {
// 记录ERROR级别日志,包含堆栈和自定义上下文
hiLog.error({
tag: 'ModuleName/API', // 按模块或功能分类
message: 'Failed to execute risky operation',
error: {
name: error.name, // 异常类型(如TypeError)
message: error.message, // 错误描述
stack: error.stack, // 完整堆栈(关键!)
},
context: { // 业务上下文
userId: '123',
requestId: 'req-456',
},
});
// 可选:将错误转换为用户友好提示
throw new BusinessError('操作失败,请重试');
}
2.结构化日志增强可读性
// 使用JSON结构化日志,方便ELK等系统分析
hiLog.error({
tag: 'PaymentService',
message: 'Payment processing failed',
error: JSON.stringify(error, Object.getOwnPropertyNames(error)), // 序列化整个Error对象
metadata: {
orderId: order.id,
amount: order.amount,
env: process.env.NODE_ENV,
},
});
3.关键业务链路日志(DEBUG + ERROR组合)
async function processOrder(order: Order) {
hiLog.debug({
tag: 'OrderService',
message: 'Start processing order',
orderId: order.id,
});
try {
await paymentService.charge(order);
hiLog.info({
tag: 'OrderService',
message: 'Order paid successfully',
orderId: order.id,
});
} catch (error) {
hiLog.error({
tag: 'OrderService/Payment',
message: `Payment failed for order ${order.id}`,
error: error.stack,
paymentMethod: order.paymentMethod,
});
throw error;
}
}
1 回答868 阅读✓ 已解决
1 回答906 阅读
1 回答827 阅读
1 回答780 阅读
1 回答711 阅读
684 阅读
563 阅读
在
try-catch
代码块中捕获到异常时,正是记录错误日志的最佳时机。因为catch
块意味着代码执行过程中出现了非预期的情况,需要记录下来以便后续分析。以下是在try-catch
中使用 HiLog 记录错误日志的基本方法:记录详细的异常信息
如何在 HiLog 中记录这些详细的异常信息呢?我们可以利用
JavaScript
异常对象e
的属性,并结合 HiLog 的日志格式化功能:最佳实践错误日志记录
hilog.error()
记录 ERROR 级别日志,或hilog.warn()
记录 WARN 级别日志,根据错误严重程度选择合适级别。(e.name)
、错误消息(e.message)
、错误堆栈(e.stack)
。以上是我的回答,欢迎大家随时交流。