@boost/log
Version:
Lightweight level based logging system.
94 lines (91 loc) • 4.1 kB
JavaScript
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