|
- /*
- * @Author: wcy
- */
-
- 'use strict';
-
- const oriDebug = require('debug');
- const util = require('util');
-
- const PRIORITY_V = '[V]'; //verbose---0
- const PRIORITY_D = '[D]'; //debug---1
- const PRIORITY_I = '[I]'; //info---2
- const PRIORITY_W = '[W]'; //warning---3
- const PRIORITY_E = '[E]'; //error---4
- const PRIORITY_F = '[F]'; //fatal---5
- const PRIORITY_S = '[S]'; //silent---6
-
- const LOGLEVEL = ['verbose', 'debug', 'info', 'warning', 'error', 'fatal', 'silent'];
-
- const LogDebug = 'nongfu.common.LogFactory'; //namespace
-
- //origun debug——'formatArgs' function
- const _formatArgs = oriDebug.formatArgs;
-
- /**
- * Create a debugger with the given `opts,namespace`.
- *
- * @param {object} opts
- * @param {String} namespace
- * @return {Function}
- * @api public
- */
- function createDebugWrapper(opts) {
-
- let logLevel = validateLogLevel(opts.logLevel);
- try {
- if (!opts || typeof opts !== 'object') {
- opts = {};
- throw new Error('Function logFactory() must need a opts as arguments which is not null or opts type must be object.');
- }
- } catch (err) {
- oriDebug(LogDebug)(PRIORITY_W, new Date().toISOString(), err);
- }
-
- function createDebug(namespace) {
-
- if (!namespace) {
- namespace = 'nongfu';
- }
-
- //origin debug function
- let debugWrapper = oriDebug(namespace);
-
- //level = 1
- function debug() {
-
- try {
- if (logLevel > 1) {
- return;
- }
- opts.PRIORITY = '[D]';
- common(opts, arguments, debugWrapper);
- } catch (err) {
- oriDebug(LogDebug)(PRIORITY_W, new Date().toISOString(), err);
- }
-
- }
-
- debug.isDebugEnabled = function () {
- return true;
- }
-
- //level = 0
- debug.verbose = function () {
-
- try {
- if (logLevel > 0) {
- return;
- }
- opts.PRIORITY = PRIORITY_V;
- common(opts, arguments, debugWrapper);
- } catch (err) {
- oriDebug(LogDebug)(PRIORITY_W, new Date().toISOString(), err);
- }
-
- }
-
- //level = 1
- debug.debug = function () {
-
- try {
- if (logLevel > 1) {
- return;
- }
- opts.PRIORITY = PRIORITY_D;
- common(opts, arguments, debugWrapper);
- } catch (err) {
- oriDebug(LogDebug)(PRIORITY_W, new Date().toISOString(), err);
- }
-
- }
-
- //level = 2
- debug.info = function () {
-
- try {
- if (logLevel > 2) {
- return;
- }
- opts.PRIORITY = PRIORITY_I;
- common(opts, arguments, debugWrapper);
- } catch (err) {
- oriDebug(LogDebug)(PRIORITY_W, new Date().toISOString(), err);
- }
-
- }
-
- //level = 3
- debug.warning = function () {
-
- try {
- if (logLevel > 3) {
- return;
- }
- opts.PRIORITY = PRIORITY_W;
- common(opts, arguments, debugWrapper);
- } catch (err) {
- oriDebug(LogDebug)(PRIORITY_W, new Date().toISOString(), err);
- }
-
- }
-
- //level = 4
- debug.error = function () {
-
- try {
- if (logLevel > 4) {
- return;
- }
- opts.PRIORITY = PRIORITY_E;
- common(opts, arguments, debugWrapper);
- } catch (err) {
- oriDebug(LogDebug)(PRIORITY_W, new Date().toISOString(), err);
- }
-
- }
-
- //level = 5
- debug.fatal = function () {
-
- try {
- if (logLevel > 5) {
- return;
- }
- opts.PRIORITY = PRIORITY_F;
- common(opts, arguments, debugWrapper);
- } catch (err) {
- oriDebug(LogDebug)(PRIORITY_W, new Date().toISOString(), err);
- }
-
- }
-
- //level = 6
- debug.silent = function () {
-
- try {
- if (logLevel > 6) {
- return;
- }
- opts.PRIORITY = PRIORITY_S;
- common(opts, arguments, debugWrapper);
- } catch (err) {
- oriDebug(LogDebug)(PRIORITY_W, new Date().toISOString(), err);
- }
-
- }
-
- return debug;
- }
-
- return createDebug;
-
- }
-
- /**
- * common function, this function deals with all message user input.
- * @param {[type]} opts [opts includes priority,service_name,runner_id,pid]
- * @param {[type]} args [args is user input arguments, it uses to output user's message]
- * @param {[type]} debugWrapper [it type is function, use it to output all message]
- * @return {[type]} [null]
- * @attention {timestamp} [every output timestamp must be the up-to-date time]
- * @api private
- */
- function common(opts, args, debugWrapper) {
- //replace origin debug's 'formatArgs' function
- oriDebug.formatArgs = formatArgs;
- let priority = opts.PRIORITY;
- let runner_id = opts.runner_id
- let pid = opts.pid;
- let timestamp = '[' + new Date().toISOString() + ']';
- let service_qname = opts.service_qname;
- let arrs = new Array(args.length);
- for (let i = 0; i < args.length; i++) {
- if (typeof args[i] === 'object') {
- arrs[i] = util.inspect(args[i], {
- depth: 2
- });
- } else {
- arrs[i] = args[i];
- }
- }
- arrs[0] = coerce(arrs[0]);
- debugWrapper(priority, service_qname, runner_id, pid, timestamp, arrs.toString());
- //restore origin debug's 'formatArgs' function
- oriDebug.formatArgs = _formatArgs;
- }
-
- /**
- * rewrite debug origin formatArgs
- * @param {[type]} args [user input message]
- * @return {[type]} [null]
- * @api private
- */
- function formatArgs(args) {
- try {
- let name = '[' + this.namespace + ']';
-
- args.splice(5, 0, name);
- args.push('+' + this.diff + 'ms');
- } catch (err) {
- oriDebug(LogDebug)(PRIORITY_W, new Date().toISOString(), err);
- }
- }
-
- /**
- * Coerce `val`.
- *
- * @param {Mixed} val
- * @return {Mixed}
- * @api private
- */
- function coerce(val) {
- if (val instanceof Error) return val.stack || val.message;
- return val;
- }
-
- /**
- * [validateLogLevel description]
- * @return {[type]} [description]
- */
- function validateLogLevel(logLevel) {
- if (!LOGLEVEL.some(function (value, index, arr) {
- return (value === logLevel);
- })) {
- return 1;
- }
- return LOGLEVEL.indexOf(logLevel);
- }
-
- exports = module.exports = createDebugWrapper;
|