Skip to content

Commit 3937c2e

Browse files
conditional logger instantiation
1 parent 4292640 commit 3937c2e

File tree

6 files changed

+38
-44
lines changed

6 files changed

+38
-44
lines changed

src/cmap/connection_pool.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ export class ConnectionPool extends TypedEventEmitter<ConnectionPoolEvents> {
251251
this[kMetrics] = new ConnectionPoolMetrics();
252252
this[kProcessingWaitQueue] = false;
253253

254-
this.mongoLogger = this[kServer].topology.client.mongoLogger;
254+
this.mongoLogger = this[kServer].topology.client?.mongoLogger;
255255
this.component = 'connection';
256256

257257
process.nextTick(() => {

src/mongo_client.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ import {
2525
type LogComponentSeveritiesClientOptions,
2626
type MongoDBLogWritable,
2727
MongoLogger,
28-
type MongoLoggerOptions
28+
type MongoLoggerOptions,
29+
SeverityLevel
2930
} from './mongo_logger';
3031
import { TypedEventEmitter } from './mongo_types';
3132
import { executeOperation } from './operations/execute_operation';
@@ -345,7 +346,7 @@ export class MongoClient extends TypedEventEmitter<MongoClientEvents> {
345346
/** @internal */
346347
topology?: Topology;
347348
/** @internal */
348-
override readonly mongoLogger: MongoLogger;
349+
override readonly mongoLogger: MongoLogger | undefined;
349350
/** @internal */
350351
private connectionLock?: Promise<this>;
351352

@@ -359,7 +360,14 @@ export class MongoClient extends TypedEventEmitter<MongoClientEvents> {
359360
super();
360361

361362
this[kOptions] = parseOptions(url, this, options);
362-
this.mongoLogger = new MongoLogger(this[kOptions].mongoLoggerOptions);
363+
364+
const shouldSetLogger =
365+
Object.values(this[kOptions].mongoLoggerOptions.componentSeverities).filter(
366+
value => value !== SeverityLevel.OFF
367+
).length !== 0;
368+
this.mongoLogger = shouldSetLogger
369+
? new MongoLogger(this[kOptions].mongoLoggerOptions)
370+
: undefined;
363371

364372
// eslint-disable-next-line @typescript-eslint/no-this-alias
365373
const client = this;
@@ -405,9 +413,9 @@ export class MongoClient extends TypedEventEmitter<MongoClientEvents> {
405413
const srvHostIsCosmosDB = isHostMatch(COSMOS_DB_CHECK, this[kOptions].srvHost);
406414

407415
if (documentDBHostnames.length !== 0 || srvHostIsDocumentDB) {
408-
this.mongoLogger.info('client', DOCUMENT_DB_MSG);
416+
this.mongoLogger?.info('client', DOCUMENT_DB_MSG);
409417
} else if (cosmosDBHostnames.length !== 0 || srvHostIsCosmosDB) {
410-
this.mongoLogger.info('client', COSMOS_DB_MSG);
418+
this.mongoLogger?.info('client', COSMOS_DB_MSG);
411419
}
412420
}
413421

src/sdam/monitor.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ export class Monitor extends TypedEventEmitter<MonitorEvents> {
120120
serverMonitoringMode: options.serverMonitoringMode
121121
});
122122
this.isRunningInFaasEnv = getFAASEnv() != null;
123-
this.mongoLogger = this[kServer].topology.client.mongoLogger;
123+
this.mongoLogger = this[kServer].topology.client?.mongoLogger;
124124

125125
const cancellationToken = this[kCancellationToken];
126126
// TODO: refactor this to pull it directly from the pool, requires new ConnectionPool integration

src/sdam/topology.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ export type ServerSelectionCallback = Callback<Server>;
102102
export interface ServerSelectionRequest {
103103
serverSelector: ServerSelector;
104104
topologyDescription: TopologyDescription;
105-
mongoLogger: MongoLogger;
105+
mongoLogger: MongoLogger | undefined;
106106
transaction?: Transaction;
107107
startTime: number;
108108
callback: ServerSelectionCallback;
@@ -568,7 +568,7 @@ export class Topology extends TypedEventEmitter<TopologyEvents> {
568568
}
569569

570570
options = { serverSelectionTimeoutMS: this.s.serverSelectionTimeoutMS, ...options };
571-
this.client.mongoLogger.debug(
571+
this.client.mongoLogger?.debug(
572572
MongoLoggableComponent.SERVER_SELECTION,
573573
new ServerSelectionStartedEvent(selector, this.description, options.operationName)
574574
);
@@ -578,7 +578,7 @@ export class Topology extends TypedEventEmitter<TopologyEvents> {
578578
const transaction = session && session.transaction;
579579

580580
if (isSharded && transaction && transaction.server) {
581-
this.client.mongoLogger.debug(
581+
this.client.mongoLogger?.debug(
582582
MongoLoggableComponent.SERVER_SELECTION,
583583
new ServerSelectionSucceededEvent(
584584
selector,
@@ -611,7 +611,7 @@ export class Topology extends TypedEventEmitter<TopologyEvents> {
611611
`Server selection timed out after ${options.serverSelectionTimeoutMS} ms`,
612612
this.description
613613
);
614-
this.client.mongoLogger.debug(
614+
this.client.mongoLogger?.debug(
615615
MongoLoggableComponent.SERVER_SELECTION,
616616
new ServerSelectionFailedEvent(
617617
selector,
@@ -896,7 +896,7 @@ function drainWaitQueue(queue: List<ServerSelectionRequest>, err?: MongoDriverEr
896896

897897
if (!waitQueueMember[kCancelled]) {
898898
if (err) {
899-
waitQueueMember.mongoLogger.debug(
899+
waitQueueMember.mongoLogger?.debug(
900900
MongoLoggableComponent.SERVER_SELECTION,
901901
new ServerSelectionFailedEvent(
902902
waitQueueMember.serverSelector,
@@ -943,7 +943,7 @@ function processWaitQueue(topology: Topology) {
943943
: serverDescriptions;
944944
} catch (e) {
945945
waitQueueMember.timeoutController.clear();
946-
topology.client.mongoLogger.debug(
946+
topology.client.mongoLogger?.debug(
947947
MongoLoggableComponent.SERVER_SELECTION,
948948
new ServerSelectionFailedEvent(
949949
waitQueueMember.serverSelector,
@@ -959,7 +959,7 @@ function processWaitQueue(topology: Topology) {
959959
let selectedServer: Server | undefined;
960960
if (selectedDescriptions.length === 0) {
961961
if (!waitQueueMember.waitingLogged) {
962-
topology.client.mongoLogger.info(
962+
topology.client.mongoLogger?.info(
963963
MongoLoggableComponent.SERVER_SELECTION,
964964
new WaitingForSuitableServerEvent(
965965
waitQueueMember.serverSelector,
@@ -992,7 +992,7 @@ function processWaitQueue(topology: Topology) {
992992
'server selection returned a server description but the server was not found in the topology',
993993
topology.description
994994
);
995-
topology.client.mongoLogger.debug(
995+
topology.client.mongoLogger?.debug(
996996
MongoLoggableComponent.SERVER_SELECTION,
997997
new ServerSelectionFailedEvent(
998998
waitQueueMember.serverSelector,
@@ -1011,7 +1011,7 @@ function processWaitQueue(topology: Topology) {
10111011

10121012
waitQueueMember.timeoutController.clear();
10131013

1014-
topology.client.mongoLogger.debug(
1014+
topology.client.mongoLogger?.debug(
10151015
MongoLoggableComponent.SERVER_SELECTION,
10161016
new ServerSelectionSucceededEvent(
10171017
waitQueueMember.serverSelector,

test/integration/node-specific/feature_flags.test.ts

Lines changed: 10 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ describe('Feature Flags', () => {
4545
}
4646
});
4747

48+
// TODO(NODE-5672): Release Standardized Logger
4849
describe('@@mdb.enableMongoLogger', () => {
4950
let cachedEnv;
5051
const loggerFeatureFlag = Symbol.for('@@mdb.enableMongoLogger');
@@ -74,7 +75,7 @@ describe('Feature Flags', () => {
7475
const client = new MongoClient('mongodb://localhost:27017', {
7576
[loggerFeatureFlag]: true
7677
});
77-
expect(client.mongoLogger.componentSeverities).to.have.property(
78+
expect(client.mongoLogger?.componentSeverities).to.have.property(
7879
'command',
7980
SeverityLevel.EMERGENCY
8081
);
@@ -86,16 +87,11 @@ describe('Feature Flags', () => {
8687
process.env = {};
8788
});
8889

89-
it('does not enable logging for any component', () => {
90+
it('does not create logger', () => {
9091
const client = new MongoClient('mongodb://localhost:27017', {
9192
[loggerFeatureFlag]: true
9293
});
93-
for (const component of components) {
94-
expect(client.mongoLogger.componentSeverities).to.have.property(
95-
component,
96-
SeverityLevel.OFF
97-
);
98-
}
94+
expect(client.mongoLogger).to.not.exist;
9995
});
10096
});
10197
});
@@ -107,16 +103,11 @@ describe('Feature Flags', () => {
107103
process.env['MONGODB_LOG_COMMAND'] = SeverityLevel.EMERGENCY;
108104
});
109105

110-
it('does not enable logging', () => {
106+
it('does not instantiate logger', () => {
111107
const client = new MongoClient('mongodb://localhost:27017', {
112108
[loggerFeatureFlag]: featureFlagValue
113109
});
114-
for (const component of components) {
115-
expect(client.mongoLogger.componentSeverities).to.have.property(
116-
component,
117-
SeverityLevel.OFF
118-
);
119-
}
110+
expect(client.mongoLogger).to.not.exist;
120111
});
121112
});
122113

@@ -125,16 +116,11 @@ describe('Feature Flags', () => {
125116
process.env = {};
126117
});
127118

128-
it('does not enable logging', () => {
119+
it('does not instantiate logger', () => {
129120
const client = new MongoClient('mongodb://localhost:27017', {
130121
[loggerFeatureFlag]: featureFlagValue
131122
});
132-
for (const component of components) {
133-
expect(client.mongoLogger.componentSeverities).to.have.property(
134-
component,
135-
SeverityLevel.OFF
136-
);
137-
}
123+
expect(client.mongoLogger).to.not.exist;
138124
});
139125
});
140126
});
@@ -162,7 +148,7 @@ describe('Feature Flags', () => {
162148
[Symbol.for('@@mdb.internalLoggerConfig')]: undefined
163149
});
164150

165-
expect(client.mongoLogger.componentSeverities).to.have.property(
151+
expect(client.mongoLogger?.componentSeverities).to.have.property(
166152
'command',
167153
SeverityLevel.EMERGENCY
168154
);
@@ -178,7 +164,7 @@ describe('Feature Flags', () => {
178164
}
179165
});
180166

181-
expect(client.mongoLogger.componentSeverities).to.have.property(
167+
expect(client.mongoLogger?.componentSeverities).to.have.property(
182168
'command',
183169
SeverityLevel.ALERT
184170
);

test/unit/mongo_client.test.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1078,9 +1078,9 @@ describe('MongoOptions', function () {
10781078
).to.not.throw(MongoAPIError);
10791079
const client = new MongoClient('mongodb://a/', {
10801080
[loggerFeatureFlag]: true,
1081-
mongodbLogComponentSeverities: {}
1081+
mongodbLogComponentSeverities: { client: 'error' } // dummy so logger doesn't turn on
10821082
});
1083-
expect(client.mongoLogger.componentSeverities.default).to.equal('off');
1083+
expect(client.mongoLogger?.componentSeverities.command).to.equal('off');
10841084
});
10851085
});
10861086
context('when valid client option is provided', function () {
@@ -1094,9 +1094,9 @@ describe('MongoOptions', function () {
10941094
).to.not.throw(MongoAPIError);
10951095
const client = new MongoClient('mongodb://a/', {
10961096
[loggerFeatureFlag]: true,
1097-
mongodbLogComponentSeverities: { default: 'emergency' }
1097+
mongodbLogComponentSeverities: { command: 'emergency' }
10981098
});
1099-
expect(client.mongoLogger.componentSeverities.default).to.equal('emergency');
1099+
expect(client.mongoLogger?.componentSeverities.command).to.equal('emergency');
11001100
});
11011101
});
11021102
});

0 commit comments

Comments
 (0)