1
0
mirror of https://github.com/Unleash/unleash.git synced 2024-10-18 20:09:08 +02:00
unleash.unleash/src/lib/logger.ts
2021-03-23 08:46:01 +01:00

63 lines
2.0 KiB
TypeScript

import { configure, getLogger, levels } from 'log4js';
export type LogProvider = (category?: string) => Logger;
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;
if (process.env.NODE_ENV === 'production') {
level = levels.ERROR.levelStr;
} else if (process.env.NODE_ENV === 'test') {
level = levels.FATAL.levelStr;
} else {
level = levels.DEBUG.levelStr;
}
configure({
appenders: {
console: { type: 'console' },
},
categories: {
default: { appenders: ['console'], level },
},
});
return getLogger;
}
function validate(isValid: boolean, msg: string) {
if (!isValid) {
throw new TypeError(msg);
}
}
export function validateLogProvider(provider: LogProvider): void {
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');
}
// Deprecated (TODO: remove this in v4)
let loggerProvider = getDefaultLogProvider();
export const defaultLogProvider = loggerProvider;
export function setLoggerProvider(provider: LogProvider): void {
validateLogProvider(provider);
loggerProvider = provider;
const logger = provider('unleash:logger');
logger.info(`Your way of configuring a logProvider is deprecated.
See https://docs.getunleash.io/docs/deploy/configuring_unleash for details`);
}