|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- (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
- 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;
- }));
|