@@ -31,6 +31,7 @@ import {
31
31
MongoTopologyClosedError
32
32
} from '../error' ;
33
33
import type { MongoClient , ServerApi } from '../mongo_client' ;
34
+ import { ServerSelectionLogType , type ServerSelectionLogInputs , MongoLoggableComponent } from '../mongo_logger' ;
34
35
import { TypedEventEmitter } from '../mongo_types' ;
35
36
import { ReadPreference , type ReadPreferenceLike } from '../read_preference' ;
36
37
import type { ClientSession } from '../sessions' ;
@@ -70,8 +71,6 @@ import { compareTopologyVersion, ServerDescription } from './server_description'
70
71
import { readPreferenceServerSelector , type ServerSelector } from './server_selection' ;
71
72
import { SrvPoller , type SrvPollingEvent } from './srv_polling' ;
72
73
import { TopologyDescription } from './topology_description' ;
73
- import { LogConvertible } from '../mongo_logger' ;
74
-
75
74
76
75
// Global state
77
76
let globalTopologyCounter = 0 ;
@@ -508,6 +507,22 @@ export class Topology extends TypedEventEmitter<TopologyEvents> {
508
507
. finally ( ( ) => callback ?.( ) ) ;
509
508
}
510
509
510
+ /** @internal */
511
+ logServerSelection ( logType : ServerSelectionLogType , inputs : ServerSelectionLogInputs ) : void {
512
+ if ( logType === ServerSelectionLogType . START ) {
513
+ const msg = `Server selection started for operation ${ inputs . operation } } with ID ${ inputs . operationId } . Selector: ${ inputs . selector } }, topology description: ${ inputs . topologyDescription } ` ;
514
+ this . client . mongoLogger . debug ( MongoLoggableComponent . TOPOLOGY , msg ) ;
515
+ } else if ( logType === ServerSelectionLogType . SUCCESS ) {
516
+ const msg = `Server selection succeeded for operation ${ inputs . operation } } with ID ${ inputs . operationId } . Selected server: ${ inputs . serverHost } :${ inputs . serverPort } . Selector: ${ inputs . selector } }, topology description: ${ inputs . topologyDescription } ` ;
517
+ this . client . mongoLogger . debug ( MongoLoggableComponent . TOPOLOGY , msg ) ;
518
+ } else if ( logType === ServerSelectionLogType . FAILURE ) {
519
+ const msg = `Server selection failed for operation ${ inputs . operation } } with ID ${ inputs . operationId } . Failure: ${ inputs . failure } Selector: ${ inputs . selector } }, topology description: ${ inputs . topologyDescription } ` ;
520
+ this . client . mongoLogger . debug ( MongoLoggableComponent . TOPOLOGY , msg ) ;
521
+ } else if ( logType === ServerSelectionLogType . WAITING ) {
522
+ const msg = `Waiting for server to become available for operation ${ inputs . operation } } with ID ${ inputs . operationId } . Remaining time: ${ inputs . remainingTimeMS } } ms. Selector: ${ inputs . selector } }, topology description: ${ inputs . topologyDescription } ` ;
523
+ this . client . mongoLogger . info ( MongoLoggableComponent . TOPOLOGY , msg ) ;
524
+ }
525
+ }
511
526
/**
512
527
* Selects a server according to the selection predicate provided
513
528
*
@@ -522,7 +537,7 @@ export class Topology extends TypedEventEmitter<TopologyEvents> {
522
537
callback : Callback < Server >
523
538
) : void {
524
539
let serverSelector ;
525
- this . client . mongoLogger . debug ( 'topology' , {
540
+ this . logServerSelection ( ServerSelectionLogType . START , {
526
541
selector : 'selector' ,
527
542
operationId : 100 ,
528
543
operation : 'op' ,
@@ -575,7 +590,13 @@ export class Topology extends TypedEventEmitter<TopologyEvents> {
575
590
`Server selection timed out after ${ options . serverSelectionTimeoutMS } ms` ,
576
591
this . description
577
592
) ;
578
-
593
+ this . logServerSelection ( ServerSelectionLogType . FAILURE , {
594
+ selector : 'selector' ,
595
+ operationId : 100 ,
596
+ operation : 'op' ,
597
+ topologyDescription : 'topDesc' ,
598
+ failure : timeoutError
599
+ } ) ;
579
600
waitQueueMember . callback ( timeoutError ) ;
580
601
} ) ;
581
602
0 commit comments