123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- 'use strict';
- var colorspace = require('colorspace')
- , enabled = require('enabled')
- , kuler = require('kuler')
- , util = require('util');
- /**
- * Check if the terminal we're using allows the use of colors.
- *
- * @type {Boolean}
- * @private
- */
- var tty = require('tty').isatty(1);
- /**
- * The default stream instance we should be writing against.
- *
- * @type {Stream}
- * @public
- */
- var stream = process.stdout;
- /**
- * A simple environment based logger.
- *
- * Options:
- *
- * - colors: Force the use of colors or forcefully disable them. If this option
- * is not supplied the colors will be based on your terminal.
- * - stream: The Stream instance we should write our logs to, defaults to
- * process.stdout but can be anything you like.
- *
- * @param {String} name The namespace of your log function.
- * @param {Object} options Logger configuration.
- * @returns {Function} Configured logging method.
- * @api public
- */
- function factory(name, options) {
- if (!enabled(name)) return function diagnopes() {};
- options = options || {};
- options.colors = 'colors' in options ? options.colors : tty;
- options.ansi = options.colors ? kuler(name, colorspace(name)) : name;
- options.stream = options.stream || stream;
- //
- // Allow multiple streams, so make sure it's an array which makes iteration
- // easier.
- //
- if (!Array.isArray(options.stream)) {
- options.stream = [options.stream];
- }
- //
- // The actual debug function which does the logging magic.
- //
- return function debug(line) {
- //
- // Better formatting for error instances.
- //
- if (line instanceof Error) line = line.stack || line.message || line;
- line = [
- //
- // Add the colorized namespace.
- //
- options.ansi,
- //
- // The total time we took to execute the next debug statement.
- //
- ' ',
- line
- ].join('');
- //
- // Use util.format so we can follow the same API as console.log.
- //
- line = util.format.apply(this, [line].concat(
- Array.prototype.slice.call(arguments, 1)
- )) + '\n';
- options.stream.forEach(function each(stream) {
- stream.write(line);
- });
- };
- }
- /**
- * Override the "default" stream that we write to. This allows you to globally
- * configure the steams.
- *
- * @param {Stream} output
- * @returns {function} Factory
- * @api private
- */
- factory.to = function to(output) {
- stream = output;
- return factory;
- };
- //
- // Expose the module.
- //
- module.exports = factory;
|