Skip to content

Commit 26d12ef

Browse files
Tests
1 parent c9109c2 commit 26d12ef

File tree

5 files changed

+34
-6
lines changed

5 files changed

+34
-6
lines changed

src/logger/__tests__/sdkLogger.mock.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,14 @@ export const loggerMock = {
1414
this.debug.mockClear();
1515
this.info.mockClear();
1616
this.setLogLevel.mockClear();
17+
this.setLogger.mockClear();
1718
}
1819
};
1920

2021
export function getLoggerLogLevel(logger: any): SplitIO.LogLevel | undefined {
2122
if (logger) return logger.options.logLevel;
2223
}
24+
25+
export function getCustomLogger(logger: any): SplitIO.Logger | undefined {
26+
if (logger) return logger.logger;
27+
}

src/logger/__tests__/sdkLogger.spec.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { createLoggerAPI } from '../sdkLogger';
22
import { Logger, LogLevels } from '../index';
3-
import { getLoggerLogLevel } from './sdkLogger.mock';
3+
import { getLoggerLogLevel, getCustomLogger } from './sdkLogger.mock';
44

55
test('LoggerAPI / methods and props', () => {
66
// creates a LoggerAPI instance
@@ -26,4 +26,12 @@ test('LoggerAPI / methods and props', () => {
2626

2727
expect(API.LogLevel).toEqual(LogLevels); // API object should have LogLevel prop including all available levels.
2828

29+
// valid custom logger
30+
API.setLogger(console);
31+
expect(getCustomLogger(logger)).toBe(console);
32+
33+
// invalid custom logger
34+
// @ts-expect-error
35+
API.setLogger({});
36+
expect(getCustomLogger(logger)).toBeUndefined();
2937
});

src/logger/index.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,15 @@ export class Logger implements ILogger {
6363
}
6464

6565
setLogger(logger?: SplitIO.Logger) {
66-
if (!logger || isLogger(logger)) {
67-
this.logger = logger;
68-
} else {
69-
this._log(LogLevels.ERROR, 'Invalid `logger` instance. It must be an object with `debug`, `info`, `warn` and `error` methods. Defaulting to `console.log`');
70-
this.logger = undefined;
66+
if (logger) {
67+
if (isLogger(logger)) {
68+
this.logger = logger;
69+
// If custom logger is set, all logs are either enabled or disabled
70+
if (this.logLevel !== LogLevelIndexes.NONE) this.setLogLevel(LogLevels.DEBUG);
71+
} else {
72+
this._log(LogLevels.ERROR, 'Invalid `logger` instance. It must be an object with `debug`, `info`, `warn` and `error` methods. Defaulting to `console.log`');
73+
this.logger = undefined;
74+
}
7175
}
7276
}
7377

src/utils/settingsValidation/logger/__tests__/index.spec.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,13 @@ describe('logger validators', () => {
5656
expect(getLoggerLogLevel(validateLogger({ debug: 'ERROR' }))).toBe('ERROR');
5757
expect(getLoggerLogLevel(validateLogger({ debug: 'NONE' }))).toBe('NONE');
5858

59+
// When combined with the `logger` option, any log level other than `NONE` (false) will be set to `DEBUG` (true)
60+
expect(getLoggerLogLevel(validateLogger({ debug: 'DEBUG', logger: loggerMock }))).toBe('DEBUG');
61+
expect(getLoggerLogLevel(validateLogger({ debug: 'INFO', logger: loggerMock }))).toBe('DEBUG');
62+
expect(getLoggerLogLevel(validateLogger({ debug: 'WARN', logger: loggerMock }))).toBe('DEBUG');
63+
expect(getLoggerLogLevel(validateLogger({ debug: 'ERROR', logger: loggerMock }))).toBe('DEBUG');
64+
expect(getLoggerLogLevel(validateLogger({ debug: 'NONE', logger: loggerMock }))).toBe('NONE');
65+
5966
expect(consoleLogSpy).not.toBeCalled();
6067
});
6168

types/splitio.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,8 @@ interface IPluggableSharedSettings {
145145
* config.debug = ErrorLogger()
146146
* ```
147147
*
148+
* When combined with the `logger` option, any log level other than `NONE` (false) will be set to `DEBUG` (true), delegating log level control to the custom logger.
149+
*
148150
* @defaultValue `false`
149151
*/
150152
debug?: boolean | SplitIO.LogLevel | SplitIO.ILogger;
@@ -168,6 +170,8 @@ interface INonPluggableSharedSettings {
168170
* config.debug = 'WARN'
169171
* ```
170172
*
173+
* When combined with the `logger` option, any log level other than `NONE` (false) will be set to `DEBUG` (true), delegating log level control to the custom logger.
174+
*
171175
* @defaultValue `false`
172176
*/
173177
debug?: boolean | SplitIO.LogLevel;

0 commit comments

Comments
 (0)