From 78147c867d22ade4721082e915b071a03a2c19bb Mon Sep 17 00:00:00 2001 From: Anmol1696 Date: Thu, 22 Jan 2026 17:02:03 +0400 Subject: [PATCH 1/3] update index and add LOG_FORMAT to have json format --- pgpm/logger/src/index.ts | 3 ++- pgpm/logger/src/logger.ts | 48 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/pgpm/logger/src/index.ts b/pgpm/logger/src/index.ts index 1e62119de..7819f8504 100644 --- a/pgpm/logger/src/index.ts +++ b/pgpm/logger/src/index.ts @@ -1 +1,2 @@ -export { Logger, createLogger } from './logger'; \ No newline at end of file +export { Logger, createLogger, setLogLevel, setShowTimestamp, setLogFormat, setLogScopes } from './logger'; +export type { LogLevel, LogFormat } from './logger'; \ No newline at end of file diff --git a/pgpm/logger/src/logger.ts b/pgpm/logger/src/logger.ts index 57a5ef243..650e4bd81 100644 --- a/pgpm/logger/src/logger.ts +++ b/pgpm/logger/src/logger.ts @@ -1,6 +1,7 @@ import yanse from 'yanse'; export type LogLevel = 'info' | 'warn' | 'error' | 'debug' | 'success'; +export type LogFormat = 'pretty' | 'json'; const levelPriority: Record = { debug: 0, @@ -61,6 +62,15 @@ export const setShowTimestamp = (show: boolean) => { showTimestamp = show; }; +// Parse LOG_FORMAT from environment (default: 'pretty') +let logFormat: LogFormat = + process.env.LOG_FORMAT?.toLowerCase() === 'json' ? 'json' : 'pretty'; + +// Update log format at runtime +export const setLogFormat = (format: LogFormat) => { + logFormat = format; +}; + // Scope filtering interface ScopeFilter { include: Set; @@ -116,6 +126,43 @@ export class Logger { return; } + const stream = level === 'error' ? process.stderr : process.stdout; + + if (logFormat === 'json') { + // JSON format: structured output for log aggregators + const entry: Record = { + timestamp: new Date().toISOString(), + level, + scope: this.scope + }; + + // Extract message and data from args + const strings: string[] = []; + for (const arg of args) { + if (typeof arg === 'string') { + strings.push(arg); + } else if (arg instanceof Error) { + entry.error = { + name: arg.name, + message: arg.message, + stack: arg.stack + }; + } else if (typeof arg === 'object' && arg !== null) { + Object.assign(entry, arg); + } else if (arg !== undefined && arg !== null) { + strings.push(String(arg)); + } + } + + if (strings.length > 0) { + entry.message = strings.join(' '); + } + + stream.write(JSON.stringify(entry) + '\n'); + return; + } + + // Pretty format: colored output for terminals const tag = yanse.bold(`[${this.scope}]`); const color = levelColors[level]; const prefix = color(`${level.toUpperCase()}:`); @@ -127,7 +174,6 @@ export class Logger { : normalized; }); - const stream = level === 'error' ? process.stderr : process.stdout; const outputParts = showTimestamp ? [yanse.dim(`[${new Date().toISOString()}]`), tag, prefix, ...formattedArgs] : [tag, prefix, ...formattedArgs]; From 6671cc6fad89c6e155f92a766825964e6f1b9daf Mon Sep 17 00:00:00 2001 From: Anmol Date: Thu, 22 Jan 2026 17:49:34 +0400 Subject: [PATCH 2/3] Update pgpm/logger/src/logger.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- pgpm/logger/src/logger.ts | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/pgpm/logger/src/logger.ts b/pgpm/logger/src/logger.ts index 650e4bd81..59e449451 100644 --- a/pgpm/logger/src/logger.ts +++ b/pgpm/logger/src/logger.ts @@ -142,11 +142,16 @@ export class Logger { if (typeof arg === 'string') { strings.push(arg); } else if (arg instanceof Error) { - entry.error = { - name: arg.name, - message: arg.message, - stack: arg.stack - }; + if (!entry.error) { + entry.error = { + name: arg.name, + message: arg.message, + stack: arg.stack + }; + } else { + // Preserve additional errors in the message string + strings.push(`Error[${arg.name}]: ${arg.message}`); + } } else if (typeof arg === 'object' && arg !== null) { Object.assign(entry, arg); } else if (arg !== undefined && arg !== null) { From 69f1efcc60c4a63858ff836b73d6c76e500c8239 Mon Sep 17 00:00:00 2001 From: Anmol1696 Date: Thu, 22 Jan 2026 17:50:09 +0400 Subject: [PATCH 3/3] set safestringify --- pgpm/logger/src/logger.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pgpm/logger/src/logger.ts b/pgpm/logger/src/logger.ts index 59e449451..c4486349d 100644 --- a/pgpm/logger/src/logger.ts +++ b/pgpm/logger/src/logger.ts @@ -163,7 +163,7 @@ export class Logger { entry.message = strings.join(' '); } - stream.write(JSON.stringify(entry) + '\n'); + stream.write(safeStringify(entry) + '\n'); return; }