@squiz/component-logger-lib 1.69.0 → 1.71.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @squiz/component-logger-lib
2
2
 
3
+ ## 1.71.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 0d445ab: Avoid waiting for logging request to complete, parallelize more work when saving a content page.
8
+
9
+ ### Patch Changes
10
+
11
+ - 0d445ab: Added spans to more easily identify different portions of the request which relate to saving a content page
12
+
13
+ ## 1.70.0
14
+
15
+ ### Minor Changes
16
+
17
+ - c719a29: Don't throw error if Logging API fails
18
+
3
19
  ## 1.69.0
4
20
 
5
21
  ### Minor Changes
@@ -1,14 +1,12 @@
1
1
  import type { Config } from 'jest';
2
2
  import { config as dotEnvConfig } from 'dotenv';
3
+ import { defaultIntegrationConfig } from '../../jest.config';
3
4
 
4
5
  dotEnvConfig();
5
6
 
6
7
  // Sync object
7
8
  const config: Config = {
8
- preset: 'ts-jest',
9
- testTimeout: 60_000,
10
- testEnvironment: 'node',
11
- testRegex: '.*\\.integration\\.spec\\.ts$',
9
+ ...defaultIntegrationConfig,
12
10
  maxWorkers: 1,
13
11
  };
14
12
 
@@ -1,8 +1,9 @@
1
1
  import { ComponentLogLevel } from './component-log-message';
2
2
  import { ComponentLoggerConfig } from './component-logger-config';
3
+ export declare const MAX_MESSAGE_LENGTH = 200000;
3
4
  export declare const MAX_TAG_LENGTH = 200;
