diff --git a/experimental/packages/sdk-logs/src/LogRecord.ts b/experimental/packages/sdk-logs/src/LogRecord.ts index ed76d5eb07..8d8fae6168 100644 --- a/experimental/packages/sdk-logs/src/LogRecord.ts +++ b/experimental/packages/sdk-logs/src/LogRecord.ts @@ -114,18 +114,18 @@ export class LogRecord implements ReadableLogRecord { if (value === null) { return this; } - if ( - typeof value === 'object' && - !Array.isArray(value) && - Object.keys(value).length > 0 - ) { - this.attributes[key] = value; - } if (key.length === 0) { api.diag.warn(`Invalid attribute key: ${key}`); return this; } - if (!isAttributeValue(value)) { + if ( + !isAttributeValue(value) && + !( + typeof value === 'object' && + !Array.isArray(value) && + Object.keys(value).length > 0 + ) + ) { api.diag.warn(`Invalid attribute value set for key: ${key}`); return this; } @@ -136,7 +136,11 @@ export class LogRecord implements ReadableLogRecord { ) { return this; } - this.attributes[key] = this._truncateToSize(value); + if (isAttributeValue(value)) { + this.attributes[key] = this._truncateToSize(value); + } else { + this.attributes[key] = value; + } return this; } diff --git a/experimental/packages/sdk-logs/test/common/LogRecord.test.ts b/experimental/packages/sdk-logs/test/common/LogRecord.test.ts index e32ab39838..8954a3520a 100644 --- a/experimental/packages/sdk-logs/test/common/LogRecord.test.ts +++ b/experimental/packages/sdk-logs/test/common/LogRecord.test.ts @@ -179,14 +179,34 @@ describe('LogRecord', () => { describe('when "attributeCountLimit" option defined', () => { const { logRecord } = setup({ attributeCountLimit: 100 }); for (let i = 0; i < 150; i++) { - logRecord.setAttribute(`foo${i}`, `bar${i}`); + let attributeValue; + switch (i % 3) { + case 0: { + attributeValue = `bar${i}`; + break; + } + case 1: { + attributeValue = [`bar${i}`]; + break; + } + case 2: { + attributeValue = { + bar: `bar${i}`, + }; + break; + } + default: { + attributeValue = `bar${i}`; + } + } + logRecord.setAttribute(`foo${i}`, attributeValue); } it('should remove / drop all remaining values after the number of values exceeds this limit', () => { const { attributes } = logRecord; assert.strictEqual(Object.keys(attributes).length, 100); assert.strictEqual(attributes.foo0, 'bar0'); - assert.strictEqual(attributes.foo99, 'bar99'); + assert.deepStrictEqual(attributes.foo98, { bar: 'bar98' }); assert.strictEqual(attributes.foo149, undefined); }); });