UNPKG

@boost/log

Version:

Lightweight level based logging system.

94 lines (91 loc) 4.1 kB
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); } function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } import os from 'node:os'; import util from 'node:util'; import { Contract } from '@boost/common'; import { env } from '@boost/internal'; import { LOG_LEVELS, DEFAULT_LABELS } from './constants.mjs'; import { debug } from './debug.mjs'; import { Transport } from './Transport.mjs'; import { ConsoleTransport } from './transports/ConsoleTransport.mjs'; class Logger extends Contract { constructor(options) { super(options); this.silent = false; const defaultLevel = env('LOG_DEFAULT_LEVEL'); const maxLevel = env('LOG_MAX_LEVEL'); debug('New logger "%s" created: %s %s', this.options.name, defaultLevel ? `${defaultLevel} level` : 'all levels', maxLevel ? `(max ${maxLevel})` : ''); } blueprint(schemas) { const array = schemas.array, instance = schemas.instance, object = schemas.object, string = schemas.string; return { labels: object().of(string()), metadata: object(), name: string().required().notEmpty(), transports: array([new ConsoleTransport()]).of(instance().of(Transport).notNullable()) }; } /** * Disable all logger messages from logging to the console. */ disable() { debug('Logger %s disabled', this.options.name); this.silent = true; } /** * Enable all logger messages to log the console. */ enable() { debug('Logger %s enabled', this.options.name); this.silent = false; } isAllowed(level, maxLevel) { if (!maxLevel) { return true; } for (const currentLevel of LOG_LEVELS) { if (currentLevel === level) { return true; } if (currentLevel === maxLevel) { break; } } return false; } log(options) { const _options$args = options.args, args = _options$args === void 0 ? [] : _options$args, level = options.level, message = options.message, _options$metadata = options.metadata, metadata = _options$metadata === void 0 ? {} : _options$metadata; const logLevel = level ?? env('LOG_DEFAULT_LEVEL') ?? 'log'; if (this.silent || !this.isAllowed(logLevel, env('LOG_MAX_LEVEL'))) { return; } const item = { host: os.hostname(), label: this.options.labels[logLevel] ?? DEFAULT_LABELS[logLevel] ?? '', level: logLevel, message: util.format(message, ...args), metadata: _objectSpread(_objectSpread({}, this.options.metadata), metadata), name: this.options.name, pid: process.pid, time: new Date() }; this.options.transports.forEach(transport => { if (transport.levels.includes(item.level)) { void transport.write(transport.format(item), item); } }); } } export { Logger }; //# sourceMappingURL=Logger.mjs.map