2023-02-20 04:23:19 +00:00
|
|
|
// LOG LEVELS:
|
|
|
|
// 0: Fatal
|
|
|
|
// 1: Error
|
|
|
|
// 2: Warn
|
|
|
|
// 3: Info
|
|
|
|
// 4: Debug
|
|
|
|
// Logs are written in-memory and logged to console if logLevel > showLogLevel
|
|
|
|
let loglevel = 0;
|
|
|
|
|
|
|
|
export const LEVEL_FATAL = 0;
|
|
|
|
export const LEVEL_ERROR = 1;
|
|
|
|
export const LEVEL_WARN = 2;
|
|
|
|
export const LEVEL_INFO = 3;
|
|
|
|
export const LEVEL_DEBUG = 4;
|
|
|
|
|
|
|
|
interface LogLine {
|
|
|
|
level: number,
|
|
|
|
module: string,
|
|
|
|
message: string,
|
|
|
|
timestamp: number,
|
|
|
|
deltaStart: number,
|
|
|
|
deltaLast: number
|
|
|
|
}
|
|
|
|
|
|
|
|
const debugLog: Array<LogLine> = [];
|
|
|
|
let timestampStart: number;
|
|
|
|
let deltaTimestamp: number;
|
|
|
|
let logger: Logger;
|
|
|
|
let loggerSetup = false;
|
|
|
|
|
|
|
|
export function logSetup() {
|
|
|
|
if (loggerSetup) return;
|
|
|
|
loggerSetup = true;
|
|
|
|
timestampStart = Date.now();
|
|
|
|
deltaTimestamp = Date.now();
|
|
|
|
logger = new Logger("Logger.ts");
|
|
|
|
consoleLogLevel(LEVEL_INFO);
|
|
|
|
logger.info("Logger setup complete");
|
|
|
|
}
|
|
|
|
|
|
|
|
function log(level: number, module: string, message: string) {
|
|
|
|
const log = {
|
|
|
|
level: level,
|
|
|
|
module: module,
|
|
|
|
message: message,
|
|
|
|
timestamp: Date.now(),
|
|
|
|
deltaStart: Date.now() - timestampStart,
|
|
|
|
deltaLast: Date.now() - deltaTimestamp
|
|
|
|
};
|
|
|
|
deltaTimestamp = Date.now();
|
|
|
|
|
|
|
|
debugLog.push(log);
|
|
|
|
|
|
|
|
consoleLogHandler(log);
|
|
|
|
}
|
|
|
|
|
|
|
|
function consoleLogHandler(log: LogLine) {
|
|
|
|
if (import.meta.env.SSR) return; // no logging in ssr
|
|
|
|
if (log.level <= loglevel) {
|
|
|
|
let textstyle = "";
|
|
|
|
switch (log.level) {
|
|
|
|
case 0:
|
|
|
|
textstyle = "color:red;font-weight:bold;";
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
textstyle = "color:red;";
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
textstyle = "color:yellow;";
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
textstyle = "";
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
textstyle = "color:gray;";
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
console.log(`%c${new Date(log.timestamp).toISOString()} ${(log.deltaStart / 1000).toFixed(3)}Σ ${(log.deltaLast / 1000).toFixed(3)}Δ\n%c[${log.module}]%c ${log.message}`, "color:gray", "color:#8c188c", textstyle);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export function consoleLogLevel(level: number) {
|
|
|
|
loglevel = level;
|
|
|
|
}
|
|
|
|
|
|
|
|
export function consoleLogDump() {
|
|
|
|
for (let i = 0; i < debugLog.length; i++) {
|
|
|
|
consoleLogHandler(debugLog[i]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export class Logger {
|
2023-02-20 17:01:32 +00:00
|
|
|
private readonly name: string;
|
2023-02-20 04:23:19 +00:00
|
|
|
|
|
|
|
constructor(name: string) {
|
|
|
|
this.name = name;
|
|
|
|
}
|
|
|
|
|
|
|
|
fatal(message: any) {
|
|
|
|
log(LEVEL_FATAL, this.name, message)
|
|
|
|
}
|
|
|
|
|
|
|
|
error(message: any) {
|
|
|
|
log(LEVEL_ERROR, this.name, message)
|
|
|
|
}
|
|
|
|
|
|
|
|
warn(message: any) {
|
|
|
|
log(LEVEL_WARN, this.name, message)
|
|
|
|
}
|
|
|
|
|
|
|
|
info(message: any) {
|
|
|
|
log(LEVEL_INFO, this.name, message)
|
|
|
|
}
|
|
|
|
|
|
|
|
debug(message: any) {
|
|
|
|
log(LEVEL_DEBUG, this.name, message)
|
|
|
|
}
|
|
|
|
}
|