CanvasBlocker/lib/logging.js

113 lines
2.7 KiB
JavaScript
Raw Normal View History

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
(function(){
"use strict";
2019-11-28 01:26:35 +01:00
let scope;
if ((typeof exports) !== "undefined"){
scope = exports;
}
else {
scope = require.register("./logging", {});
}
2017-11-07 00:36:44 +01:00
let settings = false;
scope.setSettings = function(realSettings){
if (!settings){
settings = realSettings;
2019-11-28 01:26:35 +01:00
return settings.loaded.then(scope.clearQueue);
}
else {
warning("logging: Settings can only be set once.");
2019-12-01 01:25:39 +01:00
return settings.loaded;
}
};
2019-11-28 01:26:35 +01:00
let prefix = "";
function leftPad(str, char, pad){
str = "" + str;
return char.repeat(pad - str.length) + str;
}
2019-11-28 01:26:35 +01:00
const colors = {
2017-12-18 23:47:24 +01:00
1: "color: red",
25: "color: orange",
50: "",
75: "color: darkgreen",
100: "color: blue",
999: "background-color: lightgray"
};
2019-11-28 01:26:35 +01:00
let queue = [];
function performLog(level, args, date){
if (!date){
date = new Date();
}
if (!settings || !settings.isInitialized() || queue.length){
queue.push({level, args, date});
}
else {
if (settings.logLevel >= level){
2019-11-28 01:26:35 +01:00
let pre = "%c[CanvasBlocker] ";
if (prefix){
2017-12-18 23:47:24 +01:00
pre += prefix + ": ";
}
pre += "[" +
date.getFullYear() + "-" +
leftPad(date.getMonth() + 1, "0", 2) + "-" +
leftPad(date.getDate(), "0", 2) + " " +
leftPad(date.getHours(), "0", 2) + ":" +
leftPad(date.getMinutes(), "0", 2) + ":" +
2017-10-03 15:35:31 +02:00
leftPad(date.getSeconds(), "0", 2) + "." +
leftPad(date.getMilliseconds(), "0", 3) +
2017-10-03 15:35:31 +02:00
"]";
if (typeof args[0] === "string"){
args[0] = pre + " " + args[0];
2017-12-18 23:57:25 +01:00
args.splice(1, 0, colors[level] || "");
}
else {
2017-12-18 23:57:25 +01:00
args.unshift(colors[level] || "");
args.unshift(pre);
}
2019-11-28 01:26:35 +01:00
// eslint-disable-next-line no-console
console.log.apply(console, args);
}
}
}
2017-10-05 19:00:00 +02:00
function error (...args){performLog(1, args);}
function warning(...args){performLog(25, args);}
function message(...args){performLog(50, args);}
function notice (...args){performLog(75, args);}
function verbose(...args){performLog(100, args);}
function metaLog(...args){performLog(999, args);}
scope.setPrefix = function(newPrefix){
if (!prefix){
prefix = newPrefix;
}
else {
warning("logging prefix already set (%s) cannot be set to %s", prefix, newPrefix);
}
};
scope.clearQueue = function(){
if (queue.length){
metaLog("clear logging queue");
2019-11-28 01:26:35 +01:00
const tmp = queue;
queue = [];
tmp.forEach(function(item){
performLog(item.level, item.args, item.date);
});
metaLog("logging queue cleared");
}
};
scope.error = error;
scope.warning = warning;
scope.message = message;
scope.notice = notice;
scope.verbose = verbose;
2017-11-07 00:36:44 +01:00
metaLog("logging available");
}());