今天在處理Sentry的相關功能時,發現一個問題
原本使用的Sentry方法captureException(),總是將錯誤繼承Error等級,這讓我有點困擾。
有些可能是小問題,不需要用到Error等級,於是做了點研究。就當作今天要發的文章囉。
Sentry的Lib有個capture()方法,他吃一個Event物件。
這個Event物件大概能夠擁有這麼多種資訊欄位可以填:
const Event({
this.loggerName,
this.serverName,
this.release,
this.environment,
this.message,
this.transaction,
this.exception,
this.stackTrace,
this.level,
this.culprit,
this.tags,
this.extra,
this.fingerprint,
this.userContext,
this.contexts,
this.breadcrumbs,
});
其中我們要看的是 this.level
this.level
是SeverityLevel型別。
他一共有5種狀態,如下:
class SeverityLevel {
static const fatal = SeverityLevel._('fatal');
static const error = SeverityLevel._('error');
static const warning = SeverityLevel._('warning');
static const info = SeverityLevel._('info');
static const debug = SeverityLevel._('debug');
}
同時他有個方法叫做capture,我們可以在這傳遞Event進去。
Future<SentryResponse> capture({
@required Event event,
StackFrameFilter stackFrameFilter,
})
因此我們要做的事就很簡單了,在原本使用captureException()的類別底下建立一個方法,他吃幾種參數,
static func({String message, dynamic error, StackTrace stackTrace, SeverityLevel level})
{}
原本慣用的Logger實作類在乎叫這方法時,多傳遞一個level參數進去,如此一來就可在logger.info()
,logger.warning()
,logger.error()
,logger.fatal()
這些情境下將不同程度的log訊息記成不同等級的Sentry Issue Level了。
額外附上一些資訊。
Other Notifications | Sentry Documentation
Helper class to send event to sentry · GitHub