diff --git a/packages/api/package.json b/packages/api/package.json index 4d0effc58..60cf821ea 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -59,6 +59,7 @@ "express": "^4.17.1", "express-http-context2": "^1.0.0", "express-rate-limit": "^6.3.0", + "fast-safe-stringify": "^2.1.1", "firebase-admin": "^11.5.0", "googleapis": "^105.0.0", "graphql": "^15.3.0", diff --git a/packages/api/src/elastic/highlights.ts b/packages/api/src/elastic/highlights.ts index 0ecf95d2c..3d0808c04 100644 --- a/packages/api/src/elastic/highlights.ts +++ b/packages/api/src/elastic/highlights.ts @@ -223,7 +223,7 @@ export const searchHighlights = async ( ], } - logger.info('searching highlights in elastic', JSON.stringify(searchBody)) + logger.info('searching highlights in elastic', searchBody) const response = await client.search>({ index: INDEX_ALIAS, diff --git a/packages/api/src/elastic/pages.ts b/packages/api/src/elastic/pages.ts index cc8f4b947..70bfd4d9c 100644 --- a/packages/api/src/elastic/pages.ts +++ b/packages/api/src/elastic/pages.ts @@ -421,7 +421,7 @@ export const createPage = async ( return page.id } catch (e) { - logger.error('failed to create a page in elastic', JSON.stringify(e)) + logger.error('failed to create a page in elastic', e) return undefined } } @@ -665,7 +665,7 @@ export const searchPages = async ( }) .build() - logger.info('searching pages in elastic', JSON.stringify(body)) + logger.info('searching pages in elastic', body) const response = await client.search, BuiltQuery>({ index: INDEX_ALIAS, body, @@ -904,7 +904,7 @@ export const updatePages = async ( .rawOption('script', updatedScript) .build() - logger.info('updating pages in elastic', JSON.stringify(searchBody)) + logger.info('updating pages in elastic', searchBody) try { const { body } = await client.updateByQuery({ diff --git a/packages/api/src/utils/logger.ts b/packages/api/src/utils/logger.ts index cd2a1a99e..5cbc6e1cf 100644 --- a/packages/api/src/utils/logger.ts +++ b/packages/api/src/utils/logger.ts @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/restrict-template-expressions */ import { LoggingWinston } from '@google-cloud/logging-winston' +import jsonStringify from 'fast-safe-stringify' import { cloneDeep, isArray, isObject, isString, truncate } from 'lodash' import { DateTime } from 'luxon' import { @@ -83,7 +84,9 @@ function localConfig(id: string): ConsoleTransportOptions { const { timestamp, message, level, ...meta } = info return `[${id}@${info.timestamp}] ${info.message}${ - Object.keys(meta).length ? '\n' + JSON.stringify(meta, null, 4) : '' + Object.keys(meta).length + ? '\n' + jsonStringify(meta, undefined, 4) + : '' }` }) ), @@ -120,7 +123,7 @@ const truncateObjectDeep = (object: any, length: number): any => { class GcpLoggingTransport extends LoggingWinston { log(info: any, callback: (err: Error | null, apiResponse?: any) => void) { - const sizeInfo = JSON.stringify(info).length + const sizeInfo = jsonStringify(info).length if (sizeInfo > 250000) { info = truncateObjectDeep(info, 5000) as never // the max length for string values is 5000 } diff --git a/packages/api/src/utils/sendEmail.ts b/packages/api/src/utils/sendEmail.ts index b8cee8bea..49cbeec65 100644 --- a/packages/api/src/utils/sendEmail.ts +++ b/packages/api/src/utils/sendEmail.ts @@ -45,7 +45,7 @@ export const sendEmail = async (msg: MailDataRequired): Promise => { } catch (error) { const err = asSendGridError(error) if (err) { - logger.error('sendgrid error:', JSON.stringify(err.response?.body)) + logger.error('sendgrid error:', err.response?.body) } else { logger.error('error sending email', error) } diff --git a/packages/api/src/utils/sendNotification.ts b/packages/api/src/utils/sendNotification.ts index f81c3920d..6a1899144 100644 --- a/packages/api/src/utils/sendNotification.ts +++ b/packages/api/src/utils/sendNotification.ts @@ -59,9 +59,9 @@ export const sendMulticastPushNotifications = async ( }, }) - logger.info('sending multicast message: ', JSON.stringify(message)) + logger.info('sending multicast message: ', message) const res = await getMessaging().sendMulticast(message) - logger.info('send notification result: ', JSON.stringify(res.responses)) + logger.info('send notification result: ', res.responses) return res } catch (err) {