10000 feat(sdk-logs)!: Changed `LogRecord` to be an interface (#5749) · open-telemetry/opentelemetry-js@ec17ce4 · GitHub
[go: up one dir, main page]

Skip to content

Commit ec17ce4

Browse files
feat(sdk-logs)!: Changed LogRecord to be an interface (#5749)
Co-authored-by: Marc Pichler <marc.pichler@dynatrace.com>
1 parent f2cfd13 commit ec17ce4

14 files changed

+122
-27
lines changed

experimental/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ For notes on migrating to 2.x / 0.200.x see [the upgrade guide](doc/upgrade-to-2
1616

1717
### :house: Internal
1818

19+
* feat(sdk-logs)!: Changed `LogRecord` class to be an interface [#5749](https://github.com/open-telemetry/opentelemetry-js/pull/5749) @svetlanabrennan
20+
* user-facing: `LogRecord` class is now not exported anymore. A newly exported interface `SdkLogRecord` is used in its place.
1921
* refactor: Removed `api-events` and `sdk-events` [#5737](https://github.com/open-telemetry/opentelemetry-js/pull/5737) @svetlanabrennan
2022
* chore: Regenerated certs [#5752](https://github.com/open-telemetry/opentelemetry-js/pull/5752) @svetlanabrennan
2123

experimental/packages/sdk-logs/src/LogRecord.ts renamed to experimental/packages/sdk-logs/src/LogRecordImpl.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import type { LogRecordLimits } from './types';
2929
import { AnyValue, LogAttributes, LogBody } from '@opentelemetry/api-logs';
3030
import { LoggerProviderSharedState } from './internal/LoggerProviderSharedState';
3131

32-
export class LogRecord implements ReadableLogRecord {
32+
export class LogRecordImpl implements ReadableLogRecord {
3333
readonly hrTime: api.HrTime;
3434
readonly hrTimeObserved: api.HrTime;
3535
readonly spanContext?: api.SpanContext;

experimental/packages/sdk-logs/src/LogRecordProcessor.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
import { Context } from '@opentelemetry/api';
1818

19-
import { LogRecord } from './LogRecord';
19+
import { SdkLogRecord } from './export/SdkLogRecord';
2020

2121
export interface LogRecordProcessor {
2222
/**
@@ -29,7 +29,7 @@ export interface LogRecordProcessor {
2929
* @param logRecord the ReadWriteLogRecord that just emitted.
3030
* @param context the current Context, or an empty Context if the Logger was obtained with include_trace_context=false
3131
*/
32-
onEmit(logRecord: LogRecord, context?: Context): void;
32+
onEmit(logRecord: SdkLogRecord, context?: Context): void;
3333

3434
/**
3535
* Shuts down the processor. Called when SDK is shut down. This is an

experimental/packages/sdk-logs/src/Logger.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import type * as logsAPI from '@opentelemetry/api-logs';
1818
import type { InstrumentationScope } from '@opentelemetry/core';
1919
import { context } from '@opentelemetry/api';
2020

21-
import { LogRecord } from './LogRecord';
21+
import { LogRecordImpl } from './LogRecordImpl';
2222
import { LoggerProviderSharedState } from './internal/LoggerProviderSharedState';
2323

2424
export class Logger implements logsAPI.Logger {
@@ -34,7 +34,7 @@ export class Logger implements logsAPI.Logger {
3434
* the LogRecords it emits MUST automatically include the Trace Context from the active Context,
3535
* if Context has not been explicitly set.
3636
*/
37-
const logRecordInstance = new LogRecord(
37+
const logRecordInstance = new LogRecordImpl(
3838
this._sharedState,
3939
this.instrumentationScope,
4040
{

experimental/packages/sdk-logs/src/MultiLogRecordProcessor.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import { callWithTimeout } from '@opentelemetry/core';
1818
import type { Context } from '@opentelemetry/api';
1919
import type { LogRecordProcessor } from './LogRecordProcessor';
20-
import type { LogRecord } from './LogRecord';
20+
import type { SdkLogRecord } from './export/SdkLogRecord';
2121

2222
/**
2323
* Implementation of the {@link LogRecordProcessor} that simply forwards all
@@ -38,7 +38,7 @@ export class MultiLogRecordProcessor implements LogRecordProcessor {
3838
);
3939
}
4040

41-
public onEmit(logRecord: LogRecord, context?: Context): void {
41+
public onEmit(logRecord: SdkLogRecord, context?: Context): void {
4242
this.processors.forEach(processors =>
4343
processors.onEmit(logRecord, context)
4444
);

experimental/packages/sdk-logs/src/export/BatchLogRecordProcessorBase.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import {
2626
} from '@opentelemetry/core';
2727

2828
import type { BufferConfig } from '../types';
29-
import type { LogRecord } from '../LogRecord';
29+
import type { SdkLogRecord } from './SdkLogRecord';
3030
import type { LogRecordExporter } from './LogRecordExporter';
3131
import type { LogRecordProcessor } from '../LogRecordP 8090 rocessor';
3232

@@ -38,7 +38,7 @@ export abstract class BatchLogRecordProcessorBase<T extends BufferConfig>
3838
private readonly _scheduledDelayMillis: number;
3939
private readonly _exportTimeoutMillis: number;
4040

41-
private _finishedLogRecords: LogRecord[] = [];
41+
private _finishedLogRecords: SdkLogRecord[] = [];
4242
private _timer: NodeJS.Timeout | undefined;
4343
private _shutdownOnce: BindOnceFuture<void>;
4444

@@ -73,7 +73,7 @@ export abstract class BatchLogRecordProcessorBase<T extends BufferConfig>
7373
}
7474
}
7575

76-
public onEmit(logRecord: LogRecord): void {
76+
public onEmit(logRecord: SdkLogRecord): void {
7777
if (this._shutdownOnce.isCalled) {
7878
return;
7979
}
@@ -98,7 +98,7 @@ export abstract class BatchLogRecordProcessorBase<T extends BufferConfig>
9898
}
9999

100100
/** Add a LogRecord in the buffer. */
101-
private _addToBuffer(logRecord: LogRecord) {
101+
private _addToBuffer(logRecord: SdkLogRecord) {
102102
if (this._finishedLogRecords.length >= this._maxQueueSize) {
103103
return;
104104
}
@@ -171,7 +171,7 @@ export abstract class BatchLogRecordProcessorBase<T extends BufferConfig>
171171
}
172172
}
173173

174-
private _export(logRecords: LogRecord[]): Promise<void> {
174+
private _export(logRecords: SdkLogRecord[]): Promise<void> {
175175
const doExport = () =>
176176
internal
177177
._export(this._exporter, logRecords)
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
import type { HrTime, SpanContext } from '@opentelemetry/api';
18+
import { InstrumentationScope } from '@opentelemetry/core';
19+
import type {
20+
AnyValue,
21+
LogBody,
22+
LogAttributes,
23+
SeverityNumber,
24+
} from '@opentelemetry/api-logs';
25+
import type { Resource } from '@opentelemetry/resources';
26+
27+
/**
28+
* A recording of a event. Typically the record includes a timestamp indicating when the
29+
* event happened as well as other data that describes what happened, where it happened, etc.
30+
*
31+
* @remarks
32+
* This interface is **not intended to be implemented by users**.
33+
* To produce logs, use {@link Logger#emit}. To consume logs, implement {@link LogRecordProcessor#onEmit}.
34+
* SdkLogRecord instances are created and managed by the SDK.
35+
*/
36+
export interface SdkLogRecord {
37+
readonly hrTime: HrTime;
38+
readonly hrTimeObserved: HrTime;
39+
readonly spanContext?: SpanContext;
40+
readonly resource: Resource;
41+
readonly instrumentationScope: InstrumentationScope;
42+
readonly attributes: LogAttributes;
43+
severityText?: string;
44+
severityNumber?: SeverityNumber;
45+
body?: LogBody;
46+
eventName?: string;
47+
droppedAttributesCount: number;
48+
49+
/**
50+
* Sets a single attribute on the log record.
51+
* @param key The attribute key.
52+
* @param value The attribute value.
53+
* @returns The updated SdkLogRecord.
54+
*/
55+
setAttribute(key: string, value?: AnyValue): SdkLogRecord;
56+
57+
/**
58+
* Sets multiple attributes on the log record.
59+
* @param attributes The attributes to set.
60+
* @returns The updated SdkLogRecord.
61+
*/
62+
setAttributes(attributes: LogAttributes): SdkLogRecord;
63+
64+
/**
65+
* Sets the body of the log record.
66+
* @param body The log body.
67+
* @returns The updated SdkLogRecord.
68+
*/
69+
setBody(body: LogBody): SdkLogRecord;
70+
71+
/**
72+
* Sets the event name for the log record.
73+
* @param eventName The event name.
74+
* @returns The updated SdkLogRecord.
75+
*/
76+
setEventName(eventName: string): SdkLogRecord;
77+
78+
/**
79+
* Sets the severity number for the log record.
80+
* @param severityNumber The severity number.
81+
* @returns The updated SdkLogRecord.
82+
*/
83+
setSeverityNumber(severityNumber: SeverityNumber): SdkLogRecord;
84+
85+
/**
86+
* Sets the severity text (log level) for the log record.
87+
* @param severityText The severity text.
88+
* @returns The updated SdkLogRecord.
89+
*/
90+
setSeverityText(severityText: string): SdkLogRecord;
91+
}

experimental/packages/sdk-logs/src/export/SimpleLogRecordProcessor.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import {
2323
} from '@opentelemetry/core';
2424
import type { LogRecordExporter } from './LogRecordExporter';
2525
import type { LogRecordProcessor } from '../LogRecordProcessor';
26-
import type { LogRecord } from './../LogRecord';
26+
import type { SdkLogRecord } from './SdkLogRecord';
2727

2828
export class SimpleLogRecordProcessor implements LogRecordProcessor {
2929
private _shutdownOnce: BindOnceFuture<void>;
@@ -34,7 +34,7 @@ export class SimpleLogRecordProcessor implements LogRecordProcessor {
3434
this._unresolvedExports = new Set<Promise<void>>();
3535
}
3636

37-
public onEmit(logRecord: LogRecord): void {
37+
public onEmit(logRecord: SdkLogRecord): void {
3838
if (this._shutdownOnce.isCalled) {
3939
return;
4040
}

experimental/packages/sdk-logs/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export type {
2121
BatchLogRecordProcessorBrowserConfig,
2222
} from './types';
2323
export { LoggerProvider } from './LoggerProvider';
24-
export { LogRecord } from './LogRecord';
24+
export type { SdkLogRecord } from './export/SdkLogRecord';
2525
export type { LogRecordProcessor } from './LogRecordProcessor';
2626
export type { ReadableLogRecord } from './export/ReadableLogRecord';
2727
export { NoopLogRecordProcessor } from './export/NoopLogRecordProcessor';

experimental/packages/sdk-logs/test/common/LogRecord.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,12 @@ import { defaultResource } from '@opentelemetry/resources';
3232
import {
3333
LogRecordLimits,
3434
LogRecordProcessor,
35-
LogRecord,
3635
LoggerProvider,
3736
} from './../../src';
3837
import { invalidAttributes, validAttributes } from './utils';
3938
import { LoggerProviderSharedState } from '../../src/internal/LoggerProviderSharedState';
4039
import { reconfigureLimits } from '../../src/config';
40+
import { LogRecordImpl } from '../../src/LogRecordImpl';
4141

4242
const performanceTimeOrigin: HrTime = [1, 1];
4343

@@ -54,7 +54,7 @@ const setup = (logRecordLimits?: LogRecordLimits, data?: logsAPI.LogRecord) => {
5454
reconfigureLimits(logRecordLimits ?? {}),
5555
[]
5656
);
57-
const logRecord = new LogRecord(
57+
const logRecord = new LogRecordImpl(
5858
sharedState,
5959
instrumentationScope,
6060
data ?? {}
@@ -66,7 +66,7 @@ describe('LogRecord', () => {
6666
describe('constructor', () => {
6767
it('should create an instance', () => {
6868
const { logRecord } = setup();
69-
assert.ok(logRecord instanceof LogRecord);
69+
assert.ok(logRecord instanceof LogRecordImpl);
7070
});
7171

7272
it('should 2352 have a default timestamp', () => {

0 commit comments

Comments
 (0)
0