diff --git a/CHANGELOG.md b/CHANGELOG.md index b0e23d98076..68c62f2a7f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ All notable changes to this project will be documented in this file. ### :rocket: (Enhancement) +* feat(ConsoleSpanExporter): export span links [#2917](https://github.com/open-telemetry/opentelemetry-js/pull/2917) @trentm + ### :bug: (Bug Fix) ### :books: (Refine Doc) diff --git a/packages/opentelemetry-sdk-trace-base/src/export/ConsoleSpanExporter.ts b/packages/opentelemetry-sdk-trace-base/src/export/ConsoleSpanExporter.ts index 60f803c5d08..57baa62d3a1 100644 --- a/packages/opentelemetry-sdk-trace-base/src/export/ConsoleSpanExporter.ts +++ b/packages/opentelemetry-sdk-trace-base/src/export/ConsoleSpanExporter.ts @@ -65,6 +65,7 @@ export class ConsoleSpanExporter implements SpanExporter { attributes: span.attributes, status: span.status, events: span.events, + links: span.links }; } @@ -78,7 +79,7 @@ export class ConsoleSpanExporter implements SpanExporter { done?: (result: ExportResult) => void ): void { for (const span of spans) { - console.log(this._exportInfo(span)); + console.dir(this._exportInfo(span), { depth: 3 }); } if (done) { return done({ code: ExportResultCode.SUCCESS }); diff --git a/packages/opentelemetry-sdk-trace-base/test/common/export/ConsoleSpanExporter.test.ts b/packages/opentelemetry-sdk-trace-base/test/common/export/ConsoleSpanExporter.test.ts index 8e5e40adfb9..0a66b13fc2a 100644 --- a/packages/opentelemetry-sdk-trace-base/test/common/export/ConsoleSpanExporter.test.ts +++ b/packages/opentelemetry-sdk-trace-base/test/common/export/ConsoleSpanExporter.test.ts @@ -14,6 +14,10 @@ * limitations under the License. */ +import { + SpanContext, + TraceFlags, +} from '@opentelemetry/api'; import { AlwaysOnSampler } from '@opentelemetry/core'; import * as assert from 'assert'; import * as sinon from 'sinon'; @@ -26,16 +30,16 @@ import { /* eslint-disable no-console */ describe('ConsoleSpanExporter', () => { let consoleExporter: ConsoleSpanExporter; - let previousConsoleLog: any; + let previousConsoleDir: any; beforeEach(() => { - previousConsoleLog = console.log; - console.log = () => {}; + previousConsoleDir = console.dir; + console.dir = () => {}; consoleExporter = new ConsoleSpanExporter(); }); afterEach(() => { - console.log = previousConsoleLog; + console.dir = previousConsoleDir; }); describe('.export()', () => { @@ -46,14 +50,22 @@ describe('ConsoleSpanExporter', () => { }); consoleExporter = new ConsoleSpanExporter(); - const spyConsole = sinon.spy(console, 'log'); + const spyConsole = sinon.spy(console, 'dir'); const spyExport = sinon.spy(consoleExporter, 'export'); basicTracerProvider.addSpanProcessor( new SimpleSpanProcessor(consoleExporter) ); - const span = basicTracerProvider.getTracer('default').startSpan('foo'); + const tracer = basicTracerProvider.getTracer('default'); + const context: SpanContext = { + traceId: 'a3cda95b652f4a1592b449d5929fda1b', + spanId: '5e0c63257de34c92', + traceFlags: TraceFlags.SAMPLED, + }; + const span = tracer.startSpan('foo', { + links: [ { context, attributes: { anAttr: 'aValue' } } ] + }); span.addEvent('foobar'); span.end(); @@ -70,6 +82,7 @@ describe('ConsoleSpanExporter', () => { 'events', 'id', 'kind', + 'links', 'name', 'parentId', 'status', @@ -80,7 +93,7 @@ describe('ConsoleSpanExporter', () => { assert.ok(firstSpan.name === 'foo'); assert.ok(firstEvent.name === 'foobar'); assert.ok(consoleSpan.id === firstSpan.spanContext().spanId); - assert.ok(keys === expectedKeys); + assert.ok(keys === expectedKeys, 'expectedKeys'); assert.ok(spyExport.calledOnce); });