Logging handlers can now be adapted to special needs

This commit is contained in:
2019-07-02 09:38:19 +02:00
parent 9042579518
commit 1480ad8145
4 changed files with 228 additions and 81 deletions
+13 -2
View File
@@ -8,15 +8,26 @@
<link rel="stylesheet" href="../css/doctest.css">
<script src="./3rdparty/highlight/highlight.pack.js"></script>
<script src="../dist/iwmlib.3rdparty.js"></script>
<script src="../dist/iwmlib.js"></script>
<script src="../dist/iwmlib.js"></script>
</head>
<body id="page" onload="Doctest.run()">
<h1>
Logging
</h1>
<p>Store informations of your app permanently.</p>
<p>Store informations of your app permanently or use app specific logging functions.</p>
<script class="doctest">
Logging.log('app started')
Logging.warn("shouldn't happen")
Logging.error('restart')
Logging.setup({ log: message => console.log("app specific" + message) })
Logging.log("now app related")
</script>
<p>You can overwrite the log, warn, and error handler by using Logging.setup with
app specific functions.</p>
<script class="doctest">
Logging.setup({ log: message => console.log("app specific" + message) })
Logging.log("now app related")
</script>
</body>
+24 -17
View File
@@ -1,10 +1,21 @@
/* eslint-disable no-undef */
/* eslint-disable no-console */
/* eslint-disable no-unused-vars */
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.")
console.log('Cannot use electron logging.')
}
/** Basic class for app specific logging requirements.
@@ -12,6 +23,9 @@ try {
* 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, ...).
*
* The logging handlers can be overwritten by calling the static
* setup method.
*/
export default class Logging {
@@ -19,12 +33,7 @@ export default class Logging {
* @param {*} message
*/
static log(message) {
if (ipc) {
ipc.send('log', message)
} else {
console.log(message)
}
logHandlers.log(message)
}
/**
@@ -35,11 +44,7 @@ export default class Logging {
static warn(message) {
if (!logMessages.has(message)) {
logMessages.add(message)
if (ipc) {
ipc.send('warn', message)
} else {
console.warn(message)
}
logHandlers.warn(message)
}
}
@@ -51,11 +56,13 @@ export default class Logging {
static error(message) {
if (!logMessages.has(message)) {
logMessages.add(message)
if (ipc) {
ipc.send('error', message)
} else {
console.error(message)
}
logHandlers.error(message)
}
}
static setup({log=console.log, warn=console.warn, error=console.error} = {}) {
logHandlers.log = log
logHandlers.warn = warn
logHandlers.error = error
}
}