diff --git a/spot-client/src/common/logger/logger.js b/spot-client/src/common/logger/logger.js index a2c542fda..1121a6e82 100644 --- a/spot-client/src/common/logger/logger.js +++ b/spot-client/src/common/logger/logger.js @@ -13,35 +13,30 @@ const jitsiLogger = getLogger(null, null, { disableCallerInfo: true }); * @returns {string} The log object, which includes metadata, as a string. */ function formatMessage(level, message, context) { - const formattedMessage = { - level, - timestamp: Date.now(), - message - }; + let contextValue; if (context) { if (typeof context === 'string') { - formattedMessage.context = context; + contextValue = context; } else { const contextCopy = { ...context }; for (const key in contextCopy) { - if (contextCopy.hasOwnProperty(key) - && contextCopy[key] instanceof Error) { + if (contextCopy.hasOwnProperty(key) && contextCopy[key] instanceof Error) { const error = contextCopy[key]; - contextCopy[key] = JSON.stringify( - error, - Object.getOwnPropertyNames(error) - ); + contextCopy[key] = JSON.stringify(error, Object.getOwnPropertyNames(error)); } } - formattedMessage.context = contextCopy; + contextValue = JSON.stringify(contextCopy); } + } + if (contextValue) { + return `${message} ${contextValue}`; } - return formattedMessage; + return message; } /** diff --git a/spot-electron/package-lock.json b/spot-electron/package-lock.json index 741eb57d9..f069e0d42 100644 --- a/spot-electron/package-lock.json +++ b/spot-electron/package-lock.json @@ -12,12 +12,13 @@ "dependencies": { "electron-debug": "3.2.0", "electron-is-dev": "1.2.0", - "electron-log": "4.3.2", + "electron-log": "4.4.8", "electron-updater": "4.3.5", "is-online": "9.0.0", "jitsi-meet-logger": "github:jitsi/jitsi-meet-logger#v1.0.0", "lodash": "4.17.21", - "node-osascript": "2.1.0" + "node-osascript": "2.1.0", + "node-schedule": "2.1.0" }, "devDependencies": { "@jest-runner/electron": "3.0.0", @@ -7408,7 +7409,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -7893,6 +7893,18 @@ "buffer": "^5.1.0" } }, + "node_modules/cron-parser": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-3.5.0.tgz", + "integrity": "sha512-wyVZtbRs6qDfFd8ap457w3XVntdvqcwBGxBoTvJQH9KGVKL/fB+h2k3C8AqiVxvUQKN1Ps/Ns46CNViOpVDhfQ==", + "dependencies": { + "is-nan": "^1.3.2", + "luxon": "^1.26.0" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -8087,7 +8099,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, "dependencies": { "object-keys": "^1.0.12" }, @@ -8705,9 +8716,9 @@ } }, "node_modules/electron-log": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-4.3.2.tgz", - "integrity": "sha512-PJPWE8JDzQ137UlxX9K917nI8GTcwgiJpE2PMPXZo+I6C4AaZU+JWQ3lW5NjQ1Lg8Qk8qbze+Ly0yAiqhbmpeA==" + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-4.4.8.tgz", + "integrity": "sha512-QQ4GvrXO+HkgqqEOYbi+DHL7hj5JM+nHi/j+qrN9zeeXVKy8ZABgbu4CnG+BBqDZ2+tbeq9tUC4DZfIWFU5AZA==" }, "node_modules/electron-notarize": { "version": "1.1.1", @@ -10526,8 +10537,7 @@ "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/functional-red-black-tree": { "version": "1.0.1", @@ -10557,7 +10567,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -10792,7 +10801,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -10813,7 +10821,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -11401,6 +11408,21 @@ "node": ">=8" } }, + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-negative-zero": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", @@ -16801,6 +16823,11 @@ "@sinonjs/commons": "^1.7.0" } }, + "node_modules/long-timeout": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz", + "integrity": "sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==" + }, "node_modules/lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", @@ -16820,6 +16847,14 @@ "node": ">=10" } }, + "node_modules/luxon": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.28.0.tgz", + "integrity": "sha512-TfTiyvZhwBYM/7QdAVDh+7dBTBA29v4ik0Ce9zda3Mnf8on1S5KJI8P2jKFZ8+5C0jhmr0KwJEO/Wdpm0VeWJQ==", + "engines": { + "node": "*" + } + }, "node_modules/make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -17200,6 +17235,19 @@ "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", "dev": true }, + "node_modules/node-schedule": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-2.1.0.tgz", + "integrity": "sha512-nl4JTiZ7ZQDc97MmpTq9BQjYhq7gOtoh7SiPH069gBFBj0PzD8HI7zyFs6rzqL8Y5tTiEEYLxgtbx034YPrbyQ==", + "dependencies": { + "cron-parser": "^3.5.0", + "long-timeout": "0.1.1", + "sorted-array-functions": "^1.3.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -17340,7 +17388,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, "engines": { "node": ">= 0.4" } @@ -19316,6 +19363,11 @@ "node": ">=0.10.0" } }, + "node_modules/sorted-array-functions": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz", + "integrity": "sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==" + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -26803,7 +26855,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -27191,6 +27242,15 @@ "buffer": "^5.1.0" } }, + "cron-parser": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-3.5.0.tgz", + "integrity": "sha512-wyVZtbRs6qDfFd8ap457w3XVntdvqcwBGxBoTvJQH9KGVKL/fB+h2k3C8AqiVxvUQKN1Ps/Ns46CNViOpVDhfQ==", + "requires": { + "is-nan": "^1.3.2", + "luxon": "^1.26.0" + } + }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -27338,7 +27398,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, "requires": { "object-keys": "^1.0.12" } @@ -27818,9 +27877,9 @@ } }, "electron-log": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-4.3.2.tgz", - "integrity": "sha512-PJPWE8JDzQ137UlxX9K917nI8GTcwgiJpE2PMPXZo+I6C4AaZU+JWQ3lW5NjQ1Lg8Qk8qbze+Ly0yAiqhbmpeA==" + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-4.4.8.tgz", + "integrity": "sha512-QQ4GvrXO+HkgqqEOYbi+DHL7hj5JM+nHi/j+qrN9zeeXVKy8ZABgbu4CnG+BBqDZ2+tbeq9tUC4DZfIWFU5AZA==" }, "electron-notarize": { "version": "1.1.1", @@ -29251,8 +29310,7 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "functional-red-black-tree": { "version": "1.0.1", @@ -29276,7 +29334,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -29452,7 +29509,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -29466,8 +29522,7 @@ "has-symbols": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" }, "has-value": { "version": "1.0.0", @@ -29898,6 +29953,15 @@ "ip-regex": "^4.0.0" } }, + "is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, "is-negative-zero": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", @@ -34128,6 +34192,11 @@ "@sinonjs/commons": "^1.7.0" } }, + "long-timeout": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz", + "integrity": "sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==" + }, "lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", @@ -34141,6 +34210,11 @@ "yallist": "^4.0.0" } }, + "luxon": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.28.0.tgz", + "integrity": "sha512-TfTiyvZhwBYM/7QdAVDh+7dBTBA29v4ik0Ce9zda3Mnf8on1S5KJI8P2jKFZ8+5C0jhmr0KwJEO/Wdpm0VeWJQ==" + }, "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -34446,6 +34520,16 @@ "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", "dev": true }, + "node-schedule": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-2.1.0.tgz", + "integrity": "sha512-nl4JTiZ7ZQDc97MmpTq9BQjYhq7gOtoh7SiPH069gBFBj0PzD8HI7zyFs6rzqL8Y5tTiEEYLxgtbx034YPrbyQ==", + "requires": { + "cron-parser": "^3.5.0", + "long-timeout": "0.1.1", + "sorted-array-functions": "^1.3.0" + } + }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -34558,8 +34642,7 @@ "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object-visit": { "version": "1.0.1", @@ -36096,6 +36179,11 @@ } } }, + "sorted-array-functions": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz", + "integrity": "sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==" + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", diff --git a/spot-electron/package.json b/spot-electron/package.json index 036c49a5e..faf09d6ac 100644 --- a/spot-electron/package.json +++ b/spot-electron/package.json @@ -82,12 +82,13 @@ "dependencies": { "electron-debug": "3.2.0", "electron-is-dev": "1.2.0", - "electron-log": "4.3.2", + "electron-log": "4.4.8", "electron-updater": "4.3.5", "is-online": "9.0.0", "jitsi-meet-logger": "github:jitsi/jitsi-meet-logger#v1.0.0", "lodash": "4.17.21", - "node-osascript": "2.1.0" + "node-osascript": "2.1.0", + "node-schedule": "2.1.0" }, "optionalDependencies": { "@jitsi/node-ibeacons": "0.2.0", diff --git a/spot-electron/src/application-window/applicationwindow.js b/spot-electron/src/application-window/applicationwindow.js index 9f972b053..f7e5ac8cf 100644 --- a/spot-electron/src/application-window/applicationwindow.js +++ b/spot-electron/src/application-window/applicationwindow.js @@ -1,12 +1,10 @@ -const { - BrowserWindow -} = require('electron'); +const { BrowserWindow } = require('electron'); const isDev = require('electron-is-dev'); const process = require('process'); const { OnlineDetector } = require('../online-detector'); const { defaultSpotURL } = require('../../config'); -const { logger } = require('../logger'); +const { logger, fileLogger } = require('../logger'); /** * The constant is included into the user agent part to allow feature detection in future. @@ -95,6 +93,10 @@ function createApplicationWindow() { applicationWindow.loadURL(defaultSpotURL); logger.info(`Spot started with Spot-TV URL ${defaultSpotURL}`); + applicationWindow.webContents.on('console-message', (_, level, message) => { + fileLogger.logToFile(level, message); + }); + onlineDetector.start(); // Kiosk mode. On by default in production mode. It can either be forced or diff --git a/spot-electron/src/logger/fileLogger.js b/spot-electron/src/logger/fileLogger.js new file mode 100644 index 000000000..86df31b89 --- /dev/null +++ b/spot-electron/src/logger/fileLogger.js @@ -0,0 +1,54 @@ +const log = require('electron-log'); +const { app } = require('electron'); +const fs = require('fs'); +const path = require('path'); +const schedule = require('node-schedule'); + +log.transports.ipc.level = false; +log.transports.file.resolvePath = () => path.join(app.getPath('logs'), 'spot-console.log'); +log.transports.file.format = '{iso} {text}'; +log.transports.file.maxSize = 1048576 * 20; // 20mb + +// archive log file every day at 06:00AM +schedule.scheduleJob('0 6 * * *', () => { + const file = log.transports.file.getFile(); + + log.transports.file.archiveLog(file); + file.reset(); + + const currentDate = new Date().toISOString() + .replaceAll(/([:|.])/g, '-'); + const archiveLogFile = path.join(app.getPath('logs'), 'spot-console.old.log'); + const archiveDateLogFile = path.join(app.getPath('logs'), `spot-console.old.${currentDate}.log`); + + try { + fs.renameSync(archiveLogFile, archiveDateLogFile); + } catch (error) { + log.error(error); + } +}); + +const ELECTRON_LEVEL_INDEX_MAP = { + 0: 'debug', + 1: 'info', + 2: 'warn', + 3: 'error' +}; + +/** + * Logs a message to file. + * + * @param {string} level - The log level index. + * @param {string} message - The main string to be logged. + * @returns {void} + */ +function logToFile(level, message) { + const logType = ELECTRON_LEVEL_INDEX_MAP[level]; + const logMethod = log[logType] || log.log; + + logMethod(message); +} + +module.exports = { + logToFile +}; diff --git a/spot-electron/src/logger/index.js b/spot-electron/src/logger/index.js index fe36c2e65..51793c725 100644 --- a/spot-electron/src/logger/index.js +++ b/spot-electron/src/logger/index.js @@ -1,3 +1,4 @@ module.exports = { - logger: require('./logger') + logger: require('./logger'), + fileLogger: require('./fileLogger') }; diff --git a/spot-electron/src/spot-client-log-transport/SpotClientLogTransport.js b/spot-electron/src/spot-client-log-transport/SpotClientLogTransport.js index e57e5b6db..81f34133e 100644 --- a/spot-electron/src/spot-client-log-transport/SpotClientLogTransport.js +++ b/spot-electron/src/spot-client-log-transport/SpotClientLogTransport.js @@ -1,26 +1,5 @@ -const electronLog = require('electron-log'); - const { clientController, events } = require('../client-control'); -// Make the electron-log accept everything. -electronLog.transports.file.level = 'verbose'; - -// Configure electron-log to write to file only -electronLog.transports.console = undefined; -electronLog.transports.mainConsole = undefined; -electronLog.transports.rendererConsole = undefined; - -// Uncomment this line to try out electron file logger in dev -// electronLog.transports.file.file = './spot-electron-dev.log'; - -const JITSI_TO_ELECTRON_LEVELS = { - 'error': 'error', - 'warn': 'warn', - 'info': 'info', - 'trace': 'verbose', - 'debug': 'debug', - 'log': 'log' -}; /** * Log levels supported by the jitsi logger. @@ -30,7 +9,7 @@ const levels = Object.keys(require('jitsi-meet-logger').levels).map(l => l.toLow const LOG_CACHE_SIZE = 1000; /** - * A class. + * SpotClientLogTransport - used to send electron logs to renderer process in order to be displayed in web console. */ class SpotClientLogTransport { /** @@ -72,8 +51,7 @@ class SpotClientLogTransport { _logImpl(level, loggerName, message, context) { const msgString = `${loggerName} ${message}`; - this._logToElectronLog(level, loggerName, message, context); - + // send logs to renderer process once it has finished to load. if (clientController.canSendClientMessage()) { clientController.sendClientMessage('spot-electron-logs', level, msgString, context); } else { @@ -88,27 +66,6 @@ class SpotClientLogTransport { }); } } - - /** - * Forwards the log message to the 'electron-log' in order to write to the log file. - * - * @param {string} level - The jitsi logging level. - * @param {string} loggerName - Logger name(as defined by jitsi-logger lib). - * @param {string} message - The text message to be logged. - * @param {Object} context - JSON compatible context object with extra info. - * @private - * @returns {void} - */ - _logToElectronLog(level, loggerName, message, context) { - const logMethod = electronLog[JITSI_TO_ELECTRON_LEVELS[level]]; - - if (logMethod) { - logMethod && logMethod(message, JSON.stringify(context)); - } else { - // eslint-disable-next-line no-console - console.error(`Failed to map jitsi to electron log level:${level}`); - } - } } module.exports = new SpotClientLogTransport();