From a8730361b0da842351bb7586f858c85465f5f8c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduardo=20Bou=C3=A7as?= Date: Mon, 8 Aug 2022 14:23:04 +0100 Subject: [PATCH] feat: improve serialization of system log input (#4414) Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- packages/build/src/log/logger.js | 14 ++++++++++-- .../tests/unit/logger/snapshots/tests.js.md | 20 ++++++++++++++++++ .../tests/unit/logger/snapshots/tests.js.snap | Bin 0 -> 271 bytes packages/build/tests/unit/logger/tests.js | 15 +++++++++---- 4 files changed, 43 insertions(+), 6 deletions(-) create mode 100644 packages/build/tests/unit/logger/snapshots/tests.js.md create mode 100644 packages/build/tests/unit/logger/snapshots/tests.js.snap diff --git a/packages/build/src/log/logger.js b/packages/build/src/log/logger.js index 0e3756e45d..893c8bc99d 100644 --- a/packages/build/src/log/logger.js +++ b/packages/build/src/log/logger.js @@ -113,11 +113,21 @@ export const logWarningSubHeader = function (logs, string, opts) { const reduceLogLines = function (lines) { return lines .map((input) => { + if (input instanceof Error) { + return `${input.message} ${input.stack}` + } + if (typeof input === 'object') { - return JSON.stringify(input) + try { + return JSON.stringify(input) + } catch { + // Value could not be serialized to JSON, so we return the string + // representation. + return String(input) + } } - return input.toString() + return String(input) }) .join(' ') } diff --git a/packages/build/tests/unit/logger/snapshots/tests.js.md b/packages/build/tests/unit/logger/snapshots/tests.js.md new file mode 100644 index 0000000000..0fccaec4ff --- /dev/null +++ b/packages/build/tests/unit/logger/snapshots/tests.js.md @@ -0,0 +1,20 @@ +# Snapshot report for `packages/build/tests/unit/logger/tests.js` + +The actual snapshot is saved in `tests.js.snap`. + +Generated by [AVA](https://avajs.dev). + +## System logger writes to file descriptor + +> Snapshot 1 + + `Hello world {"object":true,"problem":false} Something went wrong Error: Something went wrong␊ + STACK TRACE␊ + ` + +## System logger does not write to file descriptor when `debug: true` + +> Snapshot 1 + + `Hello world {"object":true,"problem":false} Something went wrong Error: Something went wrong␊ + STACK TRACE` diff --git a/packages/build/tests/unit/logger/snapshots/tests.js.snap b/packages/build/tests/unit/logger/snapshots/tests.js.snap new file mode 100644 index 0000000000000000000000000000000000000000..a62a8308d42d938ba4b4f2447a5699d2f5e85662 GIT binary patch literal 271 zcmV+q0r37oRzV`=$)xZ?s<$LV+Mw(StISmJkg3LTsxn z*1N3rHLL%*8k1?Z4gF{sJ*GE^#yz`4B8I?12F@|(pIB&|sO)hXx57DL6DMUx9={>w z2DP@Xf`CrDr`)Xz5tiibZIo_i^A&8?v-x85TmJD{Zn*1qtWUxl0fZVI> { const { fd, cleanup, path } = await tmp.file() @@ -11,10 +12,13 @@ test('System logger writes to file descriptor', async (t) => { stdout: [], } const systemLog = getSystemLogger(mockProcess, false, fd) + const error = new Error('Something went wrong') - systemLog('Hello world', { object: true, problem: false }) + systemLog('Hello world', { object: true, problem: false }, error) - t.is(await fs.readFile(path, 'utf8'), 'Hello world {"object":true,"problem":false}\n') + const output = normalizeOutput(await fs.readFile(path, 'utf8')) + + t.snapshot(output) t.is(mockProcess.stdout.length, 0) await cleanup() @@ -26,11 +30,14 @@ test('System logger does not write to file descriptor when `debug: true`', async stdout: [], } const systemLog = getSystemLogger(mockProcess, true, fd) + const error = new Error('Something went wrong') + + systemLog('Hello world', { object: true, problem: false }, error) - systemLog('Hello world', { object: true, problem: false }) + const output = normalizeOutput(mockProcess.stdout[0]) t.is(mockProcess.stdout.length, 1) - t.is(mockProcess.stdout[0], 'Hello world {"object":true,"problem":false}') + t.snapshot(output) t.is(await fs.readFile(path, 'utf8'), '') await cleanup()