Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /opt/push-server/node_modules/winston/lib/winston/ |
Upload File : |
/** * create-logger.js: Logger factory for winston logger instances. * * (C) 2010 Charlie Robbins * MIT LICENCE */ 'use strict'; const { LEVEL } = require('triple-beam'); const config = require('./config'); const Logger = require('./logger'); const debug = require('@dabh/diagnostics')('winston:create-logger'); function isLevelEnabledFunctionName(level) { return 'is' + level.charAt(0).toUpperCase() + level.slice(1) + 'Enabled'; } /** * Create a new instance of a winston Logger. Creates a new * prototype for each instance. * @param {!Object} opts - Options for the created logger. * @returns {Logger} - A newly created logger instance. */ module.exports = function (opts = {}) { // // Default levels: npm // opts.levels = opts.levels || config.npm.levels; /** * DerivedLogger to attach the logs level methods. * @type {DerivedLogger} * @extends {Logger} */ class DerivedLogger extends Logger { /** * Create a new class derived logger for which the levels can be attached to * the prototype of. This is a V8 optimization that is well know to increase * performance of prototype functions. * @param {!Object} options - Options for the created logger. */ constructor(options) { super(options); } } const logger = new DerivedLogger(opts); // // Create the log level methods for the derived logger. // Object.keys(opts.levels).forEach(function (level) { debug('Define prototype method for "%s"', level); if (level === 'log') { // eslint-disable-next-line no-console console.warn('Level "log" not defined: conflicts with the method "log". Use a different level name.'); return; } // // Define prototype methods for each log level e.g.: // logger.log('info', msg) implies these methods are defined: // - logger.info(msg) // - logger.isInfoEnabled() // // Remark: to support logger.child this **MUST** be a function // so it'll always be called on the instance instead of a fixed // place in the prototype chain. // DerivedLogger.prototype[level] = function (...args) { // Prefer any instance scope, but default to "root" logger const self = this || logger; // Optimize the hot-path which is the single object. if (args.length === 1) { const [msg] = args; const info = msg && msg.message && msg || { message: msg }; info.level = info[LEVEL] = level; self._addDefaultMeta(info); self.write(info); return (this || logger); } // When provided nothing assume the empty string if (args.length === 0) { self.log(level, ''); return self; } // Otherwise build argument list which could potentially conform to // either: // . v3 API: log(obj) // 2. v1/v2 API: log(level, msg, ... [string interpolate], [{metadata}], [callback]) return self.log(level, ...args); }; DerivedLogger.prototype[isLevelEnabledFunctionName(level)] = function () { return (this || logger).isLevelEnabled(level); }; }); return logger; };