Skip to content

Commit

Permalink
fix: remove unexpected leading space of CLI output
Browse files Browse the repository at this point in the history
  • Loading branch information
favoyang committed Jul 27, 2020
1 parent c3680e0 commit fbc7f69
Show file tree
Hide file tree
Showing 2 changed files with 152 additions and 1 deletion.
2 changes: 1 addition & 1 deletion lib/logger.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const log = require("loglevel");
const prefix = require("loglevel-plugin-prefix");
const prefix = require("./loglevel-plugin-prefix");

prefix.reg(log);
if (process.env.NODE_ENV == "test") {
Expand Down
151 changes: 151 additions & 0 deletions lib/loglevel-plugin-prefix.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
(function(root, factory) {
if (typeof define === "function" && define.amd) {
define(factory);
} else if (typeof module === "object" && module.exports) {
module.exports = factory();
} else {
root.prefix = factory(root);
}
})(this, function(root) {
"use strict";

var merge = function(target) {
var i = 1;
var length = arguments.length;
var key;
for (; i < length; i++) {
for (key in arguments[i]) {
if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {
target[key] = arguments[i][key];
}
}
}
return target;
};

var defaults = {
template: "[%t] %l:",
levelFormatter: function(level) {
return level.toUpperCase();
},
nameFormatter: function(name) {
return name || "root";
},
timestampFormatter: function(date) {
return date.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");
},
format: undefined
};

var loglevel;
var configs = {};

var reg = function(rootLogger) {
if (!rootLogger || !rootLogger.getLogger) {
throw new TypeError("Argument is not a root logger");
}
loglevel = rootLogger;
};

var apply = function(logger, config) {
if (!logger || !logger.setLevel) {
throw new TypeError("Argument is not a logger");
}

/* eslint-disable vars-on-top */
var originalFactory = logger.methodFactory;
var name = logger.name || "";
var parent = configs[name] || configs[""] || defaults;
/* eslint-enable vars-on-top */

function methodFactory(methodName, logLevel, loggerName) {
var originalMethod = originalFactory(methodName, logLevel, loggerName);
var options = configs[loggerName] || configs[""];

var hasTimestamp = options.template.indexOf("%t") !== -1;
var hasLevel = options.template.indexOf("%l") !== -1;
var hasName = options.template.indexOf("%n") !== -1;

return function() {
var content = "";

var length = arguments.length;
var args = Array(length);
var key = 0;
for (; key < length; key++) {
args[key] = arguments[key];
}

// skip the root method for child loggers to prevent duplicate logic
if (name || !configs[loggerName]) {
/* eslint-disable vars-on-top */
var timestamp = options.timestampFormatter(new Date());
var level = options.levelFormatter(methodName);
var lname = options.nameFormatter(loggerName);
/* eslint-enable vars-on-top */

if (options.format) {
content += options.format(level, lname, timestamp);
} else {
content += options.template;
if (hasTimestamp) {
content = content.replace(/%t/, timestamp);
}
if (hasLevel) content = content.replace(/%l/, level);
if (hasName) content = content.replace(/%n/, lname);
}

if (args.length && typeof args[0] === "string") {
// concat prefix with first argument to support string substitutions
if (content.length > 0) {
args[0] = content + " " + args[0];
}
} else {
args.unshift(content);
}
}

originalMethod.apply(undefined, args);
};
}

if (!configs[name]) {
logger.methodFactory = methodFactory;
}

// for remove inherited format option if template option preset
config = config || {};
if (config.template) config.format = undefined;

configs[name] = merge({}, parent, config);

logger.setLevel(logger.getLevel());

if (!loglevel) {
logger.warn(
"It is necessary to call the function reg() of loglevel-plugin-prefix before calling apply. From the next release, it will throw an error. See more: https://github.com/kutuluk/loglevel-plugin-prefix/blob/master/README.md"
);
}

return logger;
};

var api = {
reg: reg,
apply: apply
};

var save;

if (root) {
save = root.prefix;
api.noConflict = function() {
if (root.prefix === api) {
root.prefix = save;
}
return api;
};
}

return api;
});

0 comments on commit fbc7f69

Please sign in to comment.