Skip to content

feat: add event name to event API and SDK #5707

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
Jun 2, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions e2e-tests/test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ async function main() {
severityText: 'INFO',
body: 'test-log-body',
attributes: { foo: 'bar' },
eventName: 'test-log-event',
});

// flushes exporters and shuts down the SDK
Expand Down
7 changes: 7 additions & 0 deletions e2e-tests/verify.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -94,4 +94,11 @@ function verifyLog(log) {
);
process.exit(1);
}

if (log.eventName !== 'test-log-event') {
console.error(
`Expected log event name 'test-log-event', but got '${log.eventName}'`
);
process.exit(1);
}
}
1 change: 1 addition & 0 deletions experimental/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ For notes on migrating to 2.x / 0.200.x see [the upgrade guide](doc/upgrade-to-2

* feat(exporter-otlp-\*): update proto to `v1.7.0`
* feat(exporter-metrics-otlp-proto): Support to protobuf in browser metrics. [#5710](https://github.com/open-telemetry/opentelemetry-js/pull/5710) @YangJonghun
* feat(logs): add eventName to emit [#5707](https://github.com/open-telemetry/opentelemetry-js/pull/5707)

### :bug: Bug Fixes

Expand Down
5 changes: 5 additions & 0 deletions experimental/packages/api-logs/src/types/LogRecord.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,11 @@ export enum SeverityNumber {
}

export interface LogRecord {
/**
* The unique identifier for the log record.
*/
eventName?: string;

/**
* The time when the log record occurred as UNIX Epoch time in nanoseconds.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,9 @@ export interface ILogRecord {

/** LogRecord spanId */
spanId?: string | Uint8Array;

/** LogRecord eventName */
eventName?: string;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ function toLogRecord(log: ReadableLogRecord, encoder: Encoder): ILogRecord {
severityNumber: toSeverityNumber(log.severityNumber),
severityText: log.severityText,
body: toAnyValue(log.body),
eventName: log.eventName,
attributes: toLogAttributes(log.attributes),
droppedAttributesCount: log.droppedAttributesCount,
flags: log.spanContext?.traceFlags,
Expand Down
4 changes: 3 additions & 1 deletion experimental/packages/otlp-transformer/test/logs.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ function createExpectedLogJson(
severityNumber: ESeverityNumber.SEVERITY_NUMBER_ERROR,
severityText: 'error',
body: { stringValue: 'some_log_body' },
eventName: 'some.event.name',

attributes: [
{
Expand Down Expand Up @@ -122,7 +123,7 @@ function createExpectedLogProtobuf(): IExportLogsServiceRequest {
severityNumber: ESeverityNumber.SEVERITY_NUMBER_ERROR,
severityText: 'error',
body: { stringValue: 'some_log_body' },

eventName: 'some.event.name',
attributes: [
{
key: 'some-attribute',
Expand Down Expand Up @@ -190,6 +191,7 @@ describe('Logs', () => {
severityNumber: SeverityNumber.ERROR,
severityText: 'error',
body: 'some_log_body',
eventName: 'some.event.name',
spanContext: {
spanId: '0000000000000002',
traceFlags: TraceFlags.SAMPLED,
Expand Down
18 changes: 18 additions & 0 deletions experimental/packages/sdk-logs/src/LogRecord.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ export class LogRecord implements ReadableLogRecord {
private _severityText?: string;
private _severityNumber?: logsAPI.SeverityNumber;
private _body?: LogBody;
private _eventName?: string;
private totalAttributesCount: number = 0;

private _isReadonly: boolean = false;
Expand Down Expand Up @@ -74,6 +75,16 @@ export class LogRecord implements ReadableLogRecord {
return this._body;
}

get eventName(): string | undefined {
return this._eventName;
}
set eventName(eventName: string | undefined) {
if (this._isLogRecordReadonly()) {
return;
}
this._eventName = eventName;
}

get droppedAttributesCount(): number {
return this.totalAttributesCount - Object.keys(this.attributes).length;
}
Expand All @@ -86,6 +97,7 @@ export class LogRecord implements ReadableLogRecord {
const {
timestamp,
observedTimestamp,
eventName,
severityNumber,
severityText,
body,
Expand All @@ -109,6 +121,7 @@ export class LogRecord implements ReadableLogRecord {
this.resource = _sharedState.resource;
this.instrumentationScope = instrumentationScope;
this._logRecordLimits = _sharedState.logRecordLimits;
this._eventName = eventName;
this.setAttributes(attributes);
}

Expand Down Expand Up @@ -166,6 +179,11 @@ export class LogRecord implements ReadableLogRecord {
return this;
}

public setEventName(eventName: string) {
this.eventName = eventName;
return this;
}

public setSeverityNumber(severityNumber: logsAPI.SeverityNumber) {
this.severityNumber = severityNumber;
return this;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ export interface ReadableLogRecord {
readonly severityText?: string;
readonly severityNumber?: SeverityNumber;
readonly body?: LogBody;
readonly eventName?: string;
readonly resource: Resource;
readonly instrumentationScope: InstrumentationScope;
readonly attributes: LogAttributes;
Expand Down
18 changes: 15 additions & 3 deletions experimental/packages/sdk-logs/test/common/LogRecord.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ describe('LogRecord', () => {

const logRecordData: logsAPI.LogRecord = {
timestamp: new Date().getTime(),
eventName: 'test event',
severityNumber: logsAPI.SeverityNumber.DEBUG,
severityText: 'DEBUG',
body: 'this is a body',
Expand All @@ -108,6 +109,7 @@ describe('LogRecord', () => {
logRecord.severityNumber,
logRecordData.severityNumber
);
assert.strictEqual(logRecord.eventName, logRecordData.eventName);
assert.strictEqual(logRecord.severityText, logRecordData.severityText);
assert.strictEqual(logRecord.body, logRecordData.body);
assert.deepStrictEqual(logRecord.attributes, logRecordData.attributes);
Expand Down Expand Up @@ -320,17 +322,20 @@ describe('LogRecord', () => {
const newBody = 'this is a new body';
const newSeverityNumber = logsAPI.SeverityNumber.INFO;
const newSeverityText = 'INFO';
const newName = 'new name';

it('should rewrite directly through the property method', () => {
const { logRecord } = setup(undefined, logRecordData);

logRecord.body = newBody;
logRecord.severityNumber = newSeverityNumber;
logRecord.severityText = newSeverityText;
logRecord.eventName = newName;

assert.deepStrictEqual(logRecord.body, newBody);
assert.deepStrictEqual(logRecord.severityNumber, newSeverityNumber);
assert.deepStrictEqual(logRecord.severityText, newSeverityText);
assert.deepStrictEqual(logRecord.eventName, newName);
});

it('should rewrite using the set method', () => {
Expand All @@ -339,14 +344,16 @@ describe('LogRecord', () => {
logRecord.setBody(newBody);
logRecord.setSeverityNumber(newSeverityNumber);
logRecord.setSeverityText(newSeverityText);
logRecord.setEventName(newName);

assert.deepStrictEqual(logRecord.body, newBody);
assert.deepStrictEqual(logRecord.severityNumber, newSeverityNumber);
assert.deepStrictEqual(logRecord.severityText, newSeverityText);
assert.deepStrictEqual(logRecord.eventName, newName);
});
});

describe('should be read-only(body/severityNumber/severityText) if makeReadonly has been called', () => {
describe('should be read-only(body/severityNumber/severityText/eventName) if makeReadonly has been called', () => {
const currentTime = new Date().getTime();
const logRecordData: logsAPI.LogRecord = {
timestamp: currentTime,
Expand All @@ -361,6 +368,7 @@ describe('LogRecord', () => {
const newBody = 'this is a new body';
const newSeverityNumber = logsAPI.SeverityNumber.INFO;
const newSeverityText = 'INFO';
const newName = 'new name';

it('should not rewrite directly through the property method', () => {
const warnStub = sinon.spy(diag, 'warn');
Expand All @@ -370,8 +378,10 @@ describe('LogRecord', () => {
logRecord.body = newBody;
logRecord.severityNumber = newSeverityNumber;
logRecord.severityText = newSeverityText;
logRecord.eventName = newName;

assert.deepStrictEqual(logRecord.body, logRecordData.body);
assert.deepStrictEqual(logRecord.eventName, logRecordData.eventName);
assert.deepStrictEqual(
logRecord.severityNumber,
logRecordData.severityNumber
Expand All @@ -380,7 +390,7 @@ describe('LogRecord', () => {
logRecord.severityText,
logRecordData.severityText
);
sinon.assert.callCount(warnStub, 3);
sinon.assert.callCount(warnStub, 4);
sinon.assert.alwaysCalledWith(
warnStub,
'Can not execute the operation on emitted log record'
Expand All @@ -396,8 +406,10 @@ describe('LogRecord', () => {
logRecord.setBody(newBody);
logRecord.setSeverityNumber(newSeverityNumber);
logRecord.setSeverityText(newSeverityText);
logRecord.setEventName(newName);

assert.deepStrictEqual(logRecord.body, logRecordData.body);
assert.deepStrictEqual(logRecord.eventName, logRecordData.eventName);
assert.deepStrictEqual(
logRecord.severityNumber,
logRecordData.severityNumber
Expand All @@ -406,7 +418,7 @@ describe('LogRecord', () => {
logRecord.severityText,
logRecordData.severityText
);
sinon.assert.callCount(warnStub, 3);
sinon.assert.callCount(warnStub, 4);
sinon.assert.alwaysCalledWith(
warnStub,
'Can not execute the operation on emitted log record'
Expand Down