4
5
  export declare class ComponentLogger {
5
- readonly config: ComponentLoggerConfig;
6
+ private readonly config;
6
7
  private batch;
7
8
  constructor(config: ComponentLoggerConfig);
8
9
  debug(message: string | any, traceId?: string, userId?: string, tags?: string): Promise<void>;
@@ -11,5 +12,6 @@ export declare class ComponentLogger {
11
12
  error(message: string | any, traceId?: string, userId?: string, tags?: string): Promise<void>;
12
13
  protected append(level: ComponentLogLevel, message: string | any, traceId?: string, userId?: string, tags?: string): Promise<void>;
13
14
  private cleanTags;
14
- flush(): Promise<void>;
15
+ flush(background?: boolean): Promise<void>;
16
+ private flushInternal;
15
17
  }
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const dx_common_lib_1 = require("@squiz/dx-common-lib");
4
4
  const _1 = require(".");
5
- describe('ComponentLogger', () => {
5
+ describe.skip('ComponentLogger', () => {
6
6
  it('should sending log messages', async () => {
7
7
  const logger = await (0, _1.getComponentLogger)({
8
8
  enabled: true,
@@ -1 +1 @@
1
- {"version":3,"file":"component-logger.integration.spec.js","sourceRoot":"","sources":["../src/component-logger.integration.spec.ts"],"names":[],"mappings":";;AAAA,wDAAyD;AACzD,wBAAuC;AAEvC,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAkB,EAAC;YACtC,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,kBAAkB;YAC5B,iBAAiB,EAAE,IAAA,iCAAiB,EAAC,iCAAiC,CAAC;YACvE,IAAI,EAAE,0BAA0B;YAChC,WAAW,EAAE,cAAc;SAC5B,CAAC,CAAC;QAEH,MAAM,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;QAChD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"component-logger.integration.spec.js","sourceRoot":"","sources":["../src/component-logger.integration.spec.ts"],"names":[],"mappings":";;AAAA,wDAAyD;AACzD,wBAAuC;AAEvC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAkB,EAAC;YACtC,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,kBAAkB;YAC5B,iBAAiB,EAAE,IAAA,iCAAiB,EAAC,iCAAiC,CAAC;YACvE,IAAI,EAAE,0BAA0B;YAChC,WAAW,EAAE,cAAc;SAC5B,CAAC,CAAC;QAEH,MAAM,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;QAChD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -3,10 +3,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ComponentLogger = exports.MAX_TAG_LENGTH = void 0;
6
+ exports.ComponentLogger = exports.MAX_TAG_LENGTH = exports.MAX_MESSAGE_LENGTH = void 0;
7
7
  const superagent_1 = __importDefault(require("superagent"));
8
+ const api_1 = require("@opentelemetry/api");
8
9
  const MESSAGE_BATCH_SIZE = 100;
10
+ exports.MAX_MESSAGE_LENGTH = 200000;
9
11
  exports.MAX_TAG_LENGTH = 200;
12
+ const tracer = api_1.trace.getTracer('component-logger-lib:ComponentLogger');
10
13
  class ComponentLogger {
11
14
  constructor(config) {
12
15
  this.config = config;
@@ -42,7 +45,7 @@ class ComponentLogger {
42
45
  level: level,
43
46
  service: this.config.serviceName,
44
47
  timestamp: new Date().toISOString(),
45
- message: payload,
48
+ message: payload.slice(0, exports.MAX_MESSAGE_LENGTH),
46
49
  traceid: traceId,
47
50
  userid: userId,
48
51
  };
@@ -69,18 +72,42 @@ class ComponentLogger {
69
72
  tags = tags.slice(0, exports.MAX_TAG_LENGTH);
70
73
  return tags;
71
74
  }
72
- async flush() {
73
- if (this.config.enabled && this.batch.length > 0) {
75
+ async flush(background = true) {
76
+ const promise = this.flushInternal();
77
+ // avoid holding up requests by default, don't await completion.
78
+ if (!background) {
79
+ await promise;
80
+ }
81
+ }
82
+ async flushInternal() {
83
+ if (!this.config.enabled || this.batch.length === 0) {
84
+ return;
85
+ }
86
+ return tracer.startActiveSpan('flush', {
87
+ attributes: {
88
+ 'batch.length': this.batch.length,
89
+ },
90
+ }, async (span) => {
91
+ const logs = this.batch;
92
+ this.batch = [];
74
93
  try {
75
- const url = `${this.config.logUrl.replace(/\/+$/, '')}/${this.config.tenantId}`;
76
- await superagent_1.default.post(url).set('x-api-key', this.config.key).send(this.batch);
77
- this.batch = [];
94
+ const url = `${this.config.logUrl.replace(/\/+$/, '')}`;
95
+ await superagent_1.default
96
+ .post(url)
97
+ .set({
98
+ 'x-dxp-tenant': this.config.tenantId,
99
+ 'x-api-key': this.config.key,
100
+ })
101
+ .send(logs);
78
102
  }
79
103
  catch (err) {
104
+ this.batch.push(...logs);
80
105
  console.error(err);
81
- throw err;
82
106
  }
83
- }
107
+ finally {
108
+ span.end();
109
+ }
110
+ });
84
111
  }
85
112
  }
86
113
  exports.ComponentLogger = ComponentLogger;
@@ -1 +1 @@
1
- {"version":3,"file":"component-logger.js","sourceRoot":"","sources":["../src/component-logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"component-logger.js","sourceRoot":"","sources":["../src/component-logger.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const component_logger_1 = require("./component-logger");
7
7
  const superagent_1 = __importDefault(require("superagent"));
8
+ const timers_1 = require("timers");
8
9
  const postSetMock = {
9
10
  send: jest.fn(),
10
11
  };
@@ -14,7 +15,10 @@ const postMock = {
14
15
  },
15
16
  };
16
17
  jest.mock('superagent', () => ({
17
- post: () => {
18
+ post: (url) => {
19
+ if (url === 'fail-logging-api-url') {
20
+ throw Error('logging failed');
21
+ }
18
22
  return postMock;
19
23
  },
20
24
  }));
@@ -30,11 +34,13 @@ describe('ComponentLogger', () => {
30
34
  afterEach(() => {
31
35
  jest.clearAllMocks();
32
36
  });
37
+ const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(jest.fn());
33
38
  beforeAll(() => {
34
39
  jest.useFakeTimers();
35
40
  jest.setSystemTime(new Date('2023-05-28T00:00:00.000Z'));
36
41
  });
37
42
  afterAll(() => {
43
+ consoleErrorSpy.mockReset();
38
44
  jest.useRealTimers();
39
45
  });
40
46
  it('should throw error if config.logUrl is not set', async () => {
@@ -76,8 +82,11 @@ describe('ComponentLogger', () => {
76
82
  const logger = new component_logger_1.ComponentLogger(loggerConfig);
77
83
  await logger.info('The quick brown fox', '123');
78
84
  await logger.flush();
79
- expect(postSpy).toBeCalledWith('some-log-url/some-tenant-id');
80
- expect(postSetSpy).toBeCalledWith('x-api-key', 'some-key');
85
+ expect(postSpy).toBeCalledWith('some-log-url');
86
+ expect(postSetSpy).toBeCalledWith({
87
+ 'x-api-key': 'some-key',
88
+ 'x-dxp-tenant': 'some-tenant-id',
89
+ });
81
90
  });
82
91
  it('should strip off extra "/" on the logUrl', async () => {
83
92
  const loggerConfig = {
@@ -92,7 +101,7 @@ describe('ComponentLogger', () => {
92
101
  const logger = new component_logger_1.ComponentLogger(loggerConfig);
93
102
  await logger.info('The quick brown fox', '123');
94
103
  await logger.flush();
95
- expect(postSpy).toBeCalledWith('some-log-url/some-tenant-id');
104
+ expect(postSpy).toBeCalledWith('some-log-url');
96
105
  });
97
106
  it('should not include "tags" in payload if tags is not configured', async () => {
98
107
  const loggerConfig = {
@@ -324,5 +333,86 @@ describe('ComponentLogger', () => {
324
333
  ];
325
334
  expect(postSetMock.send).toBeCalledWith(expectedMessages);
326
335
  });
336
+ it('should truncate long messages', async () => {
337
+ const logger = new component_logger_1.ComponentLogger(loggerConfig);
338
+ const message = 'a'.repeat(component_logger_1.MAX_MESSAGE_LENGTH + 1);
339
+ await logger.info(message);
340
+ await logger.flush();
341
+ expect(postSetMock.send).toHaveBeenCalledWith([
342
+ expect.objectContaining({
343
+ message: message.slice(0, -1),
344
+ }),
345
+ ]);
346
+ });
347
+ it('should not throw error if logging API fails', async () => {
348
+ const loggerConfig = {
349
+ enabled: true,
350
+ logUrl: 'fail-logging-api-url',
351
+ key: 'some-key',
352
+ tenantId: 'some-tenant-id',
353
+ tags: 'some-tags',
354
+ serviceName: 'some-service',
355
+ };
356
+ const logger = new component_logger_1.ComponentLogger(loggerConfig);
357
+ await logger.error('some error message', '123');
358
+ await logger.flush();
359
+ expect(consoleErrorSpy).toBeCalledWith(new Error('logging failed'));
360
+ });
361
+ it.each([
362
+ ['background flush', true, ['flush resolved']],
363
+ ['foreground flush', false, ['send resolved', 'flush resolved']],
364
+ ])('should not await the promise if flush is performed in the background - %s', async (description, background, expectedResolveSequence) => {
365
+ const resolveSequence = [];
366
+ const resolver = jest.fn();
367
+ postSetMock.send.mockImplementation(async () => {
368
+ return new Promise((resolve) => {
369
+ resolver.mockImplementation(() => {
370
+ resolveSequence.push('send resolved');
371
+ resolve(null);
372
+ });
373
+ });
374
+ });
375
+ const logger = new component_logger_1.ComponentLogger(loggerConfig);
376
+ await logger.error('error message');
377
+ const flushPromise = logger.flush(background).then(() => resolveSequence.push('flush resolved'));
378
+ (0, timers_1.setImmediate)(() => {
379
+ resolver();
380
+ });
381
+ await flushPromise;
382
+ expect(resolveSequence).toEqual(expectedResolveSequence);
383
+ });
384
+ it('should not flush the same log entry multiple times if called concurrently', async () => {
385
+ const logger = new component_logger_1.ComponentLogger(loggerConfig);
386
+ const resolvers = [];
387
+ postSetMock.send.mockImplementation(async () => {
388
+ return new Promise((resolve) => {
389
+ resolvers.push(() => {
390
+ resolve(null);
391
+ });
392
+ });
393
+ });
394
+ await logger.error('error message 1');
395
+ await logger.flush();
396
+ await logger.error('error message 2');
397
+ await logger.flush();
398
+ resolvers.map((resolver) => resolver());
399
+ expect(postSetMock.send).toHaveBeenCalledTimes(2);
400
+ expect(postSetMock.send).toHaveBeenCalledWith([expect.objectContaining({ message: 'error message 1' })]);
401
+ expect(postSetMock.send).toHaveBeenCalledWith([expect.objectContaining({ message: 'error message 2' })]);
402
+ });
403
+ it('should flush logs on next attempt if they failed to flush', async () => {
404
+ const logger = new component_logger_1.ComponentLogger(loggerConfig);
405
+ postSetMock.send.mockRejectedValueOnce(new Error('Log submission failed.')).mockResolvedValue(postSetMock);
406
+ await logger.error('error message 1');
407
+ await logger.flush();
408
+ await logger.error('error message 2');
409
+ await logger.flush();
410
+ expect(postSetMock.send).toHaveBeenCalledTimes(2);
411
+ expect(postSetMock.send).toHaveBeenCalledWith([expect.objectContaining({ message: 'error message 1' })]);
412
+ expect(postSetMock.send).toHaveBeenCalledWith([
413
+ expect.objectContaining({ message: 'error message 1' }),
414
+ expect.objectContaining({ message: 'error message 2' }),
415
+ ]);
416
+ });
327
417
  });
328
418
  //# sourceMappingURL=component-logger.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"component-logger.spec.js","sourceRoot":"","sources":["../src/component-logger.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"component-logger.spec.js","sourceRoot":"","sources":["../src/component-logger.spec.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@squiz/component-logger-lib",
3
- "version": "1.69.0",
3
+ "version": "1.71.0",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "private": false,
@@ -15,14 +15,15 @@
15
15
  "author": "",
16
16
  "license": "ISC",
17
17
  "dependencies": {
18
+ "@opentelemetry/api": "^1.6.0",
18
19
  "superagent": "^8.0.9"
19
20
  },
20
21
  "devDependencies": {
21
22
  "@squiz/dx-common-lib": "^1.64.0",
22
- "@types/node": "20.12.4",
23
+ "@types/node": "20.12.12",
23
24
  "dotenv": "^16.0.3",
24
25
  "jest": "29.4.1",
25
26
  "ts-jest": "29.0.5",
26
- "ts-node": "10.9.1"
27
+ "ts-node": "10.9.2"
27
28
  }
28
29
  }
@@ -1,7 +1,7 @@
1
1
  import { parseEnvVarForVar } from '@squiz/dx-common-lib';
2
2
  import { getComponentLogger } from '.';
3
3
 
4
- describe('ComponentLogger', () => {
4
+ describe.skip('ComponentLogger', () => {
5
5
  it('should sending log messages', async () => {
6
6
  const logger = await getComponentLogger({
7
7
  enabled: true,
@@ -1,6 +1,7 @@
1
- import { ComponentLogger, MAX_TAG_LENGTH } from './component-logger';
1
+ import { ComponentLogger, MAX_MESSAGE_LENGTH, MAX_TAG_LENGTH } from './component-logger';
2
2
  import { ComponentLoggerConfig } from './component-logger-config';
3
3
  import superagent from 'superagent';
4
+ import { setImmediate } from 'timers';
4
5
 
5
6
  const postSetMock = {
6
7
  send: jest.fn(),
@@ -11,7 +12,10 @@ const postMock = {
11
12
  },
12
13
  };
13
14
  jest.mock('superagent', () => ({
14
- post: () => {
15
+ post: (url: string) => {
16
+ if (url === 'fail-logging-api-url') {
17
+ throw Error('logging failed');
18
+ }
15
19
  return postMock;
16
20
  },
17
21
  }));
@@ -30,12 +34,15 @@ describe('ComponentLogger', () => {
30
34
  jest.clearAllMocks();
31
35
  });
32
36
 
37
+ const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(jest.fn());
38
+
33
39
  beforeAll(() => {
34
40
  jest.useFakeTimers();
35
41
  jest.setSystemTime(new Date('2023-05-28T00:00:00.000Z'));
36
42
  });
37
43
 
38
44
  afterAll(() => {
45
+ consoleErrorSpy.mockReset();
39
46
  jest.useRealTimers();
40
47
  });
41
48
 
@@ -83,8 +90,11 @@ describe('ComponentLogger', () => {
83
90
  await logger.info('The quick brown fox', '123');
84
91
  await logger.flush();
85
92
 
86
- expect(postSpy).toBeCalledWith('some-log-url/some-tenant-id');
87
- expect(postSetSpy).toBeCalledWith('x-api-key', 'some-key');
93
+ expect(postSpy).toBeCalledWith('some-log-url');
94
+ expect(postSetSpy).toBeCalledWith({
95
+ 'x-api-key': 'some-key',
96
+ 'x-dxp-tenant': 'some-tenant-id',
97
+ });
88
98
  });
89
99
 
90
100
  it('should strip off extra "/" on the logUrl', async () => {
@@ -103,7 +113,7 @@ describe('ComponentLogger', () => {
103
113
  await logger.info('The quick brown fox', '123');
104
114
  await logger.flush();
105
115
 
106
- expect(postSpy).toBeCalledWith('some-log-url/some-tenant-id');
116
+ expect(postSpy).toBeCalledWith('some-log-url');
107
117
  });
108
118
 
109
119
  it('should not include "tags" in payload if tags is not configured', async () => {
@@ -376,4 +386,107 @@ describe('ComponentLogger', () => {
376
386
  ];
377
387
  expect(postSetMock.send).toBeCalledWith(expectedMessages);
378
388
  });
389
+
390
+ it('should truncate long messages', async () => {
391
+ const logger = new ComponentLogger(loggerConfig);
392
+ const message = 'a'.repeat(MAX_MESSAGE_LENGTH + 1);
393
+
394
+ await logger.info(message);
395
+ await logger.flush();
396
+
397
+ expect(postSetMock.send).toHaveBeenCalledWith([
398
+ expect.objectContaining({
399
+ message: message.slice(0, -1),
400
+ }),
401
+ ]);
402
+ });
403
+
404
+ it('should not throw error if logging API fails', async () => {
405
+ const loggerConfig = <ComponentLoggerConfig>{
406
+ enabled: true,
407
+ logUrl: 'fail-logging-api-url',
408
+ key: 'some-key',
409
+ tenantId: 'some-tenant-id',
410
+ tags: 'some-tags',
411
+ serviceName: 'some-service',
412
+ };
413
+ const logger = new ComponentLogger(loggerConfig);
414
+
415
+ await logger.error('some error message', '123');
416
+ await logger.flush();
417
+
418
+ expect(consoleErrorSpy).toBeCalledWith(new Error('logging failed'));
419
+ });
420
+
421
+ it.each([
422
+ ['background flush', true, ['flush resolved']],
423
+ ['foreground flush', false, ['send resolved', 'flush resolved']],
424
+ ])(
425
+ 'should not await the promise if flush is performed in the background - %s',
426
+ async (description: string, background: boolean, expectedResolveSequence: string[]) => {
427
+ const resolveSequence: string[] = [];
428
+ const resolver = jest.fn();
429
+
430
+ postSetMock.send.mockImplementation(async () => {
431
+ return new Promise((resolve) => {
432
+ resolver.mockImplementation(() => {
433
+ resolveSequence.push('send resolved');
434
+ resolve(null);
435
+ });
436
+ });
437
+ });
438
+
439
+ const logger = new ComponentLogger(loggerConfig);
440
+ await logger.error('error message');
441
+ const flushPromise = logger.flush(background).then(() => resolveSequence.push('flush resolved'));
442
+
443
+ setImmediate(() => {
444
+ resolver();
445
+ });
446
+ await flushPromise;
447
+
448
+ expect(resolveSequence).toEqual(expectedResolveSequence);
449
+ },
450
+ );
451
+
452
+ it('should not flush the same log entry multiple times if called concurrently', async () => {
453
+ const logger = new ComponentLogger(loggerConfig);
454
+ const resolvers: (() => void)[] = [];
455
+
456
+ postSetMock.send.mockImplementation(async () => {
457
+ return new Promise((resolve) => {
458
+ resolvers.push(() => {
459
+ resolve(null);
460
+ });
461
+ });
462
+ });
463
+
464
+ await logger.error('error message 1');
465
+ await logger.flush();
466
+ await logger.error('error message 2');
467
+ await logger.flush();
468
+ resolvers.map((resolver) => resolver());
469
+
470
+ expect(postSetMock.send).toHaveBeenCalledTimes(2);
471
+ expect(postSetMock.send).toHaveBeenCalledWith([expect.objectContaining({ message: 'error message 1' })]);
472
+ expect(postSetMock.send).toHaveBeenCalledWith([expect.objectContaining({ message: 'error message 2' })]);
473
+ });
474
+
475
+ it('should flush logs on next attempt if they failed to flush', async () => {
476
+ const logger = new ComponentLogger(loggerConfig);
477
+
478
+ postSetMock.send.mockRejectedValueOnce(new Error('Log submission failed.')).mockResolvedValue(postSetMock);
479
+
480
+ await logger.error('error message 1');
481
+ await logger.flush();
482
+ await logger.error('error message 2');
483
+ await logger.flush();
484
+
485
+ expect(postSetMock.send).toHaveBeenCalledTimes(2);
486
+ expect(postSetMock.send).toHaveBeenCalledWith([expect.objectContaining({ message: 'error message 1' })]);
487
+ expect(postSetMock.send).toHaveBeenCalledWith([
488
+ expect.objectContaining({ message: 'error message 1' }),
489
+ expect.objectContaining({ message: 'error message 2' }),
490
+ ]);
491
+ });
379
492
  });
@@ -1,14 +1,17 @@
1
1
  import superagent from 'superagent';
2
2
  import { ComponentLogLevel, ComponentLogMessage } from './component-log-message';
3
3
  import { ComponentLoggerConfig } from './component-logger-config';
4
+ import { trace } from '@opentelemetry/api';
4
5
 
5
6
  const MESSAGE_BATCH_SIZE = 100;
7
+ export const MAX_MESSAGE_LENGTH = 200000;
6
8
  export const MAX_TAG_LENGTH = 200;
9
+ const tracer = trace.getTracer('component-logger-lib:ComponentLogger');
7
10
 
8
11
  export class ComponentLogger {
9
12
  private batch: Array<ComponentLogMessage> = [];
10
13
 
11
- constructor(readonly config: ComponentLoggerConfig) {
14
+ constructor(private readonly config: ComponentLoggerConfig) {
12
15
  if (config.enabled) {
13
16
  if (!config.logUrl) {
14
17
  throw new Error('config.logUrl is required');
@@ -50,7 +53,7 @@ export class ComponentLogger {
50
53
  level: level,
51
54
  service: this.config.serviceName,
52
55
  timestamp: new Date().toISOString(),
53
- message: payload,
56
+ message: payload.slice(0, MAX_MESSAGE_LENGTH),
54
57
  traceid: traceId,
55
58
  userid: userId,
56
59
  };
@@ -80,16 +83,47 @@ export class ComponentLogger {
80
83
  return tags;
81
84
  }
82
85
 
83
- async flush(): Promise<void> {
84
- if (this.config.enabled && this.batch.length > 0) {
85
- try {
86
- const url = `${this.config.logUrl.replace(/\/+$/, '')}/${this.config.tenantId}`;
87
- await superagent.post(url).set('x-api-key', this.config.key).send(this.batch);
88
- this.batch = [];
89
- } catch (err) {
90
- console.error(err);
91
- throw err;
92
- }
86
+ async flush(background: boolean = true): Promise<void> {
87
+ const promise = this.flushInternal();
88
+
89
+ // avoid holding up requests by default, don't await completion.
90
+ if (!background) {
91
+ await promise;
93
92
  }
94
93
  }
94
+
95
+ private async flushInternal(): Promise<void> {
96
+ if (!this.config.enabled || this.batch.length === 0) {
97
+ return;
98
+ }
99
+
100
+ return tracer.startActiveSpan(
101
+ 'flush',
102
+ {
103
+ attributes: {
104
+ 'batch.length': this.batch.length,
105
+ },
106
+ },
107
+ async (span) => {
108
+ const logs = this.batch;
109
+ this.batch = [];
110
+
111
+ try {
112
+ const url = `${this.config.logUrl.replace(/\/+$/, '')}`;
113
+ await superagent
114
+ .post(url)
115
+ .set({
116
+ 'x-dxp-tenant': this.config.tenantId,
117
+ 'x-api-key': this.config.key,
118
+ })
119
+ .send(logs);
120
+ } catch (err) {
121
+ this.batch.push(...logs);
122
+ console.error(err);
123
+ } finally {
124
+ span.end();
125
+ }
126
+ },
127
+ );
128
+ }
95
129
  }