2021-11-28 13:06:52 +01:00
|
|
|
export enum LogLevel {
|
|
|
|
|
DEBUG,
|
|
|
|
|
INFO,
|
|
|
|
|
ERROR,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export class Logger {
|
2021-11-28 19:40:16 +01:00
|
|
|
private static instance: LoggerInstance
|
|
|
|
|
|
|
|
|
|
public static instantiate(
|
2022-02-10 17:27:35 +01:00
|
|
|
tag: string,
|
2021-11-28 19:40:16 +01:00
|
|
|
correlationId: string,
|
|
|
|
|
level = LogLevel.ERROR
|
|
|
|
|
): LoggerInstance {
|
2022-02-10 17:27:35 +01:00
|
|
|
Logger.instance = new LoggerInstance(tag, correlationId, level)
|
2021-11-28 19:40:16 +01:00
|
|
|
return Logger.instance
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static getInstance(): LoggerInstance {
|
|
|
|
|
return Logger.instance
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static debug(message: string, details?: unknown): void {
|
|
|
|
|
Logger.getInstance().debug(message, details)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static info(message: string, details?: unknown): void {
|
|
|
|
|
Logger.getInstance().info(message, details)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static error(message: string, details?: unknown): void {
|
|
|
|
|
Logger.getInstance().error(message, details)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export class LoggerInstance {
|
2022-02-10 17:27:35 +01:00
|
|
|
private readonly tag: string
|
2021-11-28 13:06:52 +01:00
|
|
|
private readonly correlationId: string
|
|
|
|
|
private readonly level: LogLevel
|
|
|
|
|
|
2022-02-10 17:27:35 +01:00
|
|
|
public constructor(tag: string, correlationId: string, level = LogLevel.ERROR) {
|
|
|
|
|
this.tag = tag
|
2021-11-28 13:06:52 +01:00
|
|
|
this.correlationId = correlationId
|
|
|
|
|
this.level = level
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private log(logLevel: LogLevel, message: string, details?: unknown): void {
|
|
|
|
|
if (logLevel < this.level) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let levelString
|
|
|
|
|
switch (logLevel) {
|
|
|
|
|
case LogLevel.ERROR:
|
|
|
|
|
levelString = 'ERROR'
|
|
|
|
|
break
|
|
|
|
|
case LogLevel.INFO:
|
|
|
|
|
levelString = 'INFO'
|
|
|
|
|
break
|
|
|
|
|
case LogLevel.DEBUG:
|
|
|
|
|
default:
|
|
|
|
|
levelString = 'DEBUG'
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-10 17:27:35 +01:00
|
|
|
let fmtString = '<%s> [%s] %s: %s'
|
|
|
|
|
const params: Array<unknown> = [this.tag, this.correlationId, levelString, message]
|
2021-11-28 13:06:52 +01:00
|
|
|
if (details) {
|
|
|
|
|
params.push(details)
|
|
|
|
|
fmtString += ' - %O'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (logLevel === LogLevel.ERROR) {
|
|
|
|
|
console.error(fmtString, ...params)
|
|
|
|
|
} else {
|
|
|
|
|
console.log(fmtString, ...params)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public debug(message: string, details?: unknown): void {
|
|
|
|
|
this.log(LogLevel.DEBUG, message, details)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public info(message: string, details?: unknown): void {
|
|
|
|
|
this.log(LogLevel.INFO, message, details)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public error(message: string, details?: unknown): void {
|
|
|
|
|
this.log(LogLevel.ERROR, message, details)
|
|
|
|
|
}
|
|
|
|
|
}
|