@@ -170,7 +170,7 @@ type ClientLogPathOptions = {
170
170
} ;
171
171
172
172
/** @internal */
173
- export function createStdLogger ( stream : {
173
+ export function createStdioLogger ( stream : {
174
174
write : NodeJS . WriteStream [ 'write' ] ;
175
175
} ) : MongoDBLogWritable {
176
176
return {
@@ -191,23 +191,25 @@ function resolveLogPath(
191
191
{ MONGODB_LOG_PATH } : MongoLoggerEnvOptions ,
192
192
{ mongodbLogPath } : ClientLogPathOptions
193
193
) : MongoDBLogWritable {
194
- if ( typeof mongodbLogPath === 'string' && / ^ s t d e r r $ / i. test ( mongodbLogPath ) )
195
- return createStdLogger ( process . stderr ) ;
196
- if ( typeof mongodbLogPath === 'string' && / ^ s t d o u t $ / i. test ( mongodbLogPath ) )
197
- return createStdLogger ( process . stdout ) ;
194
+ if ( typeof mongodbLogPath === 'string' && / ^ s t d e r r $ / i. test ( mongodbLogPath ) ) {
195
+ return createStdioLogger ( process . stderr ) ;
196
+ }
197
+ if ( typeof mongodbLogPath === 'string' && / ^ s t d o u t $ / i. test ( mongodbLogPath ) ) {
198
+ return createStdioLogger ( process . stdout ) ;
199
+ }
198
200
199
201
if ( typeof mongodbLogPath === 'object' && typeof mongodbLogPath ?. write === 'function' ) {
200
202
return mongodbLogPath ;
201
203
}
202
204
203
205
if ( MONGODB_LOG_PATH && / ^ s t d e r r $ / i. test ( MONGODB_LOG_PATH ) ) {
204
- return createStdLogger ( process . stderr ) ;
206
+ return createStdioLogger ( process . stderr ) ;
205
207
}
206
208
if ( MONGODB_LOG_PATH && / ^ s t d o u t $ / i. test ( MONGODB_LOG_PATH ) ) {
207
- return createStdLogger ( process . stdout ) ;
209
+ return createStdioLogger ( process . stdout ) ;
208
210
}
209
211
210
- return createStdLogger ( process . stderr ) ;
212
+ return createStdioLogger ( process . stderr ) ;
211
213
}
212
214
213
215
/** @internal */
@@ -220,7 +222,7 @@ export interface Log extends Record<string, any> {
220
222
221
223
/** @internal */
222
224
export interface MongoDBLogWritable {
223
- write ( log : Log ) : unknown ;
225
+ write ( log : Log ) : void ;
224
226
}
225
227
226
228
function compareSeverity ( s0 : SeverityLevel , s1 : SeverityLevel ) : 1 | 0 | - 1 {
@@ -232,7 +234,6 @@ function compareSeverity(s0: SeverityLevel, s1: SeverityLevel): 1 | 0 | -1 {
232
234
233
235
/** @internal */
234
236
export type LoggableEvent =
235
- //| ConnectionPoolMonitoringEvent
236
237
| CommandStartedEvent
237
238
| CommandSucceededEvent
238
239
| CommandFailedEvent
@@ -262,45 +263,35 @@ function isLogConvertible(obj: Loggable): obj is LogConvertible {
262
263
return objAsLogConvertible . toLog !== undefined && typeof objAsLogConvertible . toLog === 'function' ;
263
264
}
264
265
265
- function getHostPort ( address : string ) : { host : string ; port : number } {
266
- const hostAddress = new HostAddress ( address ) ;
267
-
268
- // NOTE: Should only default when the address is a socket address
269
- if ( hostAddress . socketPath ) {
270
- return { host : hostAddress . socketPath , port : 0 } ;
271
- }
272
-
273
- const host = hostAddress . host ?? '' ;
274
- const port = hostAddress . port ?? 0 ;
275
- return { host, port } ;
276
- }
277
-
278
266
function attachCommandFields (
279
- l : any ,
280
- ev : CommandStartedEvent | CommandSucceededEvent | CommandFailedEvent
267
+ log : Record < string , any > ,
268
+ commandEvent : CommandStartedEvent | CommandSucceededEvent | CommandFailedEvent
281
269
) {
282
- l . commandName = ev . commandName ;
283
- l . requestId = ev . requestId ;
284
- l . driverConnectionId = ev ?. connectionId ;
285
- const { host, port } = getHostPort ( ev . address ) ;
286
- l . serverHost = host ;
287
- l . serverPort = port ;
288
- if ( ev ?. serviceId ) {
289
- l . serviceId = ev . serviceId . toHexString ( ) ;
270
+ log . commandName = commandEvent . commandName ;
271
+ log . requestId = commandEvent . requestId ;
272
+ log . driverConnectionId = commandEvent ?. connectionId ;
273
+ const { host, port } = HostAddress . fromString ( commandEvent . address ) . toHostPort ( ) ;
274
+ log . serverHost = host ;
275
+ log . serverPort = port ;
276
+ if ( commandEvent ?. serviceId ) {
277
+ log . serviceId = commandEvent . serviceId . toHexString ( ) ;
290
278
}
291
279
292
- return l ;
280
+ return log ;
293
281
}
294
282
295
- function attachConnectionFields ( l : any , ev : ConnectionPoolMonitoringEvent ) {
296
- const { host, port } = getHostPort ( ev . address ) ;
297
- l . serverHost = host ;
298
- l . serverPort = port ;
283
+ function attachConnectionFields (
284
+ log : Record < string , any > ,
285
+ connectionPoolEvent : ConnectionPoolMonitoringEvent
286
+ ) {
287
+ const { host, port } = HostAddress . fromString ( connectionPoolEvent . address ) . toHostPort ( ) ;
288
+ log . serverHost = host ;
289
+ log . serverPort = port ;
299
290
300
- return l ;
291
+ return log ;
301
292
}
302
293
303
- function DEFAULT_LOG_TRANSFORM ( logObject : LoggableEvent ) : Omit < Log , 's' | 't' | 'c' > {
294
+ function defaultLogTransform ( logObject : LoggableEvent ) : Omit < Log , 's' | 't' | 'c' > {
304
295
let log : Omit < Log , 's' | 't' | 'c' > = Object . create ( null ) ;
305
296
306
297
switch ( logObject . name ) {
@@ -309,19 +300,19 @@ function DEFAULT_LOG_TRANSFORM(logObject: LoggableEvent): Omit<Log, 's' | 't' |
309
300
log . message = 'Command started' ;
310
301
log . command = EJSON . stringify ( logObject . command ) ;
311
302
log . databaseName = logObject . databaseName ;
312
- break ;
303
+ return log ;
313
304
case COMMAND_SUCCEEDED :
314
305
log = attachCommandFields ( log , logObject ) ;
315
306
log . message = 'Command succeeded' ;
316
307
log . durationMS = logObject . duration ;
317
308
log . reply = EJSON . stringify ( logObject . reply ) ;
318
- break ;
309
+ return log ;
319
310
case COMMAND_FAILED :
320
311
log = attachCommandFields ( log , logObject ) ;
321
312
log . message = 'Command failed' ;
322
313
log . durationMS = logObject . duration ;
323
314
log . failure = logObject . failure ;
324
- break ;
315
+ return log ;
325
316
case CONNECTION_POOL_CREATED :
326
317
log = attachConnectionFields ( log , logObject ) ;
327
318
log . message = 'Connection pool created' ;
@@ -336,44 +327,37 @@ function DEFAULT_LOG_TRANSFORM(logObject: LoggableEvent): Omit<Log, 's' | 't' |
336
327
maxConnecting,
337
328
waitQueueTimeoutMS
338
329
} ;
339
- log . waitQueueSize = logObject . waitQueueSize ;
340
330
}
341
- break ;
331
+ return log ;
342
332
case CONNECTION_POOL_READY :
343
333
log = attachConnectionFields ( log , logObject ) ;
344
334
log . message = 'Connection pool ready' ;
345
- break ;
335
+ return log ;
346
336
case CONNECTION_POOL_CLEARED :
347
337
log = attachConnectionFields ( log , logObject ) ;
348
338
log . message = 'Connection pool cleared' ;
349
339
if ( logObject . serviceId ?. _bsontype === 'ObjectId' ) {
350
340
log . serviceId = logObject . serviceId . toHexString ( ) ;
351
341
}
352
- break ;
342
+ return log ;
353
343
case CONNECTION_POOL_CLOSED :
354
344
log = attachConnectionFields ( log , logObject ) ;
355
345
log . message = 'Connection pool closed' ;
356
- break ;
346
+ return log ;
357
347
case CONNECTION_CREATED :
358
348
log = attachConnectionFields ( log , logObject ) ;
359
349
log . message = 'Connection created' ;
360
- if ( 'connectionId' in logObject ) {
361
- log . driverConnectionId = logObject . connectionId ;
362
- }
363
- break ;
350
+ log . driverConnectionId = logObject . connectionId ;
351
+ return log ;
364
352
case CONNECTION_READY :
365
353
log = attachConnectionFields ( log , logObject ) ;
366
354
log . message = 'Connection ready' ;
367
- if ( 'connectionId' in logObject ) {
368
- log . driverConnectionId = logObject . connectionId ;
369
- }
370
- break ;
355
+ log . driverConnectionId = logObject . connectionId ;
356
+ return log ;
371
357
case CONNECTION_CLOSED :
372
358
log = attachConnectionFields ( log , logObject ) ;
373
359
log . message = 'Connection closed' ;
374
- if ( 'connectionId' in logObject ) {
375
- log . driverConnectionId = logObject . connectionId ;
376
- }
360
+ log . driverConnectionId = logObject . connectionId ;
377
361
switch ( logObject . reason ) {
378
362
case 'stale' :
379
363
log . reason = 'Connection became stale because the pool was cleared' ;
@@ -392,28 +376,28 @@ function DEFAULT_LOG_TRANSFORM(logObject: LoggableEvent): Omit<Log, 's' | 't' |
392
376
log . reason = 'Connection pool was closed' ;
393
377
break ;
394
378
default :
395
- // Omit if we have some other reason as it would be invalid
379
+ log . reason = `Unknown close reason: ${ logObject . reason } ` ;
396
380
}
397
- break ;
381
+ return log ;
398
382
case CONNECTION_CHECK_OUT_STARTED :
399
383
log = attachConnectionFields ( log , logObject ) ;
400
384
log . message = 'Connection checkout started' ;
401
- break ;
385
+ return log ;
402
386
case CONNECTION_CHECK_OUT_FAILED :
403
387
log = attachConnectionFields ( log , logObject ) ;
404
388
log . message = 'Connection checkout failed' ;
405
389
log . reason = logObject . reason ;
406
- break ;
390
+ return log ;
407
391
case CONNECTION_CHECKED_OUT :
408
392
log = attachConnectionFields ( log , logObject ) ;
409
393
log . message = 'Connection checked out' ;
410
394
log . driverConnectionId = logObject . connectionId ;
411
- break ;
395
+ return log ;
412
396
case CONNECTION_CHECKED_IN :
413
397
log = attachConnectionFields ( log , logObject ) ;
414
398
log . message = 'Connection checked in' ;
415
399
log . driverConnectionId = logObject . connectionId ;
416
- break ;
400
+ return log ;
417
401
default :
418
402
for ( const [ key , value ] of Object . entries ( logObject ) ) {
419
403
if ( value != null ) log [ key ] = value ;
@@ -453,7 +437,6 @@ export class MongoLogger {
453
437
this . logDestination = options . logDestination ;
454
438
}
455
439
456
-
457
440
private log (
458
441
severity : SeverityLevel ,
459
442
component : MongoLoggableComponent ,
@@ -468,7 +451,7 @@ export class MongoLogger {
468
451
if ( isLogConvertible ( message ) ) {
469
452
logMessage = { ...logMessage , ...message . toLog ( ) } ;
470
453
} else {
471
- logMessage = { ...logMessage , ...DEFAULT_LOG_TRANSFORM ( message ) } ;
454
+ logMessage = { ...logMessage , ...defaultLogTransform ( message ) } ;
472
455
}
473
456
}
474
457
this . logDestination . write ( logMessage ) ;
0 commit comments