@denodnt/logger
Version:
deno logger available for deno and NPM
263 lines (262 loc) • 8.53 kB
JavaScript
"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;