Files
data-extracter-extesion/scripts/background/logger.js
2020-01-13 14:27:40 +08:00

81 lines
2.4 KiB
JavaScript

const LOGGER_LEVEL = {
DEBUG: 1,
INFO: 2,
WARNING: 3,
ERROR: 4,
DISABLED: 100,
properties: {
1: { name: "debug", value: 1, prefix: "DEBUG" },
2: { name: "info", value: 2, prefix: "INFO" },
3: { name: "warning", value: 3, prefix: "WARN" },
4: { name: "error", value: 3, prefix: "ERROR" }
}
};
class Logger {
_notificationId = undefined;
_log_level = LOGGER_LEVEL.INFO;
_notify_level = LOGGER_LEVEL.ERROR;
constructor(logLevel, notifyLevel) {
if (logLevel) this._log_level = logLevel;
if (notifyLevel) this._notify_level = notifyLevel;
chrome.notifications.onClosed.addListener((id, byUser) => { this._notify_level = undefined });
}
get logLevel() {
return this._log_level;
}
set logLevel(val) {
this._log_level = val;
}
get notifyLevel() {
return this._notify_level;
}
set notifyLevel(val) {
this._notify_level = val;
}
log(level, loggerFn, ...msgs) {
if (level < this._log_level) return;
let time = new Date().toLocaleString();
loggerFn(`${time} [${LOGGER_LEVEL.properties[level].prefix}]`, ...msgs);
if (level < this._notify_level) return;
this.notify(...msgs);
}
debug(...msgs) {
this.log(LOGGER_LEVEL.DEBUG, console.debug, ...msgs);
}
info(...msgs) {
this.log(LOGGER_LEVEL.INFO, console.info, ...msgs);
}
warn(...msgs) {
this.log(LOGGER_LEVEL.WARNING, console.info, ...msgs);
}
error(...msgs) {
this.log(LOGGER_LEVEL.ERROR, console.info, ...msgs);
}
notify(...msgs) {
let msg = msgs.join(' ');
if (!this._notificationId) {
chrome.notifications.create(
null,
{
"type": "basic",
"iconUrl": chrome.extension.getURL('icon.png'),
"title": "Data Extractor",
"message": msg,
"priority": 0,
"requireInteraction": true,
},
notificationId => {
this._notificationId = notificationId;
}
);
return;
}
chrome.notifications.update(
this._notificationId,
{ "message": msg }
);
}
}
const logger = new Logger(LOGGER_LEVEL.DEBUG, LOGGER_LEVEL.DISABLED);