@@ -114,6 +114,29 @@ const formatUnknownError = (value: unknown): string => {
114114 }
115115} ;
116116
117+ /**
118+ * Format a structured log event for output to stderr.
119+ *
120+ * @param event - Log event to format
121+ */
122+ const formatLogEvent = ( event : LogEvent ) => {
123+ const level = event ?. level ?. toUpperCase ( ) || 'INFO' ;
124+ const eventLevel = `[${ level } ]` ;
125+ const message = event ?. msg || '' ;
126+
127+ const rest = event ?. args ?. map ( arg => {
128+ try {
129+ return typeof arg === 'string' ? arg : JSON . stringify ( arg ) ;
130+ } catch {
131+ return String ( arg ) ;
132+ }
133+ } ) . join ( ' ' ) || '' ;
134+
135+ const separator = rest ? '\t:' : '' ;
136+
137+ return `${ eventLevel } : ${ message } ${ separator } ${ rest } ` . trim ( ) ;
138+ } ;
139+
117140/**
118141 * Publish a structured log event to the diagnostics channel.
119142 *
@@ -207,7 +230,7 @@ const subscribeToChannel = (
207230 try {
208231 handler . call ( null , event ) ;
209232 } catch ( error ) {
210- log . debug ( ' Error invoking logging subscriber' , event , error ) ;
233+ process . stderr . write ( ` Error invoking logging subscriber: ${ formatUnknownError ( error ) } \n` ) ;
211234 }
212235 } ;
213236
@@ -227,28 +250,14 @@ const subscribeToChannel = (
227250 * @param [formatter] - Optional custom formatter for log events. Default prints: `[LEVEL] msg ...args`
228251 * @returns Unsubscribe function to remove the subscriber
229252 */
230- const registerStderrSubscriber = ( options : LoggingSession , formatter ?: ( e : LogEvent ) => string ) : Unsubscribe => {
231- const format = formatter || ( ( event : LogEvent ) => {
232- const eventLevel = `[${ event . level . toUpperCase ( ) } ]` ;
233- const message = event . msg || '' ;
234- const rest = event ?. args ?. map ( arg => {
235- try {
236- return typeof arg === 'string' ? arg : JSON . stringify ( arg ) ;
237- } catch {
238- return String ( arg ) ;
239- }
240- } ) . join ( ' ' ) || '' ;
241- const separator = rest ? '\t:' : '' ;
242-
243- return `${ eventLevel } : ${ message } ${ separator } ${ rest } ` . trim ( ) ;
244- } ) ;
245-
246- return subscribeToChannel ( ( event : LogEvent ) => {
247- if ( logSeverity ( event . level ) >= logSeverity ( options . level ) ) {
248- process . stderr . write ( `${ format ( event ) } \n` ) ;
249- }
250- } ) ;
251- } ;
253+ const registerStderrSubscriber = (
254+ options : LoggingSession ,
255+ formatter : ( e : LogEvent ) => string = formatLogEvent
256+ ) : Unsubscribe => subscribeToChannel ( ( event : LogEvent ) => {
257+ if ( logSeverity ( event . level ) >= logSeverity ( options . level ) ) {
258+ process . stderr . write ( `${ formatter ( event ) } \n` ) ;
259+ }
260+ } ) ;
252261
253262/**
254263 * Creates a logger initialization function and supports registering logging subscribers.
@@ -268,7 +277,7 @@ const createLogger = (options: LoggingSession = getLoggerOptions()): Unsubscribe
268277 try {
269278 unsubscribe ( ) ;
270279 } catch ( error ) {
271- log . debug ( ' Error unsubscribing from diagnostics channel' , error ) ;
280+ process . stderr . write ( ` Error unsubscribing from diagnostics channel: ${ formatUnknownError ( error ) } \n` ) ;
272281 }
273282 } ) ;
274283
@@ -279,6 +288,7 @@ const createLogger = (options: LoggingSession = getLoggerOptions()): Unsubscribe
279288export {
280289 LOG_LEVELS ,
281290 createLogger ,
291+ formatLogEvent ,
282292 formatUnknownError ,
283293 log ,
284294 logSeverity ,
0 commit comments