UNPKG

@denodnt/logger

Version:

deno logger available for deno and NPM

263 lines (262 loc) 8.53 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var _Logger_info, _Logger_warn, _Logger_error, _Logger_write; Object.defineProperty(exports, "__esModule", { value: true }); const dntShim = __importStar(require("./_dnt.shims.js")); const stdout_js_1 = __importDefault(require("./stdout.js")); const writer_js_1 = __importDefault(require("./writer.js")); const eol_js_1 = __importDefault(require("./eol.js")); const fs_js_1 = require("./fs.js"); const date_js_1 = __importDefault(require("./date.js")); const deps_js_1 = require("./deps.js"); const types_js_1 = __importDefault(require("./types.js")); const { inspect } = dntShim.Deno; const noop = async () => { }; /** * Logger class */ class Logger { constructor() { Object.defineProperty(this, "stdout", { enumerable: true, configurable: true, writable: true, value: stdout_js_1.default }); Object.defineProperty(this, "encoder", { enumerable: true, configurable: true, writable: true, value: new TextEncoder() }); Object.defineProperty(this, "writer", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "rotate", { enumerable: true, configurable: true, writable: true, value: false }); Object.defineProperty(this, "dir", { enumerable: true, configurable: true, writable: true, value: void 0 }); _Logger_info.set(this, this.info); _Logger_warn.set(this, this.warn); _Logger_error.set(this, this.error); _Logger_write.set(this, this.write); } format(...args) { const msg = args.map((arg) => typeof arg === "string" ? arg : inspect(arg)) .join(" "); // const msg = args.map(arg => inspect(arg, { // showHidden: true, // depth: 4, // colors: true, // indentLevel: 2 // })).join(''); return this.encoder.encode((0, deps_js_1.stripAnsiCode)(msg) + eol_js_1.default); } /** * Log message with info level * @param args data to log */ async info(...args) { args = [this.getInfo(), ...args]; this.stdout(...args); if (this.dir) { await this.write({ dir: this.dir, type: types_js_1.default.INFO, args, }); } } /** * Log message with warning level * @param args data to log */ async warn(...args) { args = [this.getWarn(), ...args]; this.stdout(...args); if (this.dir) { await this.write({ dir: this.dir, type: types_js_1.default.WARN, args, }); } } /** * Log message with error level * @param args data to log */ async error(...args) { args = [this.getError(), ...args]; this.stdout(...args); if (this.dir) { await this.write({ dir: this.dir, type: types_js_1.default.ERROR, args, }); } } write({ dir, type, args }) { const date = this.getDate(); const filename = this.rotate === true ? `${date}_${type}` : type; const path = `${dir}/${filename}.log`; const msg = this.format(...args); return this.writer.write({ path, msg, type }); } /** * init file logger * @param dir * @param options */ async initFileLogger(dir, options = {}) { const exist = await (0, fs_js_1.exists)(dir); if (!exist) { (0, stdout_js_1.default)(`${this.getWarn()} Log folder does not exist`); try { dntShim.Deno.mkdirSync(dir, { recursive: true }); (0, stdout_js_1.default)(`${this.getInfo()} Log folder create success`); } catch (error) { (0, stdout_js_1.default)(`${this.getError()} Log folder create failed: ` + error); } } const { rotate, maxBytes, maxBackupCount } = options; if (rotate === true) this.rotate = true; this.dir = dir; this.writer = new writer_js_1.default({ maxBytes, maxBackupCount, }); } /** * disable a specific type of logger * @param type Level of logger to disable */ disable(type) { if (!type) { this.info = noop; this.warn = noop; this.error = noop; return; } if (type === "info") { this.info = noop; return; } if (type === "warn") { this.warn = noop; return; } if (type === "error") { this.error = noop; return; } } /** * Enable a specific type of logger * @param type Level of logger to enable */ enable(type) { if (!type) { this.info = __classPrivateFieldGet(this, _Logger_info, "f"); this.warn = __classPrivateFieldGet(this, _Logger_warn, "f"); this.error = __classPrivateFieldGet(this, _Logger_error, "f"); } if (type === "info") { this.info = __classPrivateFieldGet(this, _Logger_info, "f"); return; } if (type === "warn") { this.warn = __classPrivateFieldGet(this, _Logger_warn, "f"); return; } if (type === "error") { this.error = __classPrivateFieldGet(this, _Logger_error, "f"); return; } } /** * Disable console logger */ disableConsole() { this.stdout = noop; } /** * Enable console logger */ enableConsole() { this.stdout = stdout_js_1.default; } /** * Disable file logger */ disableFile() { this.write = noop; } /** * Enable file logger */ enableFile() { this.write = __classPrivateFieldGet(this, _Logger_write, "f"); } getInfo() { return (0, deps_js_1.green)(`${this.getNow()} Info:`); } getWarn() { return (0, deps_js_1.green)(this.getNow()) + (0, deps_js_1.yellow)(` Warn:`); } getError() { return (0, deps_js_1.green)(this.getNow()) + (0, deps_js_1.red)(` Error:`); } getNow() { return new date_js_1.default().toLocaleString(); } getDate() { return new date_js_1.default().toLocaleDateString(); } } _Logger_info = new WeakMap(), _Logger_warn = new WeakMap(), _Logger_error = new WeakMap(), _Logger_write = new WeakMap(); exports.default = Logger;