ydb-sdk
Version:
Node.js bindings for working with YDB API over gRPC
108 lines (107 loc) • 4.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SimpleLogger = exports.setMockConsole = exports.LogLevel = exports.DEFAULT_LEVEL = exports.DEFAULT_ENV_KEY = void 0;
exports.DEFAULT_ENV_KEY = 'YDB_LOG_LEVEL';
exports.DEFAULT_LEVEL = 'info';
var LogLevel;
(function (LogLevel) {
LogLevel["none"] = "none";
LogLevel["fatal"] = "fatal";
LogLevel["error"] = "error";
LogLevel["warn"] = "warn";
LogLevel["info"] = "info";
LogLevel["debug"] = "debug";
LogLevel["trace"] = "trace";
})(LogLevel || (exports.LogLevel = LogLevel = {}));
/**
* For unit tests purposes.
*/
let consoleOrMock = console;
/**
* **Only for unit tests purposes**.
*/
const setMockConsole = (mockConsole = console) => {
consoleOrMock = mockConsole;
};
exports.setMockConsole = setMockConsole;
const silentLogFn = () => {
};
const simpleLogFnBuilder = (level, detailedStackTrace) => {
const LEVEL = level.toUpperCase();
// eslint-disable-next-line @typescript-eslint/no-use-before-define
if (level === LogLevel.fatal) {
// eslint-disable-next-line @typescript-eslint/no-use-before-define,no-param-reassign
level = LogLevel.error;
}
return function log(objOrMsg, ...args) {
const prefix = [];
if (this.showTimestamp) {
prefix.push(new Date().toISOString());
}
if (this.showLevel) {
prefix.push(LEVEL);
}
if (this.prefix) {
prefix.push(this.prefix);
}
const prefixStr = prefix.length === 0 ? '' : `[${prefix.join(' ')}] `;
if (typeof objOrMsg === 'object') {
if (typeof args[0] === 'string') {
// @ts-ignore
// eslint-disable-next-line @typescript-eslint/no-use-before-define
consoleOrMock[detailedStackTrace ? level : 'info'](`${prefixStr}%o ${args[0]}`, ...args.splice(1), objOrMsg);
}
else {
// @ts-ignore
// eslint-disable-next-line @typescript-eslint/no-use-before-define
consoleOrMock[detailedStackTrace ? level : 'info'](prefix.length > 0 ? `${prefixStr}%o` : '%o', objOrMsg);
}
}
else {
// @ts-ignore
// eslint-disable-next-line @typescript-eslint/no-use-before-define
consoleOrMock[detailedStackTrace ? level : 'info'](`${prefixStr}${objOrMsg}`, ...args);
}
};
};
/**
* The simplest logger class, with a minimal set of logging methods and the most simple output to the console.
*/
class SimpleLogger {
constructor(options = {}) {
var _a;
this.fatal = silentLogFn;
this.error = silentLogFn;
this.warn = silentLogFn;
this.info = silentLogFn;
this.debug = silentLogFn;
this.trace = silentLogFn;
let { level,
// eslint-disable-next-line prefer-const
prefix,
// eslint-disable-next-line prefer-const
showTimestamp,
// eslint-disable-next-line prefer-const
showLevel, } = options;
if (prefix)
this.prefix = prefix;
this.showTimestamp = showTimestamp !== null && showTimestamp !== void 0 ? showTimestamp : true;
this.showLevel = showLevel !== null && showLevel !== void 0 ? showLevel : true;
const envKey = (_a = options.envKey) !== null && _a !== void 0 ? _a : exports.DEFAULT_ENV_KEY;
const envLevel = process.env[envKey];
// @ts-ignore
level = envLevel === undefined ? level !== null && level !== void 0 ? level : LogLevel[exports.DEFAULT_LEVEL] : LogLevel[envLevel];
const detailedTraceStack = ['1', 'true'].indexOf(typeof process.env.YDB_DETAILED_TRACE_STACK === 'string'
? process.env.YDB_DETAILED_TRACE_STACK.toLowerCase()
: 'false') !== -1;
for (const lvl of Object.values(LogLevel)) {
if (lvl === LogLevel.none)
continue;
// @ts-ignore
this[lvl] = simpleLogFnBuilder(lvl, detailedTraceStack);
if (lvl === level)
break;
}
}
}
exports.SimpleLogger = SimpleLogger;