Skip to content

Commit f9103a3

Browse files
willLog precomputed
1 parent e5351f2 commit f9103a3

File tree

3 files changed

+77
-15
lines changed

3 files changed

+77
-15
lines changed

src/mongo_logger.ts

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -728,7 +728,10 @@ export class MongoLogger {
728728
logDestination: MongoDBLogWritable;
729729
logDestinationIsStdErr: boolean;
730730
pendingLog: PromiseLike<unknown> | unknown = null;
731-
willLog: any; //Record<MongoLoggableComponent, Record<SeverityLevel, boolean>>;
731+
willLog: Record<MongoLoggableComponent, Record<SeverityLevel, boolean>> = {} as Record<
732+
MongoLoggableComponent,
733+
Record<SeverityLevel, boolean>
734+
>;
732735

733736
/**
734737
* This method should be used when logging errors that do not have a public driver API for
@@ -761,25 +764,26 @@ export class MongoLogger {
761764
this.maxDocumentLength = options.maxDocumentLength;
762765
this.logDestination = options.logDestination;
763766
this.logDestinationIsStdErr = options.logDestinationIsStdErr;
764-
this.willLog = this.createWillLog();
767+
this.createWillLog();
765768
}
766769

767770
createWillLog() {
768-
const to_return = {};
769-
console.log(Object.values(SEVERITY_LEVEL_MAP))
770771
for (const component of Object.values(MongoLoggableComponent)) {
771-
const componentSeverityNum = SEVERITY_LEVEL_MAP.getNumericSeverityLevel(this.componentSeverities[component]);
772-
for (const severityLevel of Object.entries(SEVERITY_LEVEL_MAP)) {
773-
774-
}
775-
772+
this.willLog[component] = Object.fromEntries(
773+
Object.entries(SeverityLevel).map(([_key, value]) => [
774+
value as SeverityLevel,
775+
compareSeverity(value, this.componentSeverities[component]) <= 0
776+
])
777+
) as Record<SeverityLevel, boolean>;
776778
}
777-
return to_return;
778779
}
779780

780781
turnOffSeverities() {
781-
for (const key of Object.values(MongoLoggableComponent)) {
782-
this.componentSeverities[key as MongoLoggableComponent] = SeverityLevel.OFF;
782+
for (const component of Object.values(MongoLoggableComponent)) {
783+
this.componentSeverities[component] = SeverityLevel.OFF;
784+
for (const severityLevel of Object.values(SeverityLevel)) {
785+
this.willLog[component][severityLevel] = false;
786+
}
783787
}
784788
}
785789

@@ -813,7 +817,7 @@ export class MongoLogger {
813817
component: MongoLoggableComponent,
814818
message: Loggable | string
815819
): void {
816-
if (!this.willLog(severity, component)) return;
820+
if (!this.willLog[component][severity]) return;
817821

818822
let logMessage: Log = { t: new Date(), c: component, s: severity };
819823
if (typeof message === 'string') {

test/unit/cmap/connection_pool.test.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const sinon = require('sinon');
77
const { expect } = require('chai');
88
const { setImmediate } = require('timers');
99
const { promisify } = require('util');
10-
const { ns, isHello } = require('../../mongodb');
10+
const { ns, isHello, MongoLoggableComponent } = require('../../mongodb');
1111
const { LEGACY_HELLO_COMMAND } = require('../../mongodb');
1212
const { createTimerSandbox } = require('../timer_sandbox');
1313
const { topologyWithPlaceholderClient } = require('../../tools/utils');
@@ -19,7 +19,9 @@ describe('Connection Pool', function () {
1919
client: {
2020
mongoLogger: {
2121
debug: () => null,
22-
willLog: () => null
22+
willLog: Object.fromEntries(
23+
Object.values(MongoLoggableComponent).map(([value]) => [value, {}])
24+
)
2325
}
2426
}
2527
}

test/unit/mongo_logger.test.ts

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {
2323
DEFAULT_MAX_DOCUMENT_LENGTH,
2424
type Log,
2525
type MongoDBLogWritable,
26+
MongoLoggableComponent,
2627
MongoLogger,
2728
type MongoLoggerOptions,
2829
parseSeverityFromString,
@@ -114,6 +115,61 @@ describe('class MongoLogger', async function () {
114115
expect(buffer).to.have.lengthOf(1);
115116
});
116117
});
118+
119+
describe('willLog', function () {
120+
const expectedWillLog = {};
121+
const errorWillLogRow = {
122+
off: true,
123+
emergency: true,
124+
alert: true,
125+
critical: true,
126+
error: true,
127+
warn: false,
128+
notice: false,
129+
info: false,
130+
debug: false,
131+
trace: false
132+
};
133+
const debugWillLogRow = {
134+
off: true,
135+
emergency: true,
136+
alert: true,
137+
critical: true,
138+
error: true,
139+
warn: true,
140+
notice: true,
141+
info: true,
142+
debug: true,
143+
trace: false
144+
};
145+
146+
for (const component of Object.values(MongoLoggableComponent)) {
147+
context(`when component is ${component}`, function () {
148+
it(`willLog[${component}] object should only return true for values <= its componentSeverity `, function () {
149+
// generate component severities, set default severity to 'error' and relevant component severity to 'debug'
150+
const componentSeverities = Object.fromEntries(
151+
Object.entries(MongoLoggableComponent).map(([_key, value]) =>
152+
value === component ? [value, 'debug'] : [value, 'error']
153+
)
154+
);
155+
156+
// create expected willLog
157+
for (const component2 of Object.values(MongoLoggableComponent)) {
158+
expectedWillLog[component2] =
159+
component2 === component ? debugWillLogRow : errorWillLogRow;
160+
}
161+
162+
const logger = new MongoLogger({
163+
componentSeverities: componentSeverities,
164+
logDestination: createStdioLogger(process.stderr),
165+
logDestinationIsStdErr: true
166+
} as any);
167+
168+
expect(logger.willLog).to.deep.equal(expectedWillLog);
169+
});
170+
});
171+
}
172+
});
117173
});
118174

119175
describe('static #resolveOptions()', function () {

0 commit comments

Comments
 (0)