2021-03-23 08:46:01 +01:00
|
|
|
import { configure, getLogger, levels } from 'log4js';
|
2016-10-26 10:43:11 +02:00
|
|
|
|
2021-03-23 08:46:01 +01:00
|
|
|
export type LogProvider = (category?: string) => Logger;
|
2014-10-20 13:03:43 +02:00
|
|
|
|
2021-03-23 08:46:01 +01:00
|
|
|
export interface Logger {
|
|
|
|
debug(message: any, ...args: any[]): void;
|
|
|
|
info(message: any, ...args: any[]): void;
|
|
|
|
warn(message: any, ...args: any[]): void;
|
|
|
|
error(message: any, ...args: any[]): void;
|
|
|
|
fatal(message: any, ...args: any[]): void;
|
|
|
|
}
|
|
|
|
|
|
|
|
function getDefaultLogProvider(): LogProvider {
|
|
|
|
let level: string;
|
2017-08-04 16:03:15 +02:00
|
|
|
if (process.env.NODE_ENV === 'production') {
|
2021-03-23 08:46:01 +01:00
|
|
|
level = levels.ERROR.levelStr;
|
2017-08-04 16:03:15 +02:00
|
|
|
} else if (process.env.NODE_ENV === 'test') {
|
2021-03-23 08:46:01 +01:00
|
|
|
level = levels.FATAL.levelStr;
|
2017-08-04 16:03:15 +02:00
|
|
|
} else {
|
2021-03-23 08:46:01 +01:00
|
|
|
level = levels.DEBUG.levelStr;
|
2017-08-04 16:03:15 +02:00
|
|
|
}
|
2015-03-10 16:30:56 +01:00
|
|
|
|
2021-03-23 08:46:01 +01:00
|
|
|
configure({
|
2017-11-11 11:13:34 +01:00
|
|
|
appenders: {
|
|
|
|
console: { type: 'console' },
|
|
|
|
},
|
|
|
|
categories: {
|
|
|
|
default: { appenders: ['console'], level },
|
2017-08-04 16:03:15 +02:00
|
|
|
},
|
|
|
|
});
|
|
|
|
|
2021-03-23 08:46:01 +01:00
|
|
|
return getLogger;
|
2017-08-04 16:03:15 +02:00
|
|
|
}
|
2017-08-05 15:38:55 +02:00
|
|
|
|
2021-03-23 08:46:01 +01:00
|
|
|
function validate(isValid: boolean, msg: string) {
|
2017-08-05 15:38:55 +02:00
|
|
|
if (!isValid) {
|
|
|
|
throw new TypeError(msg);
|
|
|
|
}
|
|
|
|
}
|
2020-04-14 22:29:11 +02:00
|
|
|
|
2021-03-23 08:46:01 +01:00
|
|
|
export function validateLogProvider(provider: LogProvider): void {
|
2020-04-14 22:29:11 +02:00
|
|
|
validate(typeof provider === 'function', 'Provider needs to be a function');
|
|
|
|
|
|
|
|
const logger = provider('unleash:logger');
|
|
|
|
validate(typeof logger.debug === 'function', 'Logger must implement debug');
|
|
|
|
validate(typeof logger.info === 'function', 'Logger must implement info');
|
|
|
|
validate(typeof logger.warn === 'function', 'Logger must implement warn');
|
|
|
|
validate(typeof logger.error === 'function', 'Logger must implement error');
|
|
|
|
}
|
|
|
|
|
2021-03-23 08:46:01 +01:00
|
|
|
// Deprecated (TODO: remove this in v4)
|
|
|
|
let loggerProvider = getDefaultLogProvider();
|
|
|
|
export const defaultLogProvider = loggerProvider;
|
2020-04-14 22:29:11 +02:00
|
|
|
|
2021-03-23 08:46:01 +01:00
|
|
|
export function setLoggerProvider(provider: LogProvider): void {
|
2020-04-14 22:29:11 +02:00
|
|
|
validateLogProvider(provider);
|
|
|
|
|
|
|
|
loggerProvider = provider;
|
|
|
|
const logger = provider('unleash:logger');
|
2021-02-25 22:27:11 +01:00
|
|
|
logger.info(`Your way of configuring a logProvider is deprecated.
|
|
|
|
See https://docs.getunleash.io/docs/deploy/configuring_unleash for details`);
|
2021-03-23 08:46:01 +01:00
|
|
|
}
|