|
| 1 | +import { LogProviderInterface } from "../log-provider.interface"; |
| 2 | + |
| 3 | +export enum ConsoleLogLevel { |
| 4 | + TRACE, |
| 5 | + DEBUG, |
| 6 | + INFO, |
| 7 | + WARN, |
| 8 | + ERROR, |
| 9 | +} |
| 10 | + |
| 11 | +export interface ConsoleLogProviderConfig { |
| 12 | + logLevel: ConsoleLogLevel, |
| 13 | + withTimeStamp: boolean, |
| 14 | +} |
| 15 | + |
| 16 | +const defaultConfig: ConsoleLogProviderConfig = { |
| 17 | + logLevel: ConsoleLogLevel.INFO, |
| 18 | + withTimeStamp: true |
| 19 | +} |
| 20 | + |
| 21 | +export class ConsoleLogProvider implements LogProviderInterface { |
| 22 | + constructor(private config: ConsoleLogProviderConfig = defaultConfig) { |
| 23 | + this.trace = this.trace.bind(this); |
| 24 | + this.debug = this.debug.bind(this); |
| 25 | + this.info = this.info.bind(this); |
| 26 | + this.warn = this.warn.bind(this); |
| 27 | + this.error = this.error.bind(this); |
| 28 | + } |
| 29 | + |
| 30 | + private log(logLevel: ConsoleLogLevel, message: string | Error, data?: {}) { |
| 31 | + if (logLevel >= this.config.logLevel) { |
| 32 | + const timeStampPrefix = `${new Date().toISOString()} - `; |
| 33 | + const extendedMessage = `${(this.config.withTimeStamp == null || this.config.withTimeStamp) ? timeStampPrefix : ''}${ConsoleLogLevel[logLevel]} - ${(message instanceof Error) ? message.message : message}`; |
| 34 | + switch (logLevel) { |
| 35 | + case ConsoleLogLevel.TRACE: |
| 36 | + if (data) { |
| 37 | + console.trace(extendedMessage, data); |
| 38 | + } else { |
| 39 | + console.trace(extendedMessage); |
| 40 | + } |
| 41 | + break; |
| 42 | + case ConsoleLogLevel.DEBUG: |
| 43 | + if (data) { |
| 44 | + console.debug(extendedMessage, data); |
| 45 | + } else { |
| 46 | + console.debug(extendedMessage); |
| 47 | + } |
| 48 | + break; |
| 49 | + case ConsoleLogLevel.INFO: |
| 50 | + if (data) { |
| 51 | + console.info(extendedMessage, data); |
| 52 | + } else { |
| 53 | + console.info(extendedMessage); |
| 54 | + } |
| 55 | + break; |
| 56 | + case ConsoleLogLevel.WARN: |
| 57 | + if (data) { |
| 58 | + console.warn(extendedMessage, data); |
| 59 | + } else { |
| 60 | + console.warn(extendedMessage); |
| 61 | + } |
| 62 | + break; |
| 63 | + case ConsoleLogLevel.ERROR: |
| 64 | + (message as Error).message = extendedMessage; |
| 65 | + if (data) { |
| 66 | + console.error(message, data); |
| 67 | + } else { |
| 68 | + console.error(message); |
| 69 | + } |
| 70 | + break; |
| 71 | + } |
| 72 | + } |
| 73 | + } |
| 74 | + |
| 75 | + public trace(message: string, data?: {}) { |
| 76 | + this.log(ConsoleLogLevel.TRACE, message, data); |
| 77 | + } |
| 78 | + public debug(message: string, data?: {}) { |
| 79 | + this.log(ConsoleLogLevel.DEBUG, message, data); |
| 80 | + } |
| 81 | + public info(message: string, data?: {}) { |
| 82 | + this.log(ConsoleLogLevel.INFO, message, data); |
| 83 | + } |
| 84 | + public warn(message: string, data?: {}) { |
| 85 | + this.log(ConsoleLogLevel.WARN, message, data); |
| 86 | + } |
| 87 | + public error(message: Error, data?: {}) { |
| 88 | + this.log(ConsoleLogLevel.ERROR, message, data); |
| 89 | + } |
| 90 | +} |
| 91 | + |
0 commit comments