diff --git a/electron/__tests__/logger.test.ts b/electron/__tests__/logger.test.ts index 91719fc9e4..637f2d609f 100644 --- a/electron/__tests__/logger.test.ts +++ b/electron/__tests__/logger.test.ts @@ -6,48 +6,64 @@ describe('Logger', () => { test('log a error message invokes console.error', () => { console.error = jest.fn() logger.logError('My error message') - expect(console.error).toBeCalledWith('ERROR: My error message') + expect(console.error).toBeCalledWith( + expect.stringContaining('ERROR: My error message') + ) // log with prefix logger.logError('My error message', logger.LogPrefix.Frontend) expect(console.error).toBeCalledWith( - `ERROR: [${logger.LogPrefix.Frontend}]: My error message` + expect.stringContaining( + `ERROR: [${logger.LogPrefix.Frontend}]: My error message` + ) ) }) test('log a warning message invokes console.log', () => { console.warn = jest.fn() logger.logWarning('My warning message') - expect(console.warn).toBeCalledWith('WARNING: My warning message') + expect(console.warn).toBeCalledWith( + expect.stringContaining('WARNING: My warning message') + ) // log with prefix logger.logWarning('My warning message', logger.LogPrefix.Legendary) expect(console.warn).toBeCalledWith( - `WARNING: [${logger.LogPrefix.Legendary}]: My warning message` + expect.stringContaining( + `WARNING: [${logger.LogPrefix.Legendary}]: My warning message` + ) ) }) test('log a info message invokes console.log', () => { console.log = jest.fn() logger.logInfo('My info message') - expect(console.log).toBeCalledWith('INFO: My info message') + expect(console.log).toBeCalledWith( + expect.stringContaining('INFO: My info message') + ) // log with prefix logger.logInfo('My info message', logger.LogPrefix.Frontend) expect(console.log).toBeCalledWith( - `INFO: [${logger.LogPrefix.Frontend}]: My info message` + expect.stringContaining( + `INFO: [${logger.LogPrefix.Frontend}]: My info message` + ) ) }) test('log a debug message invokes console.log', () => { console.log = jest.fn() logger.logDebug('My debug message') - expect(console.log).toBeCalledWith('DEBUG: My debug message') + expect(console.log).toBeCalledWith( + expect.stringContaining('DEBUG: My debug message') + ) // log with prefix logger.logDebug('My debug message', logger.LogPrefix.Legendary) expect(console.log).toBeCalledWith( - `DEBUG: [${logger.LogPrefix.Legendary}]: My debug message` + expect.stringContaining( + `DEBUG: [${logger.LogPrefix.Legendary}]: My debug message` + ) ) }) }) diff --git a/electron/legendary/library.ts b/electron/legendary/library.ts index e4d704b2b6..e5c7c3e87a 100644 --- a/electron/legendary/library.ts +++ b/electron/legendary/library.ts @@ -98,9 +98,9 @@ class LegendaryLibrary { const child = spawn(legendaryBin, ['list', getUeAssets]) child.stderr.on('data', (data) => { if (`${data}`.includes('ERROR')) { - logError(`${data}`, LogPrefix.Legendary) + logError(`${data}`.trim(), LogPrefix.Legendary) } else { - logInfo(`${data}`, LogPrefix.Legendary) + logInfo(`${data}`.trim(), LogPrefix.Legendary) } }) child.on('error', (err) => rej(`${err}`)) diff --git a/electron/logger/logger.ts b/electron/logger/logger.ts index 6858b01d31..2c50174726 100644 --- a/electron/logger/logger.ts +++ b/electron/logger/logger.ts @@ -33,6 +33,7 @@ export enum LogPrefix { Backend = 'Backend' } +let longestPrefix = 0 const configStore = new Store({ cwd: 'store' }) @@ -42,6 +43,30 @@ function convertToStringArray(param: string | string[]): string[] { return typeof param === 'string' ? [param] : param } +const padNumberToTwo = (n: number) => { + return ('0' + n).slice(-2) +} + +const repeatString = (n: number, char: string) => { + return n > 0 ? char.repeat(n) : '' +} + +const getTimeStamp = () => { + const ts = new Date() + + return `(${[ + padNumberToTwo(ts.getHours()), + padNumberToTwo(ts.getMinutes()), + padNumberToTwo(ts.getSeconds()) + ].join(':')})` +} + +const getPrefixString = (prefix: LogPrefix) => { + return prefix !== LogPrefix.General + ? `[${prefix}]: ${repeatString(longestPrefix - prefix.length, ' ')}` + : '' +} + /** * Log debug messages * @param text debug messages to log @@ -54,10 +79,9 @@ export function logDebug( prefix: LogPrefix = LogPrefix.General, skipLogToFile = false ) { - const prefixString = prefix !== LogPrefix.General ? `[${prefix}]: ` : '' - const extendText = `DEBUG: ${prefixString}${convertToStringArray(text).join( - ' ' - )}` + const extendText = `${getTimeStamp()} DEBUG: ${getPrefixString( + prefix + )}${convertToStringArray(text).join(' ')}` console.log(extendText) if (!skipLogToFile) { @@ -77,10 +101,9 @@ export function logError( prefix: LogPrefix = LogPrefix.General, skipLogToFile = false ) { - const prefixString = prefix !== LogPrefix.General ? `[${prefix}]: ` : '' - const extendText = `ERROR: ${prefixString}${convertToStringArray(text).join( - ' ' - )}` + const extendText = `${getTimeStamp()} ERROR: ${getPrefixString( + prefix + )}${convertToStringArray(text).join(' ')}` console.error(extendText) if (!skipLogToFile) { @@ -100,10 +123,9 @@ export function logInfo( prefix: LogPrefix = LogPrefix.General, skipLogToFile = false ) { - const prefixString = prefix !== LogPrefix.General ? `[${prefix}]: ` : '' - const extendText = `INFO: ${prefixString}${convertToStringArray(text).join( - ' ' - )}` + const extendText = `${getTimeStamp()} INFO: ${getPrefixString( + prefix + )}${convertToStringArray(text).join(' ')}` console.log(extendText) if (!skipLogToFile) { @@ -123,10 +145,9 @@ export function logWarning( prefix: LogPrefix = LogPrefix.General, skipLogToFile = false ) { - const prefixString = prefix !== LogPrefix.General ? `[${prefix}]: ` : '' - const extendText = `WARNING: ${prefixString}${convertToStringArray(text).join( - ' ' - )}` + const extendText = `${getTimeStamp()} WARNING: ${getPrefixString( + prefix + )}${convertToStringArray(text).join(' ')}` console.warn(extendText) if (!skipLogToFile) { @@ -193,6 +214,13 @@ export function createNewLogFileAndClearOldOnces(): createLogFileReturn { configStore.set('general-logs', logs) + // get longest prefix to log lines in a kind of table + for (const prefix in LogPrefix) { + if (longestPrefix < String(prefix).length) { + longestPrefix = String(prefix).length + } + } + return logs }