Skip to content

Commit 6132122

Browse files
authored
fix(#15): preserve the logger context across flushes (#16)
1 parent 2fe4e36 commit 6132122

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

src/logger/MetricsLogger.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export class MetricsLogger {
4848

4949
// accept and reset the context
5050
sink.accept(this.context);
51-
this.context = MetricsContext.empty();
51+
this.context = this.context.createCopyWithContext();
5252
}
5353

5454
/**

src/logger/__tests__/MetricsLogger.test.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,42 @@ test('flush() delegates context configuration to the environment by calling conf
261261
expect(environment.configureContext).toBeCalled();
262262
});
263263

264+
test('context is preserved across flush() calls', async () => {
265+
// arrange
266+
const expectedNamespace = 'Namespace';
267+
const metricKey = 'Metric';
268+
const expectedDimensionKey = 'Dim';
269+
const expectedPropertyKey = 'Prop';
270+
const expectedValues = 'Value';
271+
272+
const dimensions: Record<string, string> = {};
273+
dimensions[expectedDimensionKey] = expectedValues;
274+
275+
logger.setNamespace(expectedNamespace);
276+
logger.setProperty(expectedPropertyKey, expectedValues);
277+
logger.setDimensions(dimensions);
278+
279+
// act
280+
logger.putMetric(metricKey, 0);
281+
await logger.flush();
282+
283+
logger.putMetric(metricKey, 1);
284+
await logger.flush();
285+
286+
// assert
287+
expect(sink.events).toHaveLength(2);
288+
for (let i = 0; i < sink.events.length; i++) {
289+
const evt = sink.events[i];
290+
// namespace, properties, dimensions should survive flushes
291+
expect(evt.namespace).toBe(expectedNamespace);
292+
expect(evt.getDimensions()[0][expectedDimensionKey]).toBe(expectedValues);
293+
expect(evt.properties[expectedPropertyKey]).toBe(expectedValues);
294+
// metric values should not survive flushes
295+
// @ts-ignore
296+
expect(evt.metrics.get(metricKey).values).toStrictEqual([i]);
297+
}
298+
});
299+
264300
const expectDimension = (key: string, value: string) => {
265301
expect(sink.events).toHaveLength(1);
266302
const dimensionSets = sink.events[0].getDimensions();

0 commit comments

Comments
 (0)