Skip to content

Commit a31b38a

Browse files
fuaiyimartinkubadyladan
authored
Logs SDK (#3549)
* feat(sdk-logs): sdk-logs init * feat(sdk-logs): sdk-logs init * feat(sdk-logs): sdk-logs init * feat(sdk-logs): sdk-logs init * feat(sdk-logs): sdk-logs init * feat(sdk-logs): sdk-logs init * feat(sdk-logs): sdk-logs init * fix compile errors * feat(sdk-logs): sdk-logs init * feat(sdk-logs): sdk-logs init * feat(sdk-logs): sdk-logs init * feat(sdk-logs): sdk-logs init * feat(sdk-logs): sdk-logs init * feat(sdk-logs): sdk-logs init * feat(sdk-logs): sdk-logs init * feat(sdk-logs): sdk-logs init * feat(sdk-logs): sdk-logs init * feat(sdk-logs): sdk-logs init * feat(sdk-logs): sdk-logs init * feat(sdk-logs): add browser test config * feat: add test-utils compatible assert.rejects * feat(sdk-logs): fix writing errors in README * feat(sdk-logs): update version to 0.36.1 * feat(sdk-logs): add examples * feat(sdk-logs): fix LogRecord default timestamp to Date.now() * feat(sdk-logs): logRecord support rewrite time/body/severityNumber/newSeverityText * feat(sdk-logs): add logs processor environments * feat(sdk-logs): modify export style * feat(sdk-logs): update version to 0.36.1 * feat(sdk-logs): remove exporter factory * feat(sdk-logs): update CHANGELOG * feat(sdk-logs): change the processing of schemeUrl * feat(sdk-logs): split LoggerProviderConfig and LoggerConfig * feat(sdk-logs): getLogger with default name when name is invalid * feat(sdk-logs): improve the shutdown logic of LoggerProvider * feat(sdk-logs): improve the shutdown logic of LoggerProvider * feat(sdk-logs): make log record read-only after it has been emitted * feat(sdk-logs): logger option support includeTraceContext & LogRecordProcessor onEmit suport context * feat(sdk-logs): update version * feat(sdk-logs): update version * feat(sdk-logs): update logs example with typescript * feat(sdk-logs): update peerDependencies * feat(sdk-logs): peer-api-check support @opentelemetry/api-logs * feat(sdk-logs): update peerDependencies --------- Co-authored-by: Martin Kuba <[email protected]> Co-authored-by: Daniel Dyla <[email protected]>
1 parent 26dfc70 commit a31b38a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+3972
-20
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ logs
88
npm-debug.log*
99
yarn-debug.log*
1010
yarn-error.log*
11+
# Filter Logs singal files
12+
!experimental/examples/logs
1113

1214
# Runtime data
1315
pids

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/
1212
### :rocket: (Enhancement)
1313

1414
* feat(tracing): log span name and IDs when span end is called multiple times [#3716](https://github.com/open-telemetry/opentelemetry-js/pull/3716)
15+
* feat(core): add logs environment variables; add timeout utils method. [#3549](https://github.com/open-telemetry/opentelemetry-js/pull/3549/) @fuaiyi
1516

1617
### :bug: (Bug Fix)
1718

experimental/CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ All notable changes to experimental packages in this project will be documented
1111

1212
### :rocket: (Enhancement)
1313

14+
* feat(api-logs): 1.`LogRecord` fields update: `traceFlags`/`traceId`/`spanId` -> `context`; 2.`Logger` supports configuring `includeTraceContext`; 3.The `onEmit` method of `LogRecordProcessor` supports the `context` field. [#3549](https://github.com/open-telemetry/opentelemetry-js/pull/3549/) @fuaiyi
15+
* feat(sdk-logs): logs sdk implementation. [#3549](https://github.com/open-telemetry/opentelemetry-js/pull/3549/) @fuaiyi
16+
1417
### :bug: (Bug Fix)
1518

1619
* fix(sdk-node): only set DiagConsoleLogger when OTEL_LOG_LEVEL is set [#3693](https://github.com/open-telemetry/opentelemetry-js/pull/3672) @pichlermarc

experimental/examples/logs/README.md

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
## Installation
2+
3+
```sh
4+
# from this directory
5+
npm install
6+
```
7+
8+
## Run the Application
9+
10+
LogRecord
11+
12+
```sh
13+
npm start
14+
```
15+
16+
## Useful links
17+
18+
- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>
19+
- For more information on OpenTelemetry logs, visit: <https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/sdk-logs>
20+
21+
## LICENSE
22+
23+
Apache License 2.0

experimental/examples/logs/index.ts

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
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 { DiagConsoleLogger, DiagLogLevel, diag } from '@opentelemetry/api';
18+
import { logs, SeverityNumber } from '@opentelemetry/api-logs';
19+
import {
20+
LoggerProvider,
21+
ConsoleLogRecordExporter,
22+
SimpleLogRecordProcessor,
23+
} from '@opentelemetry/sdk-logs';
24+
25+
// Optional and only needed to see the internal diagnostic logging (during development)
26+
diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.DEBUG);
27+
28+
const loggerProvider = new LoggerProvider();
29+
loggerProvider.addLogRecordProcessor(
30+
new SimpleLogRecordProcessor(new ConsoleLogRecordExporter())
31+
);
32+
33+
logs.setGlobalLoggerProvider(loggerProvider);
34+
35+
const logger = logs.getLogger('example', '1.0.0');
36+
37+
// emit a log record
38+
logger.emit({
39+
severityNumber: SeverityNumber.INFO,
40+
severityText: 'INFO',
41+
body: 'this is a log record body',
42+
attributes: { 'log.type': 'custom' },
43+
});
+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"name": "logs-example",
3+
"version": "0.1.0",
4+
"private": true,
5+
"scripts": {
6+
"start": "ts-node index.ts"
7+
},
8+
"dependencies": {
9+
"@opentelemetry/api": "^1.4.1",
10+
"@opentelemetry/api-logs": "^0.37.0",
11+
"@opentelemetry/sdk-logs": "^0.37.0"
12+
},
13+
"devDependencies": {
14+
"ts-node": "^10.9.1",
15+
"@types/node": "18.6.5"
16+
}
17+
}
+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"extends": "../../../tsconfig.base.json",
3+
"compilerOptions": {
4+
"outDir": "build",
5+
"rootDir": "."
6+
},
7+
"include": ["./index.ts"],
8+
"references": [
9+
{
10+
"path": "../../../api"
11+
},
12+
{
13+
"path": "../../../experimental/packages/api-logs"
14+
},
15+
{
16+
"path": "../../../experimental/packages/sdk-logs"
17+
}
18+
]
19+
}

experimental/packages/api-logs/src/NoopLogger.ts

+2
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,5 @@ import { LogRecord } from './types/LogRecord';
2020
export class NoopLogger implements Logger {
2121
emit(_logRecord: LogRecord): void {}
2222
}
23+
24+
export const NOOP_LOGGER = new NoopLogger();

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

+2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ export * from './types/Logger';
1818
export * from './types/LoggerProvider';
1919
export * from './types/LogRecord';
2020
export * from './types/LoggerOptions';
21+
export * from './NoopLogger';
22+
export * from './NoopLoggerProvider';
2123

2224
import { LogsAPI } from './api/logs';
2325
export const logs = LogsAPI.getInstance();

experimental/packages/api-logs/src/types/LogRecord.ts

+3-13
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { Attributes } from '@opentelemetry/api';
17+
import { Attributes, Context } from '@opentelemetry/api';
1818

1919
export enum SeverityNumber {
2020
UNSPECIFIED = 0,
@@ -71,17 +71,7 @@ export interface LogRecord {
7171
attributes?: Attributes;
7272

7373
/**
74-
* 8 least significant bits are the trace flags as defined in W3C Trace Context specification.
74+
* The Context associated with the LogRecord.
7575
*/
76-
traceFlags?: number;
77-
78-
/**
79-
* A unique identifier for a trace.
80-
*/
81-
traceId?: string;
82-
83-
/**
84-
* A unique identifier for a span within a trace.
85-
*/
86-
spanId?: string;
76+
context?: Context;
8777
}

experimental/packages/api-logs/src/types/LoggerOptions.ts

+6
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,10 @@ export interface LoggerOptions {
2727
* The instrumentation scope attributes to associate with emitted telemetry
2828
*/
2929
scopeAttributes?: Attributes;
30+
31+
/**
32+
* Specifies whether the Trace Context should automatically be passed on to the LogRecords emitted by the Logger.
33+
* @default true
34+
*/
35+
includeTraceContext?: boolean;
3036
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
build
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
module.exports = {
2+
env: {
3+
mocha: true,
4+
node: true,
5+
},
6+
...require('../../../eslint.config.js'),
7+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
/bin
2+
/coverage
3+
/doc
4+
/test

0 commit comments

Comments
 (0)