UNPKG

web3.db-fileconnector

Version:

GraphQL System Built on web3 technologies. Web3.DB is an open database built on top of web3 technologies. It is a decentralized, open-source database that allows users to store and query data in a secure and efficient manner. The system is designed to be

103 lines (86 loc) 2.42 kB
import * as winston from "winston"; import DailyRotateFile from "winston-daily-rotate-file"; import util from "util"; import { cliColors } from "../utils/cliColors.js"; function reduceCliColors(colors) { const merged = []; for (const color of Object.values(colors)) { if (typeof color === "object") { merged.push(...reduceCliColors(color)); } else { merged.push(color); } } return merged; } const colorArray = reduceCliColors(cliColors); const sanitizeColors = (messages) => { const sanitized = []; for (const message of messages) { if (colorArray.includes(message)) { continue; } sanitized.push(message); } return sanitized; }; // TODO: make it relative via dirname const logsDir = "./server/logs"; const errorFileRotate = new DailyRotateFile({ level: "error", filename: "%DATE%.error.log", datePattern: "YYYY-MM-DD-HH", zippedArchive: true, maxSize: "20m", maxFiles: "5", dirname: logsDir, }); const infoFileRotate = new DailyRotateFile({ level: "info", filename: "%DATE%.info.log", datePattern: "YYYY-MM-DD-HH", zippedArchive: true, maxSize: "10m", maxFiles: "1", dirname: logsDir, }); const debugFileRotate = new DailyRotateFile({ level: "debug", filename: "%DATE%.debug.log", datePattern: "YYYY-MM-DD-HH", zippedArchive: true, maxSize: "10m", maxFiles: "1", dirname: logsDir, }); export const _logger = winston.createLogger({ format: winston.format.combine( winston.format.timestamp(), winston.format.printf(({ level, message, label, timestamp }) => { return JSON.stringify({ level, message: util.format(...sanitizeColors(message)), label, timestamp, }); }) ), transports: [ errorFileRotate, debugFileRotate, infoFileRotate, new winston.transports.Console({ level: process.env.LOG_LEVEL || "info", format: winston.format.printf(({ level, message, label }) => { return `[${level.toUpperCase()}${label ? `:${label}` : ""}] ${util.format(...message)}`; }), }), ], }); const logger = { info: (...msgs) => _logger.info(msgs), warn: (...warns) => _logger.warn(warns), error: (...errors) => _logger.error(errors), debug: (...msgs) => _logger.debug(msgs), }; export default logger;