From e776937738fbec09949d85f12f57cf8fb6dd4c32 Mon Sep 17 00:00:00 2001 From: "kebler.net" Date: Sat, 24 Apr 2021 09:09:07 -0700 Subject: [PATCH] 0.1.0 move to native esm simplify custom filter function --- example/example.js | 8 ++++---- package.json | 25 ++++++++++++------------- readme.md | 2 +- src/logger.js | 39 ++++++++++++++------------------------- test/logger.test.js | 4 ++-- 5 files changed, 33 insertions(+), 45 deletions(-) diff --git a/example/example.js b/example/example.js index 13ec306..00e29f4 100644 --- a/example/example.js +++ b/example/example.js @@ -1,4 +1,4 @@ -import logger from '../src/logger' +import logger from '../src/logger.js' let log = {} class LogTest { @@ -16,9 +16,9 @@ class LogTest { appName:'uci-example-logger', //will be used for logging directory name if supplied and will be logged as well package: '@uci/test', // name of package with scope per package.json // repo: // will use scope-name from package prop if not supplied - id: 'id set in package', // can pass a unique if for easy later search/filtering - // file: 'example/example.js', // path (to repo root) of actual file running this logger, default is ./src/.js - // class: 'LogTest', // The class that created this logger if any + id: 'id set in package', // can pass a unique if for easy later search/filtering + file: 'example/example.js', // path (to repo root) of actual file running this logger, default is ./src/.js + class: 'LogTest', // The class that created this logger if any /*---------------- Can pass through additional props for every log by including this `additional` property object diff --git a/package.json b/package.json index 76eb259..8454520 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,13 @@ { "name": "@uci-utils/logger", - "version": "0.0.18", + "version": "0.1.0", "description": "Parent Logger for all UCI modules", "main": "./src/logger.js", - "exports": "./src/logger.js", + "type": "module", "scripts": { - "testd": "./node_modules/.bin/nodemon --exec './node_modules/.bin/mocha -r esm --timeout 30000'", - "test": "./node_modules/.bin/mocha -r esm --timeout 30000 || exit 0", - "dev": "UCI_ENV=dev ./node_modules/.bin/nodemon -r esm example/example", + "testd": "./node_modules/.bin/nodemon --exec './node_modules/.bin/mocha --timeout 30000' || exit 1", + "test": "./node_modules/.bin/mocha --timeout 30000 || exit 0", + "dev": "UCI_ENV=dev ./node_modules/.bin/nodemon example/example", "dev:verbose": "UCI_LOG_PRETTY='verbose' npm run dev", "dev:terse": "UCI_LOG_PRETTY='terse' npm run dev", "dev:where": "UCI_LOG_PRETTY='where' npm run dev", @@ -18,7 +18,7 @@ "dev:info:only": "UCI_LOG_SEARCH='level==`30`' npm run dev", "dev:fatal:only": "UCI_LOG_SEARCH='level==`60`' npm run dev", "dev:json": "UCI_LOG_LEVEL=trace UCI_LOG_JSON=true npm run dev", - "pro": "UCI_ENV='pro' node -r esm example/example", + "pro": "UCI_ENV='pro' node example/example", "pro:path": "UCI_LOG_PATH=./example/example.log npm run pro" }, "author": "David Kebler", @@ -37,16 +37,15 @@ }, "homepage": "https://github.com/uCOMmandIt/uci-changeme#readme", "dependencies": { - "env-paths": "^2.2.0", + "env-paths": "^2.2.1", "make-dir": "^3.1.0", - "pino": "^6.3.0", - "pino-pretty": "^4.0.0" + "pino": "^6.11.3", + "pino-pretty": "^4.7.1" }, "devDependencies": { - "chai": "^4.2.0", - "esm": "^3.2.25", - "mocha": "^7.2.0", - "nodemon": "^2.0.4", + "chai": "^4.3.4", + "mocha": "^8.3.2", + "nodemon": "^2.0.7", "test-console": "^1.1.0" } } diff --git a/readme.md b/readme.md index 39e3e86..8bcb2f2 100644 --- a/readme.md +++ b/readme.md @@ -1,4 +1,4 @@ -# uCOMmandIt JSON Logger +# UCommandIt JSON Logger ### json logger based on [pino](getpino.io). diff --git a/src/logger.js b/src/logger.js index 6ce7b44..9b019a7 100644 --- a/src/logger.js +++ b/src/logger.js @@ -11,8 +11,8 @@ function child (opts) { let pretty; let filter; let LOG_PATH; let DATE_TIME const PRETTY_DEFAULTS = {translateTime:true, colorize:true, levelFirst:true} - const DEFAULT_FILTER_PROPS = ['level','time','v','pid','msg'] - const WHERE_FILTER_PROPS = ['package','file','method','function','line'] + const DEFAULT_FILTER_PROPS = ['level','time','pid','msg'] + const WHERE_FILTER_PROPS = ['package','file','class','method','function','line'] let logOpts = { level:opts.level || process.env.UCI_LOG_LEVEL, @@ -27,21 +27,18 @@ function child (opts) { instanceCreated:Date.now() } - // logOpts = Object.assign(logOpts,opts.additional) - - // console.log('log opts', logOpts) - if (enabled) { if (opts.env) (opts.envForce) ? (process.env.UCI_ENV = opts.env) : (process.env.UCI_ENV = process.env.UCI_ENV || opts.env) if (process.env.UCI_ENV === 'node') process.env.UCI_ENV = process.env.NODE_ENV if((process.env.UCI_ENV.indexOf('dev')>-1 || process.env.UCI_LOG_PRETTY) && process.env.UCI_LOG_JSON !=='true' ) { // pretty is on + // process UCI_LOG_PRETTY try { pretty = JSON.parse(process.env.UCI_LOG_PRETTY) } catch (error) { - // console.log('LOGGER: could not parse',process.env.UCI_LOG_PRETTY ) - if (process.env.UCI_LOG_PRETTY==='verbose') pretty ={include:'all'} + // console.log('LOGGER: could not JSON parse',process.env.UCI_LOG_PRETTY ) } + if (process.env.UCI_LOG_PRETTY==='verbose') pretty ={include:'all'} pretty = pretty || opts.pretty || {} pretty = Object.assign({},PRETTY_DEFAULTS,pretty) pretty.search = process.env.UCI_LOG_SEARCH @@ -55,6 +52,7 @@ function child (opts) { pretty.ignore = null } } + DATE_TIME = new Date().toString() LOG_PATH = ( process.env.UCI_ENV.indexOf('pro') > -1 || process.env.UCI_ENV === 'logfile' ) @@ -65,10 +63,9 @@ function child (opts) { } } // end enabled + // console.dir(pretty) + // console.dir(logOpts) - - // console.log('pretty terse logger', pretty.terse) - // console.log('making logger \n(env,json,pretty,pretty-search,path)\n',process.env.UCI_ENV,process.env.UCI_LOG_JSON,pretty,process.env.UCI_LOG_SEARCH,LOG_PATH) const logger = pino({ name: opts.libraryName || process.env.UCI_LOG_NAME || 'UCI', enabled: enabled, @@ -101,33 +98,25 @@ function child (opts) { } export default child +const levels = pino.levels +export {child as logger, levels} function capitalize (s) { return s.charAt(0).toUpperCase() + s.slice(1)} function filterPretty (options) { + // console.log('filter options',options) return function prettifier (inputData) { + // console.log('calling filter',inputData) let log let parsedData if (typeof inputData === 'string') { - try { parsedData = JSON.Parse(inputData)} + try { log = JSON.Parse(inputData)} catch(err){ return inputData } - log = (isPinoLog(parsedData)) ? parsedData : undefined - } else if (isObject(inputData) && isPinoLog(inputData)) { - log = inputData } - if (!log) return inputData + else log = inputData let filteredLog = {} options.filter.forEach(prop => filteredLog[prop]= log[prop]) // console.log('filtered',options.filter, filteredLog) - // if (options.pid) console.log('pid:',logObject.pid) return pinoPretty(options)(filteredLog) } - - function isObject (input) { - return Object.prototype.toString.apply(input) === '[object Object]' - } - - function isPinoLog (log) { - return log && (log.hasOwnProperty('v') && log.v === 1) - } } diff --git a/test/logger.test.js b/test/logger.test.js index 4d862da..861efe8 100644 --- a/test/logger.test.js +++ b/test/logger.test.js @@ -1,4 +1,4 @@ -import logger from '../src/logger' +import logger from '../src/logger.js' import { expect } from 'chai' import { it } from 'mocha' import { stdout } from 'test-console' @@ -16,7 +16,7 @@ describe('JSON Logging Utility Testing ',async ()=> { log = logger({ name: 'test', id: opts.id, - // file: 'example/example.js', + file: 'example/example.js', // class: 'LogTest', // repo:'test repo' package:'@uci-utils/test'