Skip to content

Commit baf0fee

Browse files
SimenBdyladan
andauthored
feat(api): Optionally suppress warning about logger being overwritten (#3366)
Co-authored-by: Daniel Dyla <[email protected]>
1 parent c6ff50e commit baf0fee

File tree

3 files changed

+56
-15
lines changed

3 files changed

+56
-15
lines changed

api/CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22

33
All notable changes to this project will be documented in this file.
44

5+
## Unreleased
6+
7+
### Features
8+
9+
* Optionally suppress warning about logger being overwritten ([#3366](https://www.github.com/open-telemetry/opentelemetry-js-api/pull/3366))
10+
511
## [1.2.0](https://www.github.com/open-telemetry/opentelemetry-js-api/compare/v1.1.0...v1.2.0) (2022-08-09)
612

713
### Features

api/src/api/diag.ts

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
ComponentLoggerOptions,
2121
DiagLogFunction,
2222
DiagLogger,
23+
DiagLoggerApi,
2324
DiagLogLevel,
2425
} from '../diag/types';
2526
import {
@@ -34,7 +35,7 @@ const API_NAME = 'diag';
3435
* Singleton object which represents the entry point to the OpenTelemetry internal
3536
* diagnostic API
3637
*/
37-
export class DiagAPI implements DiagLogger {
38+
export class DiagAPI implements DiagLogger, DiagLoggerApi {
3839
private static _instance?: DiagAPI;
3940

4041
/** Get the singleton instance of the DiagAPI API */
@@ -65,9 +66,9 @@ export class DiagAPI implements DiagLogger {
6566

6667
// DiagAPI specific functions
6768

68-
self.setLogger = (
69-
logger: DiagLogger,
70-
logLevel: DiagLogLevel = DiagLogLevel.INFO
69+
const setLogger: DiagLoggerApi['setLogger'] = (
70+
logger,
71+
optionsOrLogLevel = { logLevel: DiagLogLevel.INFO },
7172
) => {
7273
if (logger === self) {
7374
// There isn't much we can do here.
@@ -80,10 +81,16 @@ export class DiagAPI implements DiagLogger {
8081
return false;
8182
}
8283

84+
if (typeof optionsOrLogLevel === 'number') {
85+
optionsOrLogLevel = {
86+
logLevel: optionsOrLogLevel,
87+
};
88+
}
89+
8390
const oldLogger = getGlobal('diag');
84-
const newLogger = createLogLevelDiagLogger(logLevel, logger);
91+
const newLogger = createLogLevelDiagLogger(optionsOrLogLevel.logLevel ?? DiagLogLevel.INFO, logger);
8592
// There already is an logger registered. We'll let it know before overwriting it.
86-
if (oldLogger) {
93+
if (oldLogger && !optionsOrLogLevel.suppressOverrideMessage) {
8794
const stack = new Error().stack ?? '<failed to generate stacktrace>';
8895
oldLogger.warn(`Current logger will be overwritten from ${stack}`);
8996
newLogger.warn(
@@ -94,6 +101,8 @@ export class DiagAPI implements DiagLogger {
94101
return registerGlobal('diag', newLogger, self, true);
95102
};
96103

104+
self.setLogger = setLogger;
105+
97106
self.disable = () => {
98107
unregisterGlobal(API_NAME, self);
99108
};
@@ -109,15 +118,7 @@ export class DiagAPI implements DiagLogger {
109118
self.error = _logProxy('error');
110119
}
111120

112-
/**
113-
* Set the global DiagLogger and DiagLogLevel.
114-
* If a global diag logger is already set, this will override it.
115-
*
116-
* @param logger - [Optional] The DiagLogger instance to set as the default logger.
117-
* @param logLevel - [Optional] The DiagLogLevel used to filter logs sent to the logger. If not provided it will default to INFO.
118-
* @returns true if the logger was successfully registered, else false
119-
*/
120-
public setLogger!: (logger: DiagLogger, logLevel?: DiagLogLevel) => boolean;
121+
public setLogger!: DiagLoggerApi['setLogger'];
121122
/**
122123
*
123124
*/

api/src/diag/types.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,3 +96,37 @@ export enum DiagLogLevel {
9696
export interface ComponentLoggerOptions {
9797
namespace: string;
9898
}
99+
100+
export interface LoggerOptions {
101+
/**
102+
* The {@link DiagLogLevel} used to filter logs sent to the logger.
103+
*
104+
* @defaultValue DiagLogLevel.INFO
105+
*/
106+
logLevel?: DiagLogLevel;
107+
108+
/**
109+
* Setting this value to `true` will suppress the warning message normally emitted when registering a logger when another logger is already registered.
110+
*/
111+
suppressOverrideMessage?: boolean;
112+
}
113+
114+
export interface DiagLoggerApi {
115+
/**
116+
* Set the global DiagLogger and DiagLogLevel.
117+
* If a global diag logger is already set, this will override it.
118+
*
119+
* @param logger - The {@link DiagLogger} instance to set as the default logger.
120+
* @param options - A {@link LoggerOptions} object. If not provided, default values will be set.
121+
* @returns `true` if the logger was successfully registered, else `false`
122+
*/
123+
setLogger(logger: DiagLogger, options?: LoggerOptions): boolean;
124+
125+
/**
126+
*
127+
* @param logger - The {@link DiagLogger} instance to set as the default logger.
128+
* @param logLevel - The {@link DiagLogLevel} used to filter logs sent to the logger. If not provided it will default to {@link DiagLogLevel.INFO}.
129+
* @returns `true` if the logger was successfully registered, else `false`
130+
*/
131+
setLogger(logger: DiagLogger, logLevel?: DiagLogLevel): boolean;
132+
}

0 commit comments

Comments
 (0)