UNPKG

@graphile/logger

Version:

A logger abstraction for libraries

101 lines 3.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.defaultLogger = exports.consoleLogFactory = exports.makeConsoleLogFactory = exports.Logger = void 0; /** * A `Logger` is initialized with a `LogFunctionFactory` and an initial scope. * It has convenience methods for logging different levels (error, warn, info, * debug) which pass through to the underlying `LogFunction`. It also allows a * narrower scoped logger to be generated via the `scope` method. */ class Logger { constructor(logFactory, scope = {}) { this._scope = scope; this._logFactory = logFactory; this.log = logFactory(scope); } /** * Creates a more narrowly scoped logger; this is useful when your code * performs a subtask. For example: an HTTP server might have a global * logger, and it might create scoped loggers for each incoming HTTP request. * When the HTTP requests goes through a particular middleware it might use * an even more narrowly scoped logger still. */ scope(additionalScope) { return new Logger(this._logFactory, { ...this._scope, ...additionalScope, }); } /** * Logs an `LogLevel.ERROR` message. */ error(message, meta) { return this.log("error" /* ERROR */, message, meta); } /** * Logs an `LogLevel.WARN` message. */ warn(message, meta) { return this.log("warning" /* WARNING */, message, meta); } /** * Logs an `LogLevel.INFO` message. */ info(message, meta) { return this.log("info" /* INFO */, message, meta); } /** * Logs an `LogLevel.DEBUG` message. */ debug(message, meta) { return this.log("debug" /* DEBUG */, message, meta); } } exports.Logger = Logger; /** * Lets you build a console log factory with custom log formatter. Only logs * `DEBUG` level messages if the `GRAPHILE_LOGGER_DEBUG` environmental variable * is set. */ function makeConsoleLogFactory({ format, formatParameters } = { format: "%s: %s (%O)", formatParameters(level, message, scope) { return [level.toUpperCase(), message, scope]; }, }) { return function consoleLogFactory(scope) { return (level, message) => { if (level === "debug" /* DEBUG */ && !process.env.GRAPHILE_LOGGER_DEBUG) { return; } const method = (() => { switch (level) { case "error" /* ERROR */: return "error"; case "warning" /* WARNING */: return "warn"; case "info" /* INFO */: return "info"; default: // `console.debug` in Node is just an alias for `console.log` anyway. return "log"; } })(); console[method](format, ...formatParameters(level, message, scope)); }; }; } exports.makeConsoleLogFactory = makeConsoleLogFactory; /** * Our built in `LogFunctionFactory` which uses `console` for logging, and only * logs `DEBUG` level messages if the `GRAPHILE_LOGGER_DEBUG` environmental * variable is set. Library authors can use this as a fallback if users don't * provide their own logger. If you want to format your logs in a particular * way, use `makeConsoleLogFactory` instead. */ exports.consoleLogFactory = makeConsoleLogFactory(); /** * A logger that can be used immediately. */ exports.defaultLogger = new Logger(exports.consoleLogFactory, {}); //# sourceMappingURL=index.js.map