/**
 * Module dependencies.
 */

var _ = require('lodash'),
	util = require('util');



/**
 * Build a log function which combines arguments into a string,
 * enhancing them for readability.  If specified, prefixes will be
 * added.
 *
 * @param  {Function} logFn  [log fn]
 * @param  {String} logAt    [e.g. 'silly' or 'error']
 * @param  {Object} options
 *
 * @return {Function}        [enhanced log fn]
 * @api private
 */

module.exports = function (logFn, logAt, options) {
	return function _writeLogToConsole() {

		// Check `options.level` against logAt
		// to see whether to write the log.
		// ( silly = 0 | silent = highest )
		var lvlMap = options.logLevels;
		var configuredLvl = options.level;
		if (lvlMap[logAt] < lvlMap[configuredLvl]) return;

		
		var args = Array.prototype.slice.call(arguments);

		// If `options.inspect` is disabled, just call the log fn normally
		if (!options.inspect) {
			return logFn.apply(logFn, args);
		}

		// Compose `str` of all the arguments
		// (include the appropriate prefix if specified)
		var pieces = [];
		var str = (options.prefixes && options.prefixes[logAt]) || '';
		_.each(arguments, function(arg) {
			if (typeof arg === 'object') {
				if (arg instanceof Error) {
					pieces.push(arg.stack);
					return;
				}
				pieces.push(util.inspect(arg));
				return;
			}

			if (typeof arg === 'function') {
				pieces.push(arg.valueOf());
				return;
			}

			pieces.push(arg);
		});
		str += pieces.join(' ');

		// Call log fn
		return logFn.apply(logFn, [str]);
	};
};

@@ -1197,88 +1197,8 @@
 ) %7B%0A
-%09%09%09%09if (arg instanceof Error) %7B%0A%09%09%09%09%09pieces.push(arg.stack);%0A%09%09%09%09%09return;%0A%09%09%09%09%7D%0A
 %09%09%09%09

Remove custom error behavior-- breaks node-standard ability to define 'inspect' method in objects.