From ba9d3e2e901bba381416438ec8975fc4c55feabe Mon Sep 17 00:00:00 2001 From: Rajat Sharma Date: Thu, 10 Nov 2022 13:23:24 +0530 Subject: [PATCH 01/11] update .gitignore --- .gitignore | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 31226a4..f2c64e7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,6 @@ -node_modules/ -temp/ +node_modules +temp +lib + +*.log +*.zip -- GitLab From b2b19da6e7281dcfbfb406a6050d92b7494d237c Mon Sep 17 00:00:00 2001 From: Rajat Sharma Date: Thu, 10 Nov 2022 13:23:51 +0530 Subject: [PATCH 02/11] update tsconfig --- jsconfig.json | 5 ----- tsconfig.json | 20 ++++++++++++++++++++ 2 files changed, 20 insertions(+), 5 deletions(-) delete mode 100644 jsconfig.json create mode 100644 tsconfig.json diff --git a/jsconfig.json b/jsconfig.json deleted file mode 100644 index afba79d..0000000 --- a/jsconfig.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "compilerOptions": { - "typeRoots": ["./"] - } -} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..def4816 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "allowJs": false, + "checkJs": false, + "outDir": "lib", + "target": "ES5", + "moduleResolution": "Node", + "module": "CommonJS", + "sourceMap": true, + "declaration": true, + "declarationMap": true, + "strict": true, + "useDefineForClassFields": false, + "strictPropertyInitialization": false, + "esModuleInterop": true + }, + "include": [ + "src" + ] +} \ No newline at end of file -- GitLab From a91239f8896229e11b8e85a01086932a55e49efa Mon Sep 17 00:00:00 2001 From: Rajat Sharma Date: Thu, 10 Nov 2022 13:24:02 +0530 Subject: [PATCH 03/11] added .prettierrc --- .prettierrc | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .prettierrc diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..02f8c69 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,6 @@ +{ + "tabWidth": 3, + "trailingComma": "es5", + "semi": false, + "singleQuote": true +} \ No newline at end of file -- GitLab From d8fa0b7224fd5e0e54e5195788d86ae1b53a13b7 Mon Sep 17 00:00:00 2001 From: Rajat Sharma Date: Thu, 10 Nov 2022 13:24:33 +0530 Subject: [PATCH 04/11] update package.json and dependencies --- package-lock.json | 160 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 18 ++++-- 2 files changed, 173 insertions(+), 5 deletions(-) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..1ab5c64 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,160 @@ +{ + "name": "@rxpm/logger", + "version": "2.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@rxpm/logger", + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2" + }, + "devDependencies": { + "@types/node": "^18.11.9", + "typescript": "^4.8.4" + } + }, + "node_modules/@types/node": { + "version": "18.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", + "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", + "dev": true + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/typescript": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + } + }, + "dependencies": { + "@types/node": { + "version": "18.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", + "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "typescript": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "dev": true + } + } +} diff --git a/package.json b/package.json index 9ee07be..89914f3 100644 --- a/package.json +++ b/package.json @@ -1,21 +1,29 @@ { "name": "@rxpm/logger", "description": "Simple logger library for NodeJs based applications", - "version": "1.0.0", - "main": "main.js", - "type": "module", + "version": "2.0.0", + "main": "lib/index.js", + "type": "commonjs", + "scripts": { + "build": "tsc" + }, "keywords": [ "logger", "loggerjs", "node-logger" ], + "files": ["lib/**/*"], "author": { "name": "Rajat Sharma", "email": "rxx175@gmail.com", "url": "https://github.com/rajatxs" }, - "license": "MIT", + "license": "ISC", + "devDependencies": { + "@types/node": "^18.11.9", + "typescript": "^4.8.4" + }, "dependencies": { - "chalk": "^5.0.0" + "chalk": "^4.1.2" } } -- GitLab From dc760ac1539c46eeec6101a2fa86d9754ffed4df Mon Sep 17 00:00:00 2001 From: Rajat Sharma Date: Thu, 10 Nov 2022 13:24:52 +0530 Subject: [PATCH 05/11] remove yarn.lock --- yarn.lock | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 6338a7d..0000000 --- a/yarn.lock +++ /dev/null @@ -1,8 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -chalk@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.0.tgz#bd96c6bb8e02b96e08c0c3ee2a9d90e050c7b832" - integrity sha512-/duVOqst+luxCQRKEo4bNxinsOQtMP80ZYm7mMqzuh5PociNL0PvmHFvREJ9ueYL2TxlHjBcmLCdmocx9Vg+IQ== -- GitLab From 801833f7c402b28c757a26256ecd47084778cba8 Mon Sep 17 00:00:00 2001 From: Rajat Sharma Date: Thu, 10 Nov 2022 13:25:24 +0530 Subject: [PATCH 06/11] use src dir --- @types/index.d.ts | 26 ------ main.js | 209 ---------------------------------------------- src/index.ts | 163 ++++++++++++++++++++++++++++++++++++ src/interfaces.ts | 34 ++++++++ src/utils.ts | 71 ++++++++++++++++ src/values.ts | 10 +++ 6 files changed, 278 insertions(+), 235 deletions(-) delete mode 100644 @types/index.d.ts delete mode 100644 main.js create mode 100644 src/index.ts create mode 100644 src/interfaces.ts create mode 100644 src/utils.ts create mode 100644 src/values.ts diff --git a/@types/index.d.ts b/@types/index.d.ts deleted file mode 100644 index d4cdd01..0000000 --- a/@types/index.d.ts +++ /dev/null @@ -1,26 +0,0 @@ - -declare type LogLevel = 'DEBUG' | 'ERROR' | 'INFO' | 'WARN'; - -declare interface LogContext { - text: string, - format: string -} - -declare interface LoggerWriteOptions { - enable?: boolean, - dir: string, - filename: string -} - -declare interface LoggerInitOptions { - namespace?: string, - enable?: string, - write?: LoggerWriteOptions -} - -declare interface LoggerCreateOptions { - level?: LogLevel, - namespace?: string, - args?: any[], - timestamp?: boolean -} diff --git a/main.js b/main.js deleted file mode 100644 index 8a21b82..0000000 --- a/main.js +++ /dev/null @@ -1,209 +0,0 @@ -import path from 'path'; -import chalk from 'chalk'; -import util from 'util'; -import { EventEmitter } from 'events'; -import { createWriteStream } from 'fs'; - -export class Logger extends EventEmitter { - /** @type {import('fs').WriteStream} */ - #writeStream = null; - - /** @type {string} */ - #outFile = null; - - /** - * @param {string} loggerName - * @param {LoggerInitOptions} initOptions - */ - constructor(loggerName, initOptions = {}) { - super(); - this.name = loggerName; - this.enable = initOptions.enable || false; - this.namespace = initOptions.namespace; - - if ('write' in initOptions && initOptions.write.enable) { - this.#outFile = path.resolve( - initOptions.write.dir, - initOptions.write.filename - ); - - this.#writeStream = createWriteStream(this.#outFile, { - encoding: 'utf8', - flags: 'a', - }); - - this.on('created', this.#writeLog); - } - } - - /** - * Returns log timestamp context - * @returns {LogContext} - */ - #getTimestampContext() { - const time = new Date(); - const text = time.toISOString(); - const format = chalk.italic(chalk.dim('(' + time.toLocaleString() + ')')); - - return { text, format }; - } - - /** - * Returns log namespace context - * @param {LogLevel} level - * @param {string} val - * @returns {LogContext} - */ - #getNamespaceContext(level, val) { - const namespace = val || this.namespace; - let format; - - switch (level) { - default: - case 'DEBUG': - format = chalk.whiteBright(namespace); - break; - - case 'ERROR': - format = chalk.redBright(namespace); - break; - - case 'INFO': - format = chalk.blueBright(namespace); - break; - - case 'WARN': - format = chalk.yellowBright(namespace); - break; - } - - return { text: namespace, format }; - } - - /** - * Returns log message context - * @param {...any} args - * @returns {LogContext} - */ - #getMessageContext(...args) { - const msg = util.format(...args); - const format = chalk.white(msg); - - return { text: msg, format }; - } - - /** - * Created formatted log string - * @param {LoggerCreateOptions} options - */ - #createLog(options = {}) { - const { - level = 'DEBUG', - namespace = this.namespace, - args = [], - timestamp = true, - } = options; - - const nsFmt = this.#getNamespaceContext(level, namespace); - const msgFmt = this.#getMessageContext(...args); - const tsFmt = this.#getTimestampContext(); - let fmtList = []; - let fmtLog, meta; - - // 1. assign namespace - fmtList.push(nsFmt.format); - - // 2. assign log messafe - fmtList.push(msgFmt.format); - - // 3. assign timestamp - if (timestamp) { - fmtList.push(tsFmt.format); - } - - // create formatted log string - fmtLog = util.format(...fmtList); - - meta = { - lebel: level.toUpperCase(), - namespace: nsFmt.text, - msg: msgFmt.text, - timestamp: tsFmt.text, - args, - fmt: fmtLog, - }; - - this.emit('created', meta); - - return fmtLog; - } - - /** - * Write log to specified file - * @param {object} logInfo - Log info - */ - #writeLog(logInfo) { - const type = logInfo.lebel; - let logStr, - parts = [ - type, - '[' + logInfo.namespace + ']', - '(' + logInfo.timestamp + ')', - logInfo.msg, - ]; - - logStr = parts.join(' ') + '\n'; - - if (this.#writeStream) { - this.#writeStream.write(logStr); - } - } - - /** - * Print log string - * @param {string} str - */ - #printLog(str) { - if (!this.enable) { - return; - } - - process.stdout.write(str + '\n'); - } - - /** - * Write log with default namespace format - * @param {string} namespace - * @param {...any} args - */ - debug(namespace, ...args) { - this.#printLog(this.#createLog({ level: 'DEBUG', args, namespace })); - } - - /** - * Write log with error namespace format - * @param {string} namespace - * @param {...any} args - */ - error(namespace, ...args) { - this.#printLog(this.#createLog({ level: 'ERROR', args, namespace })); - } - - /** - * Write log with info namespace format - * @param {string} namespace - * @param {...any} args - */ - info(namespace, ...args) { - this.#printLog(this.#createLog({ level: 'INFO', args, namespace })); - } - - /** - * Write log with warning namespace format - * @param {string} namespace - * @param {...any} args - */ - warn(namespace, ...args) { - this.#printLog(this.#createLog({ level: 'WARN', args, namespace })); - } -} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..b8d4046 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,163 @@ +import path from 'path' +import util from 'util' +import { + useDefault, + getLevelContext, + getNamespaceContext, + getMessageContext, + getTimestampContext, +} from './utils' +import { createWriteStream, WriteStream } from 'fs' +import type { + LoggerInitOptions, + LoggerCreateOptions, + LogMetadata, +} from './interfaces' + +export class Logger { + protected wstream: WriteStream + protected logFile: string + + /** + * Contructs new instance of `Logger` + * @param name - Logger name + * @param options - Logger init options + */ + constructor(public name: string, public options: LoggerInitOptions = {}) { + useDefault(options, 'enable', true) + useDefault(options, 'timestamp', true) + + if (options.write && options.write.enable) { + this.logFile = path.resolve(options.write.dir, options.write.filename) + this.wstream = createWriteStream(this.logFile, { + encoding: 'utf8', + flags: 'a', + }) + } + } + + /** + * Creates new log based on given `options` + * @param options - Log create options + * @returns Log metadata + */ + public createLog(options: LoggerCreateOptions): LogMetadata { + const levelCtx = getLevelContext(options.level) + const nsCtx = getNamespaceContext( + options.namespace || this.options.namespace || 'app' + ) + const msgCtx = getMessageContext(...(options.args || [])) + const tsCtx = getTimestampContext() + + let fmtList = [] + let fmtLog, meta: LogMetadata + + fmtList.push(levelCtx.format) + fmtList.push(nsCtx.format) + + if (this.options.timestamp) { + fmtList.push(tsCtx.format) + } + + fmtList.push(msgCtx.format) + + // create formatted log string + fmtLog = util.format(...fmtList) + + meta = { + label: options.level.toUpperCase(), + namespace: nsCtx.text, + msg: msgCtx.text, + timestamp: tsCtx.text, + args: options.args || [], + fmt: fmtLog, + } + + return meta + } + + /** + * Writes log string to stdout + * @param meta - Log metadata + */ + protected writeLogToStdOutput(meta: LogMetadata) { + process.stdout.write(meta.fmt + '\n') + } + + /** + * Writes log to output file + * @param meta - Log metadata + */ + protected writeLogToFile(meta: LogMetadata) { + const logStr = util.format( + '%s %s %s %s\n', + meta.label, + meta.namespace, + meta.timestamp, + meta.msg + ) + + if (this.wstream) { + this.wstream.write(logStr) + } + } + + /** + * Writes log string to std output and file by given format + * @param meta - Log metadata + */ + protected writeLog(meta: LogMetadata) { + if (this.options.enable) { + this.writeLogToStdOutput(meta) + } + + if (this.options.write?.enable) { + this.writeLogToFile(meta) + } + } + + /** + * Writes debug log with given `namespace` + * @param namespace - Log namespace + * @param args - Values + */ + debug(namespace: string, ...args: any[]) { + this.writeLog(this.createLog({ level: 'DEBUG', args, namespace })) + } + + /** + * Write error log with given `namespace` + * @param namespace - Log namespace + * @param args - Values + */ + error(namespace: string, ...args: any[]) { + this.writeLog(this.createLog({ level: 'ERROR', args, namespace })) + } + + /** + * Write info log with given `namespace` + * @param namespace - Log namespace + * @param args - Values + */ + info(namespace: string, ...args: any[]) { + this.writeLog(this.createLog({ level: 'INFO', args, namespace })) + } + + /** + * Write fatal log with given `namespace` + * @param namespace - Log namespace + * @param args - Values + */ + fatal(namespace: string, ...args: any[]) { + this.writeLog(this.createLog({ level: 'FATAL', args, namespace })) + } + + /** + * Write warn log with given `namespace` + * @param namespace - Log namespace + * @param args - Values + */ + warn(namespace: string, ...args: any[]) { + this.writeLog(this.createLog({ level: 'WARN', args, namespace })) + } +} diff --git a/src/interfaces.ts b/src/interfaces.ts new file mode 100644 index 0000000..e72be8b --- /dev/null +++ b/src/interfaces.ts @@ -0,0 +1,34 @@ +export type LogLevel = 'DEBUG' | 'ERROR' | 'INFO' | 'WARN' | 'FATAL' + +export interface LogContext { + text: string + format: string +} + +export interface LogMetadata { + label: string + namespace: string + msg: string + timestamp: string + args: any[] + fmt: string +} + +export interface LoggerWriteOptions { + enable?: boolean + dir: string + filename: string +} + +export interface LoggerInitOptions { + namespace?: string + enable?: boolean + timestamp?: boolean + write?: LoggerWriteOptions +} + +export interface LoggerCreateOptions { + level: LogLevel + namespace?: string + args?: any[] +} diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 0000000..02ecd00 --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,71 @@ +import * as util from 'util' +import chalk from 'chalk' +import { logLevelColors, logLevelColorDefault } from './values' +import type { LogLevel, LogContext } from './interfaces' + +/** + * Assign default value to object if given `prop` is missing + * @param obj - Object + * @param prop - Property + * @param val - Default value + */ +export function useDefault(obj: object, prop: string, val: T) { + if (!Reflect.has(obj, prop)) { + Reflect.set(obj, prop, val) + } +} + +/** + * Returns context obejct of log level + * @param level - Log level + */ +export function getLevelContext(level: LogLevel): LogContext { + const color = logLevelColors[level] || logLevelColorDefault + const text = level + let format: string + + if (level === 'FATAL') { + format = chalk.bgHex(color).whiteBright(text) + } else { + format = chalk.hex(color)(text) + } + + return { + text, + format, + } +} + +/** + * Returns context object of given log namespace + * @param namespace - Log namespace + */ +export function getNamespaceContext(namespace: string): LogContext { + const text = namespace + const format = chalk.whiteBright(namespace) + + return { + text, + format, + } +} + +/** + * Returns context object of log message by given arguments + * @param args - Log arguments + */ +export function getMessageContext(...args: any[]): LogContext { + const text = util.format(...args) + const format = chalk.white(text) + + return { text, format } +} + +/** Returns context object of log timestamp */ +export function getTimestampContext(): LogContext { + const time = new Date() + const text = time.toISOString() + const format = chalk.dim(time.toLocaleString()) + + return { text, format } +} diff --git a/src/values.ts b/src/values.ts new file mode 100644 index 0000000..f6b1535 --- /dev/null +++ b/src/values.ts @@ -0,0 +1,10 @@ +import { LogLevel } from './interfaces' + +export const logLevelColorDefault = "#FFFFFF" +export const logLevelColors: Record = { + DEBUG: "#FFB86C", + INFO: "#50FA7B", + WARN: "#F1FA8C", + ERROR: "#FF5555", + FATAL: "#DC0000", +} -- GitLab From 66d93db068c15154b55122c7e47d431b7aa0d36b Mon Sep 17 00:00:00 2001 From: Rajat Sharma Date: Thu, 10 Nov 2022 13:25:32 +0530 Subject: [PATCH 07/11] added .npmignore --- .npmignore | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .npmignore diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..7d31604 --- /dev/null +++ b/.npmignore @@ -0,0 +1,8 @@ +src +temp +tsconfig.json +tslint.json +.prettierrc + +*.log +*.zip -- GitLab From a466b4242f53cd844a98edc95aa12fcf7f709a74 Mon Sep 17 00:00:00 2001 From: Rajat Sharma Date: Thu, 10 Nov 2022 13:36:12 +0530 Subject: [PATCH 08/11] update package.json --- package.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 89914f3..a6af5b2 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@rxpm/logger", "description": "Simple logger library for NodeJs based applications", - "version": "2.0.0", + "version": "2.0.1", "main": "lib/index.js", "type": "commonjs", "scripts": { @@ -18,6 +18,15 @@ "email": "rxx175@gmail.com", "url": "https://github.com/rajatxs" }, + "repository": { + "type": "git", + "url": "https://github.com/rajatxs/logger-js.git" + }, + "bugs": { + "email": "rxx175@gmail.com", + "url": "https://github.com/rajatxs/logger-js/issues" + }, + "homepage": "https://github.com/rajatxs/logger-js#readme", "license": "ISC", "devDependencies": { "@types/node": "^18.11.9", -- GitLab From 455bde8168369b903e8f9d01667a701674702059 Mon Sep 17 00:00:00 2001 From: Rajat Sharma Date: Thu, 10 Nov 2022 13:50:54 +0530 Subject: [PATCH 09/11] fix type --- src/index.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/index.ts b/src/index.ts index b8d4046..7fbb8ba 100644 --- a/src/index.ts +++ b/src/index.ts @@ -121,43 +121,43 @@ export class Logger { * @param namespace - Log namespace * @param args - Values */ - debug(namespace: string, ...args: any[]) { + public debug(namespace: string, ...args: any[]) { this.writeLog(this.createLog({ level: 'DEBUG', args, namespace })) } /** - * Write error log with given `namespace` + * Writes error log with given `namespace` * @param namespace - Log namespace * @param args - Values */ - error(namespace: string, ...args: any[]) { + public error(namespace: string, ...args: any[]) { this.writeLog(this.createLog({ level: 'ERROR', args, namespace })) } /** - * Write info log with given `namespace` + * Writes info log with given `namespace` * @param namespace - Log namespace * @param args - Values */ - info(namespace: string, ...args: any[]) { + public info(namespace: string, ...args: any[]) { this.writeLog(this.createLog({ level: 'INFO', args, namespace })) } /** - * Write fatal log with given `namespace` + * Writes fatal log with given `namespace` * @param namespace - Log namespace * @param args - Values */ - fatal(namespace: string, ...args: any[]) { + public fatal(namespace: string, ...args: any[]) { this.writeLog(this.createLog({ level: 'FATAL', args, namespace })) } /** - * Write warn log with given `namespace` + * Writes warn log with given `namespace` * @param namespace - Log namespace * @param args - Values */ - warn(namespace: string, ...args: any[]) { + public warn(namespace: string, ...args: any[]) { this.writeLog(this.createLog({ level: 'WARN', args, namespace })) } } -- GitLab From fe24123a39f4b03bdfdc99dfbb5a44638b26b0cb Mon Sep 17 00:00:00 2001 From: Rajat Sharma Date: Thu, 10 Nov 2022 14:02:09 +0530 Subject: [PATCH 10/11] define log.off() --- src/index.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/index.ts b/src/index.ts index 7fbb8ba..b7df6f2 100644 --- a/src/index.ts +++ b/src/index.ts @@ -36,6 +36,22 @@ export class Logger { } } + /** Closes opened log file stream */ + public off(): Promise { + return new Promise((resolve, reject) => { + if (this.wstream) { + this.wstream.close((err) => { + if (err) { + return reject(err) + } + resolve() + }) + } else { + resolve() + } + }) + } + /** * Creates new log based on given `options` * @param options - Log create options -- GitLab From 360f546122dadc38eab13a1edf5f57a3c49605cd Mon Sep 17 00:00:00 2001 From: Rajat Sharma Date: Thu, 10 Nov 2022 14:02:55 +0530 Subject: [PATCH 11/11] upgrade version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a6af5b2..1d5830d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@rxpm/logger", "description": "Simple logger library for NodeJs based applications", - "version": "2.0.1", + "version": "2.0.2", "main": "lib/index.js", "type": "commonjs", "scripts": { -- GitLab