iwmlib/lib/logging.js

68 lines
1.8 KiB
JavaScript
Raw Normal View History

/* eslint-disable no-undef */
/* eslint-disable no-console */
/* eslint-disable no-unused-vars */
2019-05-24 11:02:44 +02:00
let ipc = null
let logMessages = new Set()
let logHandlers = {
log: console.log,
warn: console.warn,
error: console.error
}
try {
ipc = require('electron').ipcRenderer
logHandlers.log = message => ipc.send('log', message)
logHandlers.warn = message => ipc.send('warn', message)
logHandlers.error = message => ipc.send('error', message)
} catch (e) {
console.log('Cannot use electron logging.')
}
2019-05-24 09:53:27 +02:00
/** Basic class for app specific logging requirements.
* Can be used to implement persistent logging in electron apps.
2019-07-18 12:26:39 +02:00
* Uses a logMessage cache to prevent error overflows. This is
* needed since errors may occur very frequently
* (e.g. display update loops at 60fps, programmatic loops, ...).
2019-07-18 12:26:39 +02:00
*
* The logging handlers can be overwritten by calling the static
* setup method.
2019-05-24 09:53:27 +02:00
*/
export default class Logging {
/** Static log function.
* @param {*} message
*/
static log(message) {
logHandlers.log(message)
2019-05-24 09:53:27 +02:00
}
2019-06-17 17:21:47 +02:00
/**
2019-07-18 12:26:39 +02:00
* Static warn function.
* Emits each warning only once per session.
2019-07-18 12:26:39 +02:00
* @param {*} message
*/
2019-06-17 17:21:47 +02:00
static warn(message) {
if (!logMessages.has(message)) {
logMessages.add(message)
logHandlers.warn(message)
2019-06-17 17:21:47 +02:00
}
}
/**
2019-07-18 12:26:39 +02:00
* Static error function.
* Emits each error message only once per session.
* @param {*} message
*/
2019-06-17 17:21:47 +02:00
static error(message) {
if (!logMessages.has(message)) {
logMessages.add(message)
logHandlers.error(message)
2019-06-17 17:21:47 +02:00
}
}
2019-07-30 16:56:29 +02:00
static setup({ log = console.log, warn = console.warn, error = console.error } = {}) {
logHandlers.log = log
logHandlers.warn = warn
logHandlers.error = error
}
2019-05-24 09:53:27 +02:00
}