diff --git a/.npmignore b/.npmignore index aafd791..61f09b1 100644 --- a/.npmignore +++ b/.npmignore @@ -3,6 +3,7 @@ .editorconfig .env .eslintignore +eslint.config.mjs .eslintrc.json .nyc_output .travis.yml diff --git a/example/index.js b/example/index.js index b9bb27e..b350bde 100644 --- a/example/index.js +++ b/example/index.js @@ -9,6 +9,7 @@ const mylogger = digipolisLogger(console, configuration); mylogger.log('hello'); mylogger.log('hello'); +mylogger.log('something went wrong', new Error("wupsi")); mylogger.log({ message: 'logmessage2', timestamp: 'timestamp123' }); const err = new Error('Errormessage'); mylogger.error(err); diff --git a/lib/helpers/formatter.js b/lib/helpers/formatter.js index 73a1f17..ca159e5 100644 --- a/lib/helpers/formatter.js +++ b/lib/helpers/formatter.js @@ -34,6 +34,9 @@ function json(args, level) { if (!newAcc.message && ('message' in arg || 'stack' in arg)) { newAcc.message = ''; } + if (newAcc.message && ('message' in arg || 'stack' in arg)) { + newAcc.message += ' '; + } if ('message' in arg) { newAcc.message += arg.message; } diff --git a/lib/index.js b/lib/index.js index b6860ef..ef4ef83 100644 --- a/lib/index.js +++ b/lib/index.js @@ -2,17 +2,17 @@ const formatter = require('./helpers/formatter'); const { levels, validateConfig } = require('./config'); -module.exports = (cons, config) => { +module.exports = (consoleInstance, config) => { const logger = {}; const validatedConfig = validateConfig(config); - if (cons.isProxied && validatedConfig.override) { - cons.reset(); + if (consoleInstance.isProxied && validatedConfig.override) { + consoleInstance.reset(); console.warn('Already overridden, replacing logproxy'); } const baseproxy = {}; const logproxy = {}; Object.keys(levels.consoleLevels).forEach((level) => { - const org = cons[level]; + const org = consoleInstance[level]; // proxy without handler this is the proxy we reset to as we can`t reset to native code baseproxy[level] = new Proxy(org, {}); @@ -34,19 +34,19 @@ module.exports = (cons, config) => { }, }); if (validatedConfig.override) { - cons[level] = logproxy[level]; + consoleInstance[level] = logproxy[level]; } logger[level] = logproxy[level]; }); - cons.isProxied = true; - cons.reset = () => { - cons.isProxied = false; + consoleInstance.isProxied = true; + consoleInstance.reset = () => { + consoleInstance.isProxied = false; Object.keys(levels.consoleLevels).forEach((level) => { - cons[level] = baseproxy[level]; + consoleInstance[level] = baseproxy[level]; logger[level] = baseproxy[level]; }); - return cons; + return consoleInstance; }; return logger; }; diff --git a/package-lock.json b/package-lock.json index 2b96652..dc95c6e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "devDependencies": { "c8": "^10.1.3", - "eslint": "^9.32.0", + "eslint": "^9.33.0", "eslint-plugin-mocha": "^11.1.0", "jsonschema": "^1.5.0", "mocha": "^11.7.1", @@ -81,9 +81,9 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", - "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", + "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -91,9 +91,9 @@ } }, "node_modules/@eslint/core": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", - "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", + "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -128,9 +128,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.32.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.32.0.tgz", - "integrity": "sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==", + "version": "9.33.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.33.0.tgz", + "integrity": "sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==", "dev": true, "license": "MIT", "engines": { @@ -151,13 +151,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", - "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", + "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.15.1", + "@eslint/core": "^0.15.2", "levn": "^0.4.1" }, "engines": { @@ -847,20 +847,20 @@ } }, "node_modules/eslint": { - "version": "9.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.32.0.tgz", - "integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==", + "version": "9.33.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.33.0.tgz", + "integrity": "sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.0", - "@eslint/core": "^0.15.0", + "@eslint/config-helpers": "^0.3.1", + "@eslint/core": "^0.15.2", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.32.0", - "@eslint/plugin-kit": "^0.3.4", + "@eslint/js": "9.33.0", + "@eslint/plugin-kit": "^0.3.5", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", @@ -2322,15 +2322,15 @@ } }, "@eslint/config-helpers": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", - "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", + "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", "dev": true }, "@eslint/core": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", - "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", + "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", "dev": true, "requires": { "@types/json-schema": "^7.0.15" @@ -2354,9 +2354,9 @@ } }, "@eslint/js": { - "version": "9.32.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.32.0.tgz", - "integrity": "sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==", + "version": "9.33.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.33.0.tgz", + "integrity": "sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==", "dev": true }, "@eslint/object-schema": { @@ -2366,12 +2366,12 @@ "dev": true }, "@eslint/plugin-kit": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", - "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", + "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", "dev": true, "requires": { - "@eslint/core": "^0.15.1", + "@eslint/core": "^0.15.2", "levn": "^0.4.1" } }, @@ -2850,19 +2850,19 @@ "dev": true }, "eslint": { - "version": "9.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.32.0.tgz", - "integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==", + "version": "9.33.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.33.0.tgz", + "integrity": "sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.0", - "@eslint/core": "^0.15.0", + "@eslint/config-helpers": "^0.3.1", + "@eslint/core": "^0.15.2", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.32.0", - "@eslint/plugin-kit": "^0.3.4", + "@eslint/js": "9.33.0", + "@eslint/plugin-kit": "^0.3.5", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", diff --git a/package.json b/package.json index a92c4c1..fc9b3e1 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "license": "MIT", "devDependencies": { "c8": "^10.1.3", - "eslint": "^9.32.0", + "eslint": "^9.33.0", "eslint-plugin-mocha": "^11.1.0", "jsonschema": "^1.5.0", "mocha": "^11.7.1", diff --git a/test/log.test.mjs b/test/log.test.mjs index 226a29c..8741c91 100644 --- a/test/log.test.mjs +++ b/test/log.test.mjs @@ -3,7 +3,7 @@ import sinon from 'sinon'; import { levels } from '../lib/config/index.js'; import uuidhelper from '../lib/helpers/uuid.js'; import log from '../lib/index.js'; -import logschema from './data/logschema.json' with { type: "json" }; +import logschema from './data/logschema.json' with { type: "json" }; import { Validator } from 'jsonschema'; const v4 = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$|/i; @@ -77,6 +77,23 @@ describe('Logs:', () => { sinon.assert.calledWith(logstub.log, result); assert.equal(validator.validate(result, logschema).valid ,true) }); + it('test, { x: "y" }', async () => { + const logmessage = { x: 'y' }; + log(console, { + type: 'json', + override: true, + }); + console.log('test', logmessage); + const result = { + message: 'test Extrainfo: {"x":"y"}', + timestamp: new Date().toISOString(), + type: ['technical'], + level: 'INFO', + correlationId: 'ABCDEFAB-ABCD-4ABC-AABC-ABCDEFABCDEF', + }; + sinon.assert.calledWith(logstub.log, result); + assert.equal(validator.validate(result, logschema).valid ,true) + }); it('{ timestamp: "timestamp" }', async () => { const logmessage = { timestamp: 'timestamp' }; log(console, { @@ -171,6 +188,25 @@ describe('Logs:', () => { correlationId: 'ABCDEFAB-ABCD-4ABC-AABC-ABCDEFABCDEF', }); }); + it('message, new Error(\'errormessage\')', async () => { + const logmessage = new Error('errormessage'); + logmessage.stack = ` + stack + stack + stack`; + log(console, { + type: 'json', + override: true, + }); + console.log('message', logmessage); + sinon.assert.calledWith(logstub.log, { + message: 'message errormessage \n stack\n stack\n stack', + timestamp: new Date().toISOString(), + type: ['technical'], + level: 'INFO', + correlationId: 'ABCDEFAB-ABCD-4ABC-AABC-ABCDEFABCDEF', + }); + }); }); describe('{ type: silent }', () => { it('"logmessage"', async () => { @@ -185,7 +221,7 @@ describe('Logs:', () => { }); }); describe('{ type: log }', () => { - it('"logmessage"', async () => { + it('"logmessage"', async () => { const logmessage = 'logmessage'; log(console, { type: 'log', @@ -293,6 +329,23 @@ describe('Logs:', () => { })); }); }); + it('"logmessage1", "logmessage2"', async () => { + const logmessage = 'logmessage'; + const logmessage2 = 'logmessage2'; + log(console, { + type: 'log', + override: true, + }); + console.log(logmessage, logmessage2); + const result = JSON.stringify({ + timestamp: new Date().toISOString(), + type: ['technical'], + level: 'INFO', + correlationId: 'ABCDEFAB-ABCD-4ABC-AABC-ABCDEFABCDEF', + message: `${logmessage} ${logmessage2}`, + }); + sinon.assert.calledWith(logstub.log, result); + }); describe('{ type: text }', () => { it('"logmessage"', async () => { const logmessage = 'logmessage';