Reduce Sentry noise from logger transport and expected-failure call sites (#10893)
This commit is contained in:
@@ -182,11 +182,7 @@ describe('general functionality', () => {
|
||||
timestamp: sentryTimestamp,
|
||||
})
|
||||
jest.runAllTimers()
|
||||
expect(Sentry.captureMessage).toHaveBeenCalledWith(message, {
|
||||
level: 'log',
|
||||
tags: {category: 'logger'},
|
||||
extra: {__context__: 'logger'},
|
||||
})
|
||||
expect(Sentry.captureMessage).not.toHaveBeenCalled()
|
||||
|
||||
sentryTransport(
|
||||
LogLevel.Warn,
|
||||
@@ -204,8 +200,18 @@ describe('general functionality', () => {
|
||||
timestamp: sentryTimestamp,
|
||||
})
|
||||
jest.runAllTimers()
|
||||
expect(Sentry.captureMessage).not.toHaveBeenCalled()
|
||||
|
||||
sentryTransport(
|
||||
LogLevel.Error,
|
||||
Logger.Context.Default,
|
||||
message,
|
||||
{},
|
||||
timestamp,
|
||||
)
|
||||
jest.runAllTimers()
|
||||
expect(Sentry.captureMessage).toHaveBeenCalledWith(message, {
|
||||
level: 'warning',
|
||||
level: 'error',
|
||||
tags: {category: 'logger'},
|
||||
extra: {__context__: 'logger'},
|
||||
})
|
||||
@@ -259,6 +265,42 @@ describe('general functionality', () => {
|
||||
})
|
||||
})
|
||||
|
||||
test('sentryTransport filters network errors', () => {
|
||||
jest.clearAllMocks()
|
||||
const timestamp = Date.now()
|
||||
|
||||
// network error in the message itself
|
||||
sentryTransport(
|
||||
LogLevel.Error,
|
||||
Logger.Context.Default,
|
||||
'Network request failed',
|
||||
{},
|
||||
timestamp,
|
||||
)
|
||||
|
||||
// network error in metadata, message is something else
|
||||
sentryTransport(
|
||||
LogLevel.Error,
|
||||
Logger.Context.Default,
|
||||
'poll failed',
|
||||
{safeMessage: new Error('Network request failed')},
|
||||
timestamp,
|
||||
)
|
||||
|
||||
jest.runAllTimers()
|
||||
expect(Sentry.captureMessage).not.toHaveBeenCalled()
|
||||
|
||||
// network Error object
|
||||
sentryTransport(
|
||||
LogLevel.Error,
|
||||
Logger.Context.Default,
|
||||
new Error('Network request failed'),
|
||||
{},
|
||||
timestamp,
|
||||
)
|
||||
expect(Sentry.captureException).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
test('add/remove transport', () => {
|
||||
const timestamp = Date.now()
|
||||
const logger = new Logger({})
|
||||
|
||||
@@ -47,16 +47,24 @@ export const sentryTransport: Transport = (
|
||||
timestamp: timestamp / 1000, // Sentry expects seconds
|
||||
})
|
||||
|
||||
// We don't want to send any network errors to sentry
|
||||
if (isNetworkError(message)) {
|
||||
// We don't want to send any network errors to sentry. The underlying
|
||||
// cause is often passed via metadata rather than the message itself, so
|
||||
// check the common metadata keys too.
|
||||
if (
|
||||
isNetworkError(message) ||
|
||||
isNetworkError(metadata.safeMessage) ||
|
||||
isNetworkError(metadata.message) ||
|
||||
isNetworkError(metadata.error)
|
||||
) {
|
||||
return
|
||||
}
|
||||
|
||||
/**
|
||||
* Send all higher levels with `captureMessage`, with appropriate severity
|
||||
* level
|
||||
* Only error-level strings are reported to Sentry as events. Lower levels
|
||||
* are captured as breadcrumbs above and attached to the next event, if
|
||||
* any.
|
||||
*/
|
||||
if (level === 'error' || level === 'warn' || level === 'log') {
|
||||
if (level === LogLevel.Error) {
|
||||
// Defer non-critical messages so they're sent in a batch
|
||||
queueMessageForSentry(message, {
|
||||
level: severity,
|
||||
@@ -65,6 +73,11 @@ export const sentryTransport: Transport = (
|
||||
})
|
||||
}
|
||||
} else {
|
||||
// We don't want to send any network errors to sentry
|
||||
if (isNetworkError(message)) {
|
||||
return
|
||||
}
|
||||
|
||||
/**
|
||||
* It's otherwise an Error and should be reported with captureException
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user