HEX
Server: nginx/1.24.0
System: Linux nowruzgan 6.8.0-57-generic #59-Ubuntu SMP PREEMPT_DYNAMIC Sat Mar 15 17:40:59 UTC 2025 x86_64
User: babak (1000)
PHP: 8.3.6
Disabled: NONE
Upload Files
File: /var/dev/nowruzgan/rest/node_modules/captains-log/index.js
/**
 * Module dependencies.
 */

var util = require('util');
var _ = require('@sailshq/lodash');
var rc = require('rc');
var wrap = require('./lib/wrap');
var configure = require('./lib/configure');
var captains = require('./lib/captains');



/**
 * Captains Log
 *
 * @param {Object} overrides
 *           , {Object}  custom       : a custom logger to use, i.e. Winston
 *           , {Object}  logLevels    : optional - named log levels, defaults to npm conventions
 *           , {String}  level        : the current log level- e.g. silly, verbose, info, debug, warn, error, or silent
 *           , {Boolean} inspect      : defaults to true-- whether to make the log output more readable (combines all args into one string)
 *           , {Object}  inspectOptions : defaults to {}-- options to pass to the inspect function. One example can be {colors: true, depth:null}
 *                                        printing objects in colors. See: https://nodejs.org/api/util.html#util_util_inspect_object_options
 *
 * @return {Function{}} enhanced (callable) version of logger
 */

module.exports = function CaptainsLog(overrides) {

  // <todo>
  //
  // smart caching
  // i.e. if (process._captainslog) return process._captainslog
  // (but only if the overrides passed in are identical)
  //
  // </todo>

  // Apply overrides to the default configuration
  var options = configure(overrides);

  // If no override was specified, we'll instantiate
  // our default logger, `captains`.
  var logger = captains();

  // If a custom logger override was specified,
  // lets try to use it.
  if (options.custom) {
    logger = options.custom;

    // Make sure enough log methods exist to meet our requirements.
    //
    // We assume that at least something called
    // `logger.log` or `logger.debug` exists.
    if (!_.isObject(logger) || !_.isFunction(logger.log)) {
      throw new Error(
        'Unsupported logger override provided as `custom`!\n' +
        '(has no `.log()` or `.debug()` method.)\n'+
        'Here\'s what was passed in:\n'+util.inspect(logger,{depth:null})
      );
    }//-•

    // Fill in the gaps for the required log methods with
    // reasonable guesses if the custom logger is missing any
    // (only required method is `logger.log` or `logger.debug`)
    // If no reasonable alternative is possible, don't log

    logger.debug = logger.debug ? logger.debug.bind(logger) : _.noop;
    logger.info = logger.info ? logger.info.bind(logger) : _.noop;
    logger.error = logger.error ? logger.error.bind(logger) : _.noop;
    logger.warn = logger.warn ? logger.warn.bind(logger) : (logger.error ? logger.error.bind(logger) : _.noop);
    logger.crit = logger.crit ? logger.crit.bind(logger) : (logger.error ? logger.error.bind(logger) : _.noop);
    logger.verbose = logger.verbose ? logger.verbose.bind(logger) : _.noop;
    logger.silly = logger.silly ? logger.silly.bind(logger) : _.noop;
    logger.blank = logger.blank ? logger.blank.bind(logger) : _.noop;
  }

  // Make logger callable and stuff (wrap it)
  var callableLogger = wrap(logger, options);

  // Also expose logger on `global` if `globalizeAs` is enabled
  var GLOBAL = (typeof global !== undefined ? global : typeof window !== undefined ? window : Function);
  if (options.globalizeAs) { GLOBAL[options.globalizeAs] = callableLogger; }


  return callableLogger;

};