Node.js中使用Sentry的captureMessage如何修改事件标题?
解决方案:Sentry事件标题自定义与级别显示问题
一、修改事件标题(替换默认的"Error")
你遇到的标题显示为"Error"的问题,是因为直接用captureMessage时,Sentry可能会根据上下文默认生成标题,或是fastify-sentry的封装逻辑导致的。可以通过手动构建事件对象来完全自定义标题,具体做法是改用captureEvent替代captureMessage,直接指定事件的message字段(这就是Sentry列表中显示的标题):
fastify.sentry.withScope(function(scope) { scope.setTransactionName('Create Transaction') // 保留原有的额外信息设置 scope.setExtra('Transaction UUID', uuid) scope.setExtra('Merchant ID', merchantId) scope.setExtra('Body', body) scope.setExtra('Transaction ID', transactionId) // 用captureEvent自定义事件标题与类型 fastify.sentry.captureEvent({ message: 'Transaction Log', // 这里设置你想要的标题,比如"Message"或"Log" level: 'log' }) })
如果坚持使用captureMessage,也可以尝试传入第二个参数指定事件类型,强制标记为消息类事件:
// 第二个参数设为"log",明确事件类型 fastify.sentry.captureMessage(uuid, 'log')
二、修复级别显示为"info"的问题
Sentry Node.js SDK对日志级别的识别有严格的枚举规范,直接传字符串'log'可能不被正确解析,会自动降级为info。你可以使用SDK提供的Level枚举来指定级别,确保对应关系准确:
- 先导入Level枚举:
const { Level } = require('@sentry/node');
- 在代码中替换为枚举值:
fastify.sentry.withScope(function(scope) { scope.setLevel(Level.Log) // 使用枚举值替代字符串 scope.setTransactionName('Create Transaction') // 其他额外信息设置... fastify.sentry.captureMessage(uuid, Level.Log) })
如果不想导入枚举,也可以直接使用SDK认可的级别字符串:'fatal', 'error', 'warning', 'info', 'debug'。若业务场景需要"log"级别,也可以直接在captureEvent中指定level: 'log',部分版本的SDK兼容该值。
内容的提问来源于stack exchange,提问作者Dally
相关产品推荐
相关产品推荐

