diff options
| author | Oskar Nyberg <oskar@mullvad.net> | 2023-10-19 14:00:51 +0200 |
|---|---|---|
| committer | Oskar Nyberg <oskar@mullvad.net> | 2023-10-20 11:42:17 +0200 |
| commit | 7d2b5128e456f8524b40638fbd1fbd758f94cb3c (patch) | |
| tree | 4c4d07e951987e6b502566f49b675b67b14f4ee8 /gui/src/shared/logging.ts | |
| parent | 4319388dbbd08fd8fe90a5d6ed5b8fb460b86e60 (diff) | |
| download | mullvadvpn-7d2b5128e456f8524b40638fbd1fbd758f94cb3c.tar.xz mullvadvpn-7d2b5128e456f8524b40638fbd1fbd758f94cb3c.zip | |
Add console.log error handling
Diffstat (limited to 'gui/src/shared/logging.ts')
| -rw-r--r-- | gui/src/shared/logging.ts | 66 |
1 files changed, 39 insertions, 27 deletions
diff --git a/gui/src/shared/logging.ts b/gui/src/shared/logging.ts index c2537e00d4..0be8de8c4b 100644 --- a/gui/src/shared/logging.ts +++ b/gui/src/shared/logging.ts @@ -55,43 +55,55 @@ export class Logger { this.outputs .filter((output) => level <= output.level) .forEach(async (output) => { - const maybePromise = output.write(level, message); - if (maybePromise instanceof Promise) { - try { - await maybePromise; - } catch (e) { - const error = e as Error; - console.error( - `${output.constructor.name}.write: ${error.message}. Original message: ${message}`, - ); - } + try { + await output.write(level, message); + } catch (e) { + const error = e as Error; + console.error( + `${output.constructor.name}.write: ${error.message}. Original message: ${message}`, + ); } }); } } export class ConsoleOutput implements ILogOutput { + private disabled = false; + constructor(public level: LogLevel) {} public write(level: LogLevel, message: string) { - switch (level) { - case LogLevel.error: - console.error(message); - break; - case LogLevel.warning: - console.warn(message); - break; - case LogLevel.info: - console.info(message); - break; - case LogLevel.verbose: - console.log(message); - break; - case LogLevel.debug: - console.log(message); - break; + if (this.disabled) { + return; + } + + try { + switch (level) { + case LogLevel.error: + console.error(message); + break; + case LogLevel.warning: + console.warn(message); + break; + case LogLevel.info: + console.info(message); + throw new Error('Log failed'); + break; + case LogLevel.verbose: + console.log(message); + break; + case LogLevel.debug: + console.log(message); + break; + } + } catch (error) { + this.disabled = true; + + const message = error instanceof Object && 'message' in error ? error.message : ''; + logger.error('Disabling console output due to:', message, error); } } } -export default new Logger(); +const logger = new Logger(); +export default logger; |
