From b0b839accc88d8b3326733a94f76cb7c527fdb06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=B1=84=EC=A4=80=20-=20CJ=20Lee?= Date: Wed, 8 May 2024 03:51:16 -0700 Subject: [PATCH] fix(logger): truncate log over 5000 characters long (#16581) --- packages/vite/src/node/logger.ts | 20 +++++++++++++++++++- packages/vite/src/node/utils.ts | 2 +- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/packages/vite/src/node/logger.ts b/packages/vite/src/node/logger.ts index 8600228e305de1..ddeda0755712f1 100644 --- a/packages/vite/src/node/logger.ts +++ b/packages/vite/src/node/logger.ts @@ -4,6 +4,7 @@ import readline from 'node:readline' import colors from 'picocolors' import type { RollupError } from 'rollup' import type { ResolvedServerUrls } from './server' +import { splitRE } from './utils' export type LogType = 'error' | 'warn' | 'info' export type LogLevel = LogType | 'silent' @@ -63,6 +64,8 @@ function getTimeFormatter() { return timeFormatter } +const MAX_LOG_CHAR = 5000 + export function createLogger( level: LogLevel = 'info', options: LoggerOptions = {}, @@ -78,7 +81,22 @@ export function createLogger( allowClearScreen && process.stdout.isTTY && !process.env.CI const clear = canClearScreen ? clearScreen : () => {} - function format(type: LogType, msg: string, options: LogErrorOptions = {}) { + function preventOverflow(msg: string) { + if (msg.length > MAX_LOG_CHAR) { + const shorten = msg.slice(0, MAX_LOG_CHAR) + const lines = msg.slice(MAX_LOG_CHAR).match(splitRE)?.length || 0 + + return `${shorten}\n... and ${lines} lines more` + } + return msg + } + + function format( + type: LogType, + rawMsg: string, + options: LogErrorOptions = {}, + ) { + const msg = preventOverflow(rawMsg) if (options.timestamp) { const tag = type === 'info' diff --git a/packages/vite/src/node/utils.ts b/packages/vite/src/node/utils.ts index b9ceece25f40f2..218cb33b81aafa 100644 --- a/packages/vite/src/node/utils.ts +++ b/packages/vite/src/node/utils.ts @@ -434,7 +434,7 @@ export function isFilePathESM( } } -const splitRE = /\r?\n/ +export const splitRE = /\r?\n/g const range: number = 2