fix(sdk-logs): ensure default resource attributes are used as fallbacks when a resource is passed to LoggerProvider (#4564)

Before this Resource.default() attributes would only be used if *no*
resource was given to LoggerProvider. That would mean that
'service.name' and others could be missing, e.g. when called from
NodeSDK.

Co-authored-by: Marc Pichler <marc.pichler@dynatrace.com>
This commit is contained in:
Trent Mick 2024-03-21 05:05:01 -07:00 committed by GitHub
parent 5489797344
commit 6547440432
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 18 additions and 8 deletions

View File

@ -26,6 +26,7 @@ All notable changes to experimental packages in this project will be documented
* fix(exporter-*-otlp-*): use parseHeaders() to ensure header-values are not 'undefined' #4540
* Fixes a bug where passing `undefined` as a header value would crash the end-user app after the export timeout elapsed.
* fix(sdk-logs): ensure default resource attributes are used as fallbacks when a resource is passed to LoggerProvider.
### :books: (Refine Doc)

View File

@ -46,7 +46,7 @@ const logger = logsAPI.logs.getLogger('default');
// emit a log record
logger.emit({
severityNumber: SeverityNumber.INFO,
severityNumber: logsAPI.SeverityNumber.INFO,
severityText: 'INFO',
body: 'this is a log record body',
attributes: { 'log.type': 'LogRecord' },

View File

@ -33,15 +33,14 @@ export class LoggerProvider implements logsAPI.LoggerProvider {
private readonly _sharedState: LoggerProviderSharedState;
constructor(config: LoggerProviderConfig = {}) {
const {
resource = Resource.default(),
logRecordLimits,
forceFlushTimeoutMillis,
} = merge({}, loadDefaultConfig(), config);
const mergedConfig = merge({}, loadDefaultConfig(), config);
const resource = Resource.default().merge(
mergedConfig.resource ?? Resource.empty()
);
this._sharedState = new LoggerProviderSharedState(
resource,
forceFlushTimeoutMillis,
reconfigureLimits(logRecordLimits)
mergedConfig.forceFlushTimeoutMillis,
reconfigureLimits(mergedConfig.logRecordLimits)
);
this._shutdownOnce = new BindOnceFuture(this._shutdown, this);
}

View File

@ -63,6 +63,16 @@ describe('LoggerProvider', () => {
assert.deepStrictEqual(resource, Resource.default());
});
it('should fallback to default resource attrs', () => {
const passedInResource = new Resource({ foo: 'bar' });
const provider = new LoggerProvider({ resource: passedInResource });
const { resource } = provider['_sharedState'];
assert.deepStrictEqual(
resource,
Resource.default().merge(passedInResource)
);
});
it('should have default forceFlushTimeoutMillis if not pass', () => {
const provider = new LoggerProvider();
const sharedState = provider['_sharedState'];