UNPKG

@kyve/core-beta

Version:

🚀 The base KYVE node implementation.

89 lines (74 loc) • 2.46 kB
import { appendFileSync, existsSync, mkdirSync } from "fs"; import path from "path"; import { ILogObject, Logger } from "tslog"; import { Node, standardizeJSON } from "../.."; /** * setupLogger creates the logger instance and defines the home and file * where logs are saved for debugging. * * @method setupLogger * @param {Node} this * @return {void} */ export function setupLogger(this: Node): void { try { // if "logs" folder under target path does not exist create it if (!existsSync(path.join(this.home, "logs"))) { mkdirSync(path.join(this.home, "logs"), { recursive: true }); } // name the log file after the time the node got started const logFile = `${new Date().toISOString()}.log`; const logToTransport = (log: ILogObject) => { const message = log.argumentsArray[0]; if (typeof message === "string") { // don't save cache logs because this would bloat // the local storage if (message.startsWith("this.cache")) { return; } // don't save runtime logs because this would bloat // the local storage if (message.startsWith("this.runtime")) { return; } } // format log message let format = `${log.date.toISOString()} ${log.logLevel.toUpperCase()}\t[${ log.fileName }:${log.lineNumber}]`; for (const arg of log.argumentsArray) { if (typeof arg === "string") { format += ` ${arg}`; } else { format += ` ${JSON.stringify(arg)}`; } } // save logs to specified path target appendFileSync(path.join(this.home, `logs`, logFile), format + "\n"); }; // hide verbose logging information const logger = new Logger({ displayFilePath: "hidden", displayFunctionName: this.debug, }); // set log level depending on debug mode // TODO @regenisis: remove deprecated "--verbose" option flag logger.setSettings({ minLevel: this.debug ? undefined : "info", }); logger.attachTransport({ silly: logToTransport, debug: logToTransport, trace: logToTransport, info: logToTransport, warn: logToTransport, error: logToTransport, fatal: logToTransport, }); this.logger = logger; } catch (err) { this.logger.fatal(`Failed to init logger. Exiting ...`); this.logger.fatal(standardizeJSON(err)); process.exit(1); } }