Skip to content

Commit 24c69ac

Browse files
Normalizes Sentry messages to strings
Ensures that all messages sent to Sentry are strings. This prevents errors when logging non-string data.
1 parent c1467c8 commit 24c69ac

1 file changed

Lines changed: 22 additions & 2 deletions

File tree

src/loggers/winston-transport-sentry-node.js

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,26 @@ export class SentryTransport extends TransportStream {
8585

8686
const sentryLevel = this.levelsMap[winstonLevel]
8787

88+
// Normalize message to string
89+
let normalizedMessage = message
90+
if (!normalizedMessage || normalizedMessage === '') {
91+
// Try to get message from stack or error
92+
if (meta.stack) {
93+
normalizedMessage = (meta.stack.split('\n')[0] || '').trim()
94+
} else if (meta.error instanceof Error) {
95+
normalizedMessage = meta.error.message || meta.error.toString()
96+
} else {
97+
normalizedMessage = 'Empty log message'
98+
}
99+
} else if (typeof normalizedMessage !== 'string') {
100+
// Stringify non-string messages
101+
try {
102+
normalizedMessage = JSON.stringify(normalizedMessage)
103+
} catch {
104+
normalizedMessage = String(normalizedMessage)
105+
}
106+
}
107+
88108
return Sentry.withScope((scope) => {
89109
if (tags !== undefined && SentryTransport.isObject(tags)) {
90110
scope.setTags(tags)
@@ -100,11 +120,11 @@ export class SentryTransport extends TransportStream {
100120
if (SentryTransport.shouldLogException(sentryLevel)) {
101121
const error
102122
= Object.values(info).find((value) => value instanceof Error)
103-
?? new ExtendedError(info)
123+
?? new ExtendedError({ ...info, message: normalizedMessage })
104124
Sentry.captureException(error, { tags, level: sentryLevel })
105125
} else {
106126
// Capturing Messages
107-
Sentry.captureMessage(message, sentryLevel)
127+
Sentry.captureMessage(normalizedMessage, sentryLevel)
108128
}
109129
})
110130
}

0 commit comments

Comments
 (0)