Add onLogEnd callback to logger

This commit is contained in:
Tamius Han 2020-01-29 23:38:52 +01:00
parent 78ff7d7e40
commit 97d97e022b

View File

@ -3,10 +3,17 @@ import currentBrowser from '../conf/BrowserDetect';
class Logger {
constructor(conf) {
this.onLogEndCallbacks = [];
this.history = [];
this.globalHistory = {};
this.isContentScript = false;
this.isBackgroundScript = true;
}
static saveConfig(conf) {
console.info('Saving logger conf:', conf)
if (process.env.CHANNEL === 'dev') {
console.info('Saving logger conf:', conf)
}
if (currentBrowser.firefox || currentBrowser.edge) {
return browser.storage.local.set( {'uwLogger': JSON.stringify(conf)});
@ -20,7 +27,9 @@ class Logger {
br.storage.onChanged.addListener( (changes, area) => {
if (changes.uwLogger) {
const newLoggerConf = JSON.parse(changes.uwLogger.newValue)
console.info('Logger settings reloaded. New conf:', conf);
if (process.env.CHANNEL === 'dev') {
console.info('Logger settings reloaded. New conf:', conf);
}
callback(newLoggerConf);
}
});
@ -57,6 +66,14 @@ class Logger {
}
async init(conf) {
// this is the only property that always gets passed via conf
// and doesn't get ignored even if the rest of the conf gets
// loaded from browser storage
if (conf.isContentScript) {
this.isContentScript = true;
this.isBackgroundScript = false;
}
if (conf && process.env.CHANNEL === 'dev' && !conf.useConfFromStorage) {
this.conf = conf;
} else {
@ -68,12 +85,7 @@ class Logger {
if (this.conf.fileOptions === undefined) {
this.conf.fileOptions = {};
}
// this is the only property that always gets passed via conf
// and doesn't get ignored even if the rest of the conf gets
// loaded from browser storage
this.isBackgroundPage = !!conf.isBackgroundPage;
this.history = [];
this.globalHistory = {};
this.startTime = performance.now();
this.temp_disable = false;
this.stopTime = this.conf.timeout ? performance.now() + (this.conf.timeout * 1000) : undefined;
@ -82,7 +94,7 @@ class Logger {
const br = currentBrowser.firefox ? browser : chrome;
br.storage.onChanged.addListener( (changes, area) => {
if (Debug.debug && Debug.debugStorage) {
if (process.env.CHANNEL === 'dev') {
console.log("[Logger::<storage/on change>] Settings have been changed outside of here. Updating active settings. Changes:", changes, "storage area:", area);
if (changes['uwLogger'] && changes['uwLogger'].newValue) {
console.log("[Logger::<storage/on change>] new settings object:", JSON.parse(changes.uwLogger.newValue));
@ -92,7 +104,6 @@ class Logger {
ths.conf = JSON.parse(changes.uwLogger.newValue);
}
});
}
clear() {
@ -150,6 +161,28 @@ class Logger {
this.temp_disable = false;
}
onLogEnd(callback) {
this.onLogEndCallbacks.push(callback);
}
// this should be used mostly in background page instance of logger, btw
addToGlobalHistory(key, log) {
this.globalHistory[key] = log;
}
finish() {
this.allowLogging = false;
if (!this.isBackgroundScript) {
const logJson = JSON.stringify(this.history);
for(const f of this.onLogEndCallbacks) {
f(logJson);
}
} else {
this.globalHistory['uw-bg'] = this.history;
return this.globalHistory;
}
}
parseStack() {
const trace = (new Error()).stack;
@ -213,7 +246,7 @@ class Logger {
if (this.stopTime && performance.now() > this.stopTime) {
if (this.conf.allowLogging) {
this.log('force', 'debug', '-----[ alloted time has run out. logging will stop ]-----');
this.conf.allowLogging = false;
this.finish();
}
return true;
}