{"_id":"@unplgtc/cblogger","_rev":"29-6ff32c7d80aa45eb2adc87127faf7c3d","name":"@unplgtc/cblogger","dist-tags":{"beta":"2.0.1","latest":"2.0.1","nextjs-beta":"2.0.2-nextjs","nextjs":"2.0.2-nextjs"},"versions":{"0.0.0":{"name":"@unplgtc/cblogger","version":"0.0.0","description":"Standardized logging object for Node applications","main":"src/CBLogger.js","scripts":{"test":"jest"},"repository":{"type":"git","url":"git+https://github.com/unplgtc/CBLogger.git"},"author":{"name":"Alex Guyot","email":"guyot@unapologetic.io","url":"https://unapologetic.io"},"license":"ISC","bugs":{"url":"https://github.com/unplgtc/CBLogger/issues"},"homepage":"https://github.com/unplgtc/CBLogger#readme","devDependencies":{"jest":"^23.4.2","@unplgtc/cbalerter":"0.0.1"},"dependencies":{"@unplgtc/standarderror":"0.0.1"},"directories":{"test":"test"},"gitHead":"884d9aa2cc35b0565f2791b2553d41d3fac3f0c6","_id":"@unplgtc/cblogger@0.0.0","_npmVersion":"6.2.0","_nodeVersion":"8.9.4","_npmUser":{"name":"ajguyot","email":"guyot@unapologetic.io"},"dist":{"integrity":"sha512-8/I7QqaBIwIY4CFZoUaMnk7sgXDc3l7FNvYREdPzxVze26myE6kakcYUcSRrLXlL/3pHfS2wd5aELd1oXB2tUQ==","shasum":"b3e2ffb9b0666edb28b3ff50dda304fba9b63054","tarball":"https://registry.npmjs.org/@unplgtc/cblogger/-/cblogger-0.0.0.tgz","fileCount":6,"unpackedSize":10593,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbr/ttCRA9TVsSAnZWagAAzSIP/0sU5wXLcdUQWEi5OMV0\n5UcdzPZfdG1D1ALFZkzfnAhDbKJUKuubp9H3qyLLqpNbnwhqbPKcmvQK+xih\nGg+/7kbg+P1M956kvFTm0XoIKVMjeZMTSWvtkn8c9/1wDP2vNLMY5WMG3oCS\nTt/BFy8vZI2xaLH92EcHbsKrKPUB4JxsLMolwSHUVcJXHYss6AU+Ss23yY0q\nSkivmP9ihXD6SPttv0O2tvhXfXVlSwptTwIK0gC0/yaPrV3ANmHle9CCu7Mb\nQB7sROKPlJ8fPHJdBTC/e3D1PcijYPjo1oAcrZ96PdAEnH3m0RyXbS15y9UP\nKXUmxiKcsivs9aGmsUrWaLnfIcW/q2zgmzI46YqQOqtbGunPLrbXLpXA5USu\np9/FXtQYvzFVJLKOzkWaNdLsqGEsG5s+GqhmC1gAKILC+4GtMAoOrFESxOd+\nzhrKFo2JPd5Z/heklP+MsCh4GMSg9ZuAJUAp+6dC7ePMJpxPgNd39UagYSxs\niMnDCaHDZVy088rhBPyvLUTuAkq1EZAtF6sqwN32xzxYsC37FnXLole8p45q\nKz9RynFt5MAt/umfsDlaQgcRnesvRQ3ufe/Q4mIY8jlwVhfpkvXnazXC5p6q\n87s1Hxw65QbgbMZNwh2y55cdtjUlhcqUwiJUX1GO4hQ0j97OhTF46NzChSk8\nxn14\r\n=lSxD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDQpJQtLXpEDFgyZCrLBpOJHmjQ1RIlRHr01HNBNh9wwAiBLzrqY94jrV5yAs/cXM9BcxmhaW3Pj0iaNyhVZ2a4mlg=="}]},"maintainers":[{"name":"ajguyot","email":"guyot@unapologetic.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cblogger_0.0.0_1538259821110_0.5978278588390582"},"_hasShrinkwrap":false,"deprecated":"Dependencies deprecated"},"0.0.1":{"name":"@unplgtc/cblogger","version":"0.0.1","description":"Standardized logging object for Node applications","main":"src/CBLogger.js","scripts":{"test":"jest"},"repository":{"type":"git","url":"git+https://github.com/unplgtc/CBLogger.git"},"author":{"name":"Alex Guyot","email":"guyot@unapologetic.io","url":"https://unapologetic.io"},"license":"ISC","bugs":{"url":"https://github.com/unplgtc/CBLogger/issues"},"homepage":"https://github.com/unplgtc/CBLogger#readme","devDependencies":{"jest":"^23.4.2","@unplgtc/cbalerter":"0.0.2"},"dependencies":{"@unplgtc/standard-error":"0.0.1"},"directories":{"test":"test"},"readme":"[![CircleCI](https://circleci.com/gh/unplgtc/CBLogger.svg?style=svg)](https://circleci.com/gh/unplgtc/CBLogger)\n\n# CBLogger\n\nStandardized logging object for Node applications\n\n","readmeFilename":"README.md","gitHead":"9e83d7f6468dbfb5efc69a779b9d80aa9220dd52","_id":"@unplgtc/cblogger@0.0.1","_npmVersion":"6.2.0","_nodeVersion":"8.9.4","_npmUser":{"name":"ajguyot","email":"guyot@unapologetic.io"},"dist":{"integrity":"sha512-5AH8ke4k34uJaFC8i8rLVMwXT4uMLHPNEV6tyH6JWrqwGRMO/ZMLGZGIWefaC1MYTD6IRsS7zvMAXBA3oWhfcw==","shasum":"3dac2c373a5c7039fd050e54bee9f7068e58b885","tarball":"https://registry.npmjs.org/@unplgtc/cblogger/-/cblogger-0.0.1.tgz","fileCount":6,"unpackedSize":10596,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbsQHGCRA9TVsSAnZWagAACCoP/2Agdkd5dnPFYIdUfPj2\nbgrrc9nRG1nvXpLTCQLou9Z6MIW657LG41ye/HQsWtvoIg8r6O8rS8/I6MS/\nZJCftB/HdKVUkV1VXWDG9lkGkWmf/d/557R5wUwm+zBgqWGaswO3y8Ng5BFg\n9LSMtcRU+e3ey9RbZWpmCo+Li0mwaE8cltOQ7KK4cvPc9fsaRuLKmO6mM92N\nLo7ALOg8gG5FvtvLC6RhKEikXTGzqvopVVfnhPerTlcwANaDCAIi6ftYJ4sg\nLLhG+Ws7u0AIKR7P3WKLhBqTqHW7kOSAvpLXbtb/6vsjDNfh5Tw8gyxTIXvL\naAiNUYCcxzOgW0KKRwBF50yCjLbmpuSurIfedWgQUp0INY4IOOawBR0w7KC0\nr8U3ICTENoxj+LojP3/a5G2NYkHFRaubc15U52FSL2vvxF1P0fPNj2DtlqqJ\nggPCpLz2cHfJ/NZnp12XxcfgHyF//yyv7nK/P09J78lS6XqZt2E9NiJlNgf2\nqY2u7i2mLgYZL/9yvuEAGqFO9pCYtkFhAMAZLG++FS43rSnIbisbK/Km85VI\nfxTr4FZm1r2V+2B7I0/9TEjpIFvIXkh0Sgbo3LuI4WQL3WQqEnHMAO8KkOKD\n+O61Bx/0ojLfsBrC9ED+5mVCR5aiTLwzjp+98oIRlv9S7UJETOUikk1HXK3Z\n+5jk\r\n=xCeQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICnZy1ltrbUgMre0Fh8JelMm31L1S4r5Vm6YmN+x5ZyEAiBJ9FH2MgL1vU1YJqJ9IypWcUf9pmAj4dOVJSwlIAuFLA=="}]},"maintainers":[{"name":"ajguyot","email":"guyot@unapologetic.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cblogger_0.0.1_1538326981784_0.9708397642804345"},"_hasShrinkwrap":false},"0.0.2":{"name":"@unplgtc/cblogger","version":"0.0.2","description":"Standardized logging object for Node applications","main":"src/CBLogger.js","scripts":{"test":"jest"},"repository":{"type":"git","url":"git+https://github.com/unplgtc/CBLogger.git"},"author":{"name":"Alex Guyot","email":"guyot@unapologetic.io","url":"https://unapologetic.io"},"license":"ISC","bugs":{"url":"https://github.com/unplgtc/CBLogger/issues"},"homepage":"https://github.com/unplgtc/CBLogger#readme","devDependencies":{"jest":"^23.4.2","@unplgtc/cbalerter":"0.0.4"},"dependencies":{"@unplgtc/standard-error":"0.0.1","@unplgtc/standard-promise":"0.0.3"},"directories":{"test":"test"},"readme":"[![CircleCI](https://circleci.com/gh/unplgtc/CBLogger.svg?style=svg)](https://circleci.com/gh/unplgtc/CBLogger)\n\n# CBLogger\n\nStandardized logging object for Node applications\n\n","readmeFilename":"README.md","gitHead":"4f8fa429f8ebf94e68b30b21effeb14cd2ece776","_id":"@unplgtc/cblogger@0.0.2","_npmVersion":"6.2.0","_nodeVersion":"8.9.4","_npmUser":{"name":"ajguyot","email":"guyot@unapologetic.io"},"dist":{"integrity":"sha512-y0qVwDdLkOd/97IkLCEky7oeNTezKbTPo5pYcL51JeCtoos+iYTLH5tYVu0nD41zEX35gNd7OdhWS77uj+2tFA==","shasum":"4fb8b6660cb358d8ae00453ae4175ac863053396","tarball":"https://registry.npmjs.org/@unplgtc/cblogger/-/cblogger-0.0.2.tgz","fileCount":6,"unpackedSize":13041,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbuVkICRA9TVsSAnZWagAAcUMQAJ0r4lCOlHgqXtiqhO4x\n1aN1KVnMKeP/Hy5Jq7EEBz/bYgSteNie/HiUtS3WoIm0skHv2tzwLaD/ZrU0\nODylbXzcf44Ia9NW05DnGhAeIBws5VSXU/THqjbEe9Oh2UTF27jQvXwrJE8+\nhukIgIOE5gUyW+1m3/YqyxHO4gopLTSxYmjy3AkiWI88RBfYPWWZHfdgjhXS\nO/G1e/sNT31vjwdmwaOIQJ6EeMf/JNdPJ/R2nLLopRvWBtk93jsJ5sms8Y/J\ndnQ0Ol+B2Qcox53E2TKT0EzA+3tXgX3c1VNbCaMbWimOfE0She7TvFuFRcxR\nQ64saP8bsMTB2FSf5QsqRNGaqxuI/vUCVr/E4/4gwmpLqVBTESNMiZkqX5ku\n1VKtFVisiT69b9DzTORkjBhOa1A7Nxr2ZFRYkhwezRDg27emD0r2zHVjlb34\nDQAbHjrXHAKBPxZ8Bok4isyIJrv8XSl0cb61/WEPE3s6u2tjSzUYy3IqUr/C\nLbNFIdp3bc7ESzAIWWsjWrvu5IXRscPtxENfivMkhEbg5KnbwbMdgbWoJZhK\nklPIJzrgsKX2tpEsUqcAamwTKgR0buwlJXYib8mv5hfJS8PpGJ9Kn8N1sesI\n39fe8nfmGa/gWukMNGTtPomO4B9OR8Y7Ihl6MxjJRYZ0ldKpgO9J5w0ApSOK\nv/rz\r\n=xwJO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBwX/+AyV3PhcZVRMHDlwHW+yBHoDCHj0n16Qfzoer1TAiEA+AxknSDyyThGqnNnI2f0ftazOaTlIbA3bk5EA7KPZFU="}]},"maintainers":[{"name":"ajguyot","email":"guyot@unapologetic.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cblogger_0.0.2_1538873607948_0.09548799600285052"},"_hasShrinkwrap":false},"0.1.0":{"name":"@unplgtc/cblogger","version":"0.1.0","description":"Standardized logging object for Node applications","main":"src/CBLogger.js","scripts":{"test":"jest"},"repository":{"type":"git","url":"git+https://github.com/unplgtc/CBLogger.git"},"author":{"name":"Alex Guyot","email":"guyot@unapologetic.io","url":"https://unapologetic.io"},"license":"ISC","bugs":{"url":"https://github.com/unplgtc/CBLogger/issues"},"homepage":"https://github.com/unplgtc/CBLogger#readme","devDependencies":{"jest":"^23.4.2","@unplgtc/cbalerter":"0.1.0"},"dependencies":{"@unplgtc/standard-error":"0.1.0","@unplgtc/standard-promise":"0.1.0"},"directories":{"test":"test"},"readme":"[![CircleCI](https://circleci.com/gh/unplgtc/CBLogger.svg?style=svg)](https://circleci.com/gh/unplgtc/CBLogger)\n\n# CBLogger\n\nStandardized logging object for Node applications\n\n","readmeFilename":"README.md","gitHead":"0abd4cc8f3dd6f7e03872a88621206de26182f7b","_id":"@unplgtc/cblogger@0.1.0","_npmVersion":"6.2.0","_nodeVersion":"8.9.4","_npmUser":{"name":"ajguyot","email":"guyot@unapologetic.io"},"dist":{"integrity":"sha512-wTYHkjKP/a8Vr7nzrEbs+AxztTp9gxlHX8gFs9EmFDDKRG069TVYI4hAQwDxn1YSXFdTolCTypWreoA+p0fHhQ==","shasum":"5b8ba4e041642234680a92a2251137d9b92f21f4","tarball":"https://registry.npmjs.org/@unplgtc/cblogger/-/cblogger-0.1.0.tgz","fileCount":6,"unpackedSize":13041,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbuVtiCRA9TVsSAnZWagAAo4cP/iU6Cv4iLjh7GPmK+Luq\nVxU2RDGGVF0BNcdqW42cq+j/X+Xnilhw4h2ApxudNZ0B7m7YzydSbitBXySL\nckV56RclFXmjOAdW3kqEDLjELC8516750y1ZQr3lE1MxLuEycwRX4oREKmnD\nuQrXZ7tDZQPPvyHpJf3XxasxRoMJKimSJrUSsegCHUN9Uzqio2ayT+ceWzXO\nJfMk1JxzZ1d5KRFSMPIFimE76UBkhunLmj2pyLA1gkw6Kz1l28chdQ2heGsn\nFx6bEWGX06nSGRNFqT2QxIdAndUgLvme3oTz30Igyq0cL4hkzKkjTUSdqjRk\n6gckIU3bkldsivtBs8SJoL0b9wPB3hglWai7kGhd5rx5FOh75QRMoNklCzIw\nPkLsGLqhZH9d1ECMva3xDfG2Na1f6nCPWM4k90fUNVQMFe54qEghqqNkeu4+\nFqzAtRNcSbuzi+53JOMEUImyNeo9jBYfRIydqjwvu6SUw+d4mJ5wAKOhtP/4\n1s84d/Cnq1f4uEtDWj1rihTzEao+A21JXsWL2T4IJjlyoqeQqLzfexVncVia\nLEq3WKNUHPqGyTvCAyLGnk6WN9B/EnAjLDQCNTX6er5dZO9CAHr3qTC3VI1S\nthDuv3xLOH/eYIF50Fr1KdKmuS/m9rMmHaOmTZ5Kb5M31E2Ke3HIfEqC1/X5\nvnpU\r\n=bjlW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9WuXHUTbIS8XHm+uD2IvWqD0ASTrrcOSnqr6NskYbGQIgJ7r1/4sECpo/hWLDJbq/v8dreVenWgXyiNioUmmOZjg="}]},"maintainers":[{"name":"ajguyot","email":"guyot@unapologetic.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cblogger_0.1.0_1538874209965_0.8349077703200567"},"_hasShrinkwrap":false},"0.1.1":{"name":"@unplgtc/cblogger","version":"0.1.1","description":"Standardized logging object for Node applications","main":"src/CBLogger.js","scripts":{"test":"jest"},"repository":{"type":"git","url":"git+https://github.com/unplgtc/CBLogger.git"},"author":{"name":"Alex Guyot","email":"guyot@unapologetic.io","url":"https://unapologetic.io"},"license":"ISC","bugs":{"url":"https://github.com/unplgtc/CBLogger/issues"},"homepage":"https://github.com/unplgtc/CBLogger#readme","devDependencies":{"jest":"^23.4.2","@unplgtc/cbalerter":"0.1.1"},"dependencies":{"@unplgtc/standard-error":"0.1.0","@unplgtc/standard-promise":"0.2.0"},"directories":{"test":"test"},"gitHead":"65de01b3ba6c5b2ad94065384485c553c31c6393","_id":"@unplgtc/cblogger@0.1.1","_npmVersion":"6.4.1","_nodeVersion":"8.9.4","_npmUser":{"name":"ajguyot","email":"guyot@unapologetic.io"},"dist":{"integrity":"sha512-6uNUFkmeLvCbfbyN1cwKrB8cox2anAUCs5PlsJ1lkBlibKxyooM2zI3kXy1tFtYbAaThNGOyF2D5tJazqNDc5A==","shasum":"c3b84bdbb8bcffd34fbec24e96f25a6229943ed4","tarball":"https://registry.npmjs.org/@unplgtc/cblogger/-/cblogger-0.1.1.tgz","fileCount":6,"unpackedSize":13041,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbuq/DCRA9TVsSAnZWagAAELMP/1LW/O064kNrWoBcq4qv\nR41oYGRzr3BG6iZFWUc+CI8IZH0Ill2gHo+43FgpKMEc5JzU46k9l0Fn5yaE\nCQDjNChpQxfcLrATgPhPQCfofc1Lu0QWAJZwxgFlzZULpk2swMlwVssKnT+z\n0KbaG9K+V3gAltwualF4ddjzlKzDYRFMR8dO8k3GaHoLNE6Cr45vqTnZKfb9\nWQqC/3xUXo4cu52BBbq2itVI/e0jw8jfRJxe62zkT0MLmWtdbIQtmS4ElIuT\nRnU+H4tatQnByl+2Yv00GEJyg7nXVtS9NXh7IoeRZbOHrhAsTCPrVq8/EYg2\nHX92r3sXw4F8gYBGwy8Q3lv6WhChSz2HCrTRSctux8BERTzqwsn7P1VfNVL8\nVypP+qsBcMj2B1X7rVppquPQBRAC+p4oNBDbOQGJfIQ0WLZvZgbacgEPoyWI\nFcyicgZO2ZZCk+HFn+IX1+EaBZwoJ5uvXjGxkp0rhn31iH7RRE2wRIe/Rukj\nBZoBUcbNthulVj1BuU9TresDSCbSoRMeAVOC2qAfn6jGsnJr9j9eozAqjnMy\nuK1f0BLKJD5ZvnzHVjqQu56+XNu7odauSiUbGDzMemYxkyHX8gFf20ewLvoP\nN3NbMrRBv9svPiwW4oHjka/DAsdJ4SGgQf1mHqKhf3e6I/NVzf/uIgUnuLOM\nxnno\r\n=CBP0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCvN/jKVKhPGoszK14kaqV470JIW+vdBS1FKII3pPb3kAIgAaSbWZWPW7+ORUqi9dFqYJSVWD6inqXqmBIdh7Bx/sU="}]},"maintainers":[{"name":"ajguyot","email":"guyot@unapologetic.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cblogger_0.1.1_1538961347358_0.8361834008989215"},"_hasShrinkwrap":false},"0.1.2":{"name":"@unplgtc/cblogger","version":"0.1.2","description":"Standardized logging object for Node applications","main":"src/CBLogger.js","scripts":{"test":"jest"},"repository":{"type":"git","url":"git+https://github.com/unplgtc/CBLogger.git"},"author":{"name":"Alex Guyot","email":"guyot@unapologetic.io","url":"https://unapologetic.io"},"license":"ISC","bugs":{"url":"https://github.com/unplgtc/CBLogger/issues"},"homepage":"https://github.com/unplgtc/CBLogger#readme","devDependencies":{"jest":"^23.4.2","@unplgtc/cbalerter":"0.1.2"},"dependencies":{"@unplgtc/standard-error":"0.1.0","@unplgtc/standard-promise":"0.2.1"},"directories":{"test":"test"},"gitHead":"5985c0ab6f31b3850f1adbbd90a4cabb2913b8f0","_id":"@unplgtc/cblogger@0.1.2","_npmVersion":"6.4.1","_nodeVersion":"8.9.4","_npmUser":{"name":"ajguyot","email":"guyot@unapologetic.io"},"dist":{"integrity":"sha512-LXLTb7K56SvaabFkrd24X0CVvwRGS04UU8lZnrEVWZ52M+51W4FXyiNVFa3saY9QXWzNCwV3QXsC1KgVy5mdAA==","shasum":"c8f146eb463c1714062e5550dc1d7d14a076446b","tarball":"https://registry.npmjs.org/@unplgtc/cblogger/-/cblogger-0.1.2.tgz","fileCount":6,"unpackedSize":13041,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJburcNCRA9TVsSAnZWagAATgYQAJkr+I1laQUjLdvmexOY\n81pEaiL7uf9fsXoVvNKhkxgyjh8jSoK2ctHKdbZrYt0rj//S/fINIx9+M7gn\n62tJ4mCdOx6EVLG6AeHyJnInZXjWxtcob2Z8DzUKkp+kR61aVa8wlNCN8Qj3\njwUJzcziusJuWM7IASfhYpaPqVLvgUgrvFfCIst2FesuiAcVXWqTsykUoHU5\nulnAIeXjMkp5mMRfzYf/YDjNTLjqS+EMjrkCXeHNg6Zrq7FNK7VwOMX3cXGh\nzzgtBS/G+oB90c/kNVumP5rNQG0qhuVv94GL6HrKaUOuAjBIRgtnCZwXVnzZ\nuVpJbSXPJGiUFJ88JDOJMzgEMEIb9bAhQN2ip0kwM8M55+oij+NSY5MHprMy\n6T4M6DP4lMdN//qZ3VIN0RwoMJ6tMkrqLw95rFlHGwWAoTlWJ5L/czWPmrv6\nasysLn2+AtIxtPEid4zN1+N+3sZZ+GjTg2b7SOIpW/aos7QbuwL8XUjAH0q/\nwlRwqSP27lKZ+3w0IV0j8b68O0qJ29IRGan8aAEYCuJFBBkauYHL+k0PwWbN\ng0CuKmg7frpvWStWiUwRn5NrmFQrOuQtrQaxIQhs2p6+Md7Twv4PxIbKjV65\nGJSnu0o7s7nnBA5mQSZEliZh2+2+mruNJplcqphFizy/TZ7u4vBvle5pQ93L\nF6aa\r\n=OPW4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD3pStKk+ryAi3E5RM746M+P+INQDgat4ZAewquQlFWEQIhANsEN7Wj3qUB/7fTcWv94Qq/fSXofxk3PE6fL25dH7Ym"}]},"maintainers":[{"name":"ajguyot","email":"guyot@unapologetic.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cblogger_0.1.2_1538963212552_0.9551359176754861"},"_hasShrinkwrap":false},"0.1.3":{"name":"@unplgtc/cblogger","version":"0.1.3","description":"Standardized logging object for Node applications","main":"src/CBLogger.js","scripts":{"test":"jest"},"repository":{"type":"git","url":"git+https://github.com/unplgtc/CBLogger.git"},"author":{"name":"Alex Guyot","email":"guyot@unapologetic.io","url":"https://unapologetic.io"},"license":"ISC","bugs":{"url":"https://github.com/unplgtc/CBLogger/issues"},"homepage":"https://github.com/unplgtc/CBLogger#readme","devDependencies":{"jest":"^23.4.2","@unplgtc/cbalerter":"0.1.2"},"dependencies":{"@unplgtc/standard-error":"0.1.0","@unplgtc/standard-promise":"0.2.1"},"directories":{"test":"test"},"gitHead":"a0104f2c6a26e9be50c7d3b8733a1e069c9ec5af","_id":"@unplgtc/cblogger@0.1.3","_npmVersion":"6.4.1","_nodeVersion":"8.9.4","_npmUser":{"name":"ajguyot","email":"guyot@unapologetic.io"},"dist":{"integrity":"sha512-tLnTGgZ0wALb468PkqO9g94XElsex6n5pmltAia4or7t6msK6NKLHjNop02ao3f18N1GhsXqrXZQi9u061jgSA==","shasum":"c1c328e3aeaa5c4729b943e38f5d0b80f2e49fb3","tarball":"https://registry.npmjs.org/@unplgtc/cblogger/-/cblogger-0.1.3.tgz","fileCount":6,"unpackedSize":23354,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbvuYdCRA9TVsSAnZWagAAZVAP/2S8KMdaFX1yVKYv65iy\nFWEHJxUfC9KlrvH0nzIowvA4ltIDOQ3GKYBKnXGsZSo9wFp22zYEhpcFddDo\nCfr3jUsZWcjPrVpiSJMirjy4tKq0U5Ops/Dr0gy0o4zSY+VQ6n9S7KV3wL4k\nrjmQ4f4YBkAxXJvpdq1CjVWjN89PMlq4sNOKFt5LCDKrfldGmZPFk6X4brVh\nOKIzVDojXBxj5aNh2cbgh9ii0rwTKMfXR9tyseNGBo5njvmOyrv+pjTWUrHN\n7jJVz20BqQq20VnG00ca2++ZAvggvVckTO5QrJlOIPET0gPH3zW0PBRiq80S\nq49ywE0/FnhEz0D5sztUiClr8lhYximIDqcoPlOfcrp9F5SVzP3AfgP0JHNo\nFh5o1fUqTpmO/lT84K60C8TcCNu+AK/JtMykcU51sq3Atd621FVvZqgwWEpy\nw4MoZ19xbkQpTGPgSuUNllb4choU002fkmxqDNKPLwxDhdzWkLBq3EGrfCCQ\nX+/X02jwsqFRwG10jYR4tQzMoMuTTu7Ov46boFuVjlTWLin4ean57juZVXLT\nVToeA2ayur99ToLz9ns3Dlff+BWTf0e000pwxZvPg2kGN+gJYjdhY5gFPoB6\nWQSyqiNy/AXKG5Rx3JYC11uTtArmZr6e08zhfzgpddPmEc4kc7NK6RLsGXGZ\nOBQx\r\n=JNpk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCyQDgej+gNAMdCyeMX7uO39rk9r6LNhnBsNjrQEO2DwAIhAPykDRlCY+xfwAcDFDw+Mr1quwEMMPbp5agG32qUNC2o"}]},"maintainers":[{"name":"ajguyot","email":"guyot@unapologetic.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cblogger_0.1.3_1539237404561_0.5414316368174974"},"_hasShrinkwrap":false},"1.0.0":{"name":"@unplgtc/cblogger","version":"1.0.0","description":"Quality logger for Node applications","main":"src/CBLogger.js","scripts":{"test":"jest"},"repository":{"type":"git","url":"git+https://github.com/unplgtc/CBLogger.git"},"author":{"name":"Alex Guyot","email":"guyot@unapologetic.io","url":"https://unapologetic.io"},"license":"ISC","bugs":{"url":"https://github.com/unplgtc/CBLogger/issues"},"homepage":"https://github.com/unplgtc/CBLogger#readme","devDependencies":{"jest":"^23.4.2","@unplgtc/cbalerter":"1.0.0"},"dependencies":{"@unplgtc/standard-error":"1.0.0","@unplgtc/standard-promise":"1.0.0"},"directories":{"test":"test"},"gitHead":"a0104f2c6a26e9be50c7d3b8733a1e069c9ec5af","_id":"@unplgtc/cblogger@1.0.0","_npmVersion":"6.4.1","_nodeVersion":"8.9.4","_npmUser":{"name":"ajguyot","email":"guyot@unapologetic.io"},"dist":{"integrity":"sha512-x6QtqXz3d6jwvN1e4xOI/rmRCmtJIbOnQnb80NJqaqjHvoEILjyh6vPn+PoSYeo3TgycjkpjG5XiX1vzqD8r1Q==","shasum":"521271fd66b95317aa3d8bc616064ffc55fd6925","tarball":"https://registry.npmjs.org/@unplgtc/cblogger/-/cblogger-1.0.0.tgz","fileCount":6,"unpackedSize":23451,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbw6g6CRA9TVsSAnZWagAAYs8P/ilN8cPDSajOr3kpgxCR\n7sQglVqCkdclww8PFe56OPw/EHvbb/LKNpnrGSzc2eMdqsOJij7VUFR5WAjM\njmJwIR6iTNtlyMrp7tAPuEMT1v2qTHr/F8BlhY/rgCaAVvohhetTTDnB8UYp\nBDNsgSwjD2e4kn8qZ8lxbx0gZNsMpvtZH+WGNw4IvB179cqos1f8K+fMbEhh\nwzgfxbvNzh3i/OBGVNMG5Np62CMJ077iIdefKqNnsoNdw9oCogzoQ6HeKITj\nqFkoUBTu/U21Tn4DesNW9+EO5HM4ET16kM1S9YR4CTGotvLQuXGinApOSSO7\nZd08HSazzjSNZzcGE2qCpuxIQN7UijLXm2ZSlrvnbed+2K9DcIfPpB1Hz7sz\nRAr5dQZoOyUm590/NdUqBloy3erNCnW+7HnGoHWAD1rtNjfmzDGaxCwHrHtK\nyRUMDd5amcaVuBp8XRbSwF8MZAuGH2KZ/rKt4SmuYZmpPYm2yKyqc/dsQ6My\nA8VGBvBheGfC3x9W4OlQOy9ci6XB1LB+DX4tUHhYvcT7mYlkU88g34VFH4XO\n/04xa1xTlZyHgl+J1hkgX+hcTGgP/zngr0NwQ9dy/Z/ydPQqzwJprxWgNcEs\nEGqE7r37Ug0M+llMOyhAeFo05bn31pm2dwBOq/4NpArdKJpskNOj935fPIlo\nXQ80\r\n=lVLn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCjD2+fCzZC5DUsW5JcFxluKBpDnqueAkbbN3I1FcIfEwIhAK4HBJsvw36+DA3Uj2YV8G+nveY3XnoAago8SjFA4sg5"}]},"maintainers":[{"name":"ajguyot","email":"guyot@unapologetic.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cblogger_1.0.0_1539549241846_0.8456873337763744"},"_hasShrinkwrap":false},"1.0.1":{"name":"@unplgtc/cblogger","version":"1.0.1","description":"Quality logger for Node applications","main":"src/CBLogger.js","scripts":{"test":"jest"},"repository":{"type":"git","url":"git+https://github.com/unplgtc/CBLogger.git"},"author":{"name":"Alex Guyot","email":"guyot@unapologetic.io","url":"https://unapologetic.io"},"license":"ISC","bugs":{"url":"https://github.com/unplgtc/CBLogger/issues"},"homepage":"https://github.com/unplgtc/CBLogger#readme","devDependencies":{"jest":"^23.4.2","@unplgtc/cbalerter":"1.1.0"},"dependencies":{"@unplgtc/standard-error":"1.0.0"},"directories":{"test":"test"},"gitHead":"48ed631ef691224eb2e33564e6bcd33855b28e32","_id":"@unplgtc/cblogger@1.0.1","_npmVersion":"6.4.1","_nodeVersion":"8.9.4","_npmUser":{"name":"ajguyot","email":"guyot@unapologetic.io"},"dist":{"integrity":"sha512-NjeK4u11bd7nhyJzlFAo+KYOKFks+36xJMxxj4tjwmMMYr8sk36zhiweqT0HS35wmXqjfp/L4jIYdEQ+UWWLtQ==","shasum":"0bf15d09380320a66bc33cfd41335196e9425a79","tarball":"https://registry.npmjs.org/@unplgtc/cblogger/-/cblogger-1.0.1.tgz","fileCount":6,"unpackedSize":23242,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb9f6CCRA9TVsSAnZWagAAE48P/jnXb73Bih+2Dl3A5ajN\nwUQwbBQked+ySy7ApQE6TiIb9v+6PdUDHP1a5RP+5hTufTeGJgawHJ2qfVCb\nsBIunx3O7EqzISAt+R2BKE8Z8WzbZKNtCMyyx1lrP47Rm6kI5AfPdHqNphg5\nkhpDwlFh7TGQwCj3dXO+ko6ipQ8ZuqF4sslmAngWX3TrROJg0rpSF4qlz1pN\nhSKFFg/iWuwarV5p6sFYQcTwtNs82Y3XrRTFgGzdcowMcmxI3PdJj2QuOR8u\nR7LT5W2VgNEQb7s5EAbHZv/rmGjRMF3FkskWMT+f+SC07aKmIi0pCGHwC5Xk\nNqMOGN+q7JvXSXww3h4ZuFL5kdB9usksfJmRye9ZQxiBgCYPPc0nR7izfAZm\nHkEGBBMAThHj5zOSsILHj1MNagnebIhAcXg5Pr2aXVq41Z+GqGnvahL7kq+R\npWWJcPq7lAJvg1qBIgqRj++F7D9HsCE62hgJDBGmA5wAdBhLXsEajynarjHM\nlLLloQBA2ajWksGobfoikIQjK9DTuSZDJPyQcosWXBZiSWusbOc7YncP69W1\nb3IdJ/nuyWUwDA9YTVQJdqQ/nki+nyAEWUZlBL2XN2siuSjeFkJxhUnwmp69\n6z7GrLQ3dj7cNxC/Fte0+GswqWafamuNBvO6+O+9ED22kFkeNRDDXhi7hSvA\n30UB\r\n=yfGo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC+K5l3EafzWc0UXtucDTXafRBmNKldKvUI7B+S+Q4wIAiBthEReD8HgSBqtK0t32f1G5EE8zrU8cbsLJWF8Dm/ycw=="}]},"maintainers":[{"name":"ajguyot","email":"guyot@unapologetic.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cblogger_1.0.1_1542848130063_0.26090253953841347"},"_hasShrinkwrap":false},"1.0.2":{"name":"@unplgtc/cblogger","version":"1.0.2","description":"Quality logger for Node applications","main":"src/CBLogger.js","scripts":{"test":"jest"},"repository":{"type":"git","url":"git+https://github.com/unplgtc/CBLogger.git"},"author":{"name":"Alex Guyot","email":"guyot@unapologetic.io","url":"https://unapologetic.io"},"license":"ISC","bugs":{"url":"https://github.com/unplgtc/CBLogger/issues"},"homepage":"https://github.com/unplgtc/CBLogger#readme","devDependencies":{"jest":"^23.4.2","@unplgtc/cbalerter":"1.1.1"},"dependencies":{"@unplgtc/standard-error":"1.0.0"},"directories":{"test":"test"},"gitHead":"a51c446c06f668f8026804631c5a5460fc352d8b","_id":"@unplgtc/cblogger@1.0.2","_npmVersion":"6.4.1","_nodeVersion":"8.9.4","_npmUser":{"name":"ajguyot","email":"guyot@unapologetic.io"},"dist":{"integrity":"sha512-D4kzTYik3ew/VPjB90v+UHd0UcKOxTP931NpyjtTcRLw50yVN4pJmjVeFLuvyZiqzZR8oey1brUsNQbrEeBYMw==","shasum":"5640bd4256165125faaa06eebcc9862ab466dbc9","tarball":"https://registry.npmjs.org/@unplgtc/cblogger/-/cblogger-1.0.2.tgz","fileCount":6,"unpackedSize":23180,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb9gAUCRA9TVsSAnZWagAAYFIP/jqaAEJu1JcZZlD7ax5M\no8Spm9stj3wys8Gh8pPekaKkpDZ2Y5UfcAW/KQp2AjOgp6oc6H+2wDlKITyJ\nieK95ClAEEnKi+D2C1rXJNBxJqjELnkNdQSX+3qEfF6HMTvUWRxN40po3pbp\n5uZEs+DXBTLmvQH6Lfnr9DdBEVnT2b/PFBCHx4p8FHojnKF8Zb1diM76nQuN\ngXtGENFzw5dNCK9hY3NLaSL0ehyfqScz5lGVjsjCZemXNnNi2mgtJo0ItRKU\n7goIkGtdNRRAJdS9OHuI6uWdU9ePHbBMZ0Ydbq9YMDqnsygknSzhTmQHqYhM\nt+ldpHoJQGheZbFz4mf/5bYRMpIB5TIojbwL66PSdQJFcw1Yb9tS8oNPdWiJ\nojsZBUDM/hA8QMLrXTBRke2HCRPaoUguR3ni51HElyIePw+H+KBQqGQhflhO\nFoWKKCvMYtA1lpw7qJRfPE9oW/CMbKEzqXUllU8xHXK7Fs9CTkNlsXSmY7Tu\nnM4pLgENPaqM4RlAv33k923g+tb9nO8C5q2oyVKm9dk8SQao+regUUiFKWvx\n9ZLRFsO9O1Rt7BS4lfOBr2wfRqeRAfNaA0NCbVG+LPwq7aNwsmtpyjetBJoL\nkGj1EvttzVl4uFjhYKqpl38VzpKbldmYJKmLydy2Da+SZa2n666JeF7ni9CL\nm30J\r\n=I2KI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFJy36gQqipcXHENLNUqEBQaPxbxATZ9n7KbIry3PGaNAiBNUjn/Q2zOaHNgA9UvK1WJDkiT5+zjGcr7AqXb4p20hg=="}]},"maintainers":[{"name":"ajguyot","email":"guyot@unapologetic.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cblogger_1.0.2_1542848531717_0.9757038006657712"},"_hasShrinkwrap":false},"1.0.3":{"name":"@unplgtc/cblogger","version":"1.0.3","description":"Quality logger for Node applications","main":"src/CBLogger.js","scripts":{"test":"jest"},"repository":{"type":"git","url":"git+https://github.com/unplgtc/CBLogger.git"},"author":{"name":"Alex Guyot","email":"guyot@unapologetic.io","url":"https://unapologetic.io"},"license":"ISC","bugs":{"url":"https://github.com/unplgtc/CBLogger/issues"},"homepage":"https://github.com/unplgtc/CBLogger#readme","devDependencies":{"jest":"^23.4.2","@unplgtc/cbalerter":"1.1.1"},"dependencies":{"@unplgtc/standard-error":"1.0.0"},"directories":{"test":"test"},"gitHead":"bcd4a4769b12893148501a588b49904032892511","_id":"@unplgtc/cblogger@1.0.3","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-MUfrCdY2vrj0flL5s/01uffvKKRZy4W6/HR0PEMDxfa6NrXwBTXkbeyiNMfQBl2IO23iXKyIOA/JtkuZRyyy5w==","shasum":"ec9390370c61e44ad73db853e56bc2d9fe7d626f","tarball":"https://registry.npmjs.org/@unplgtc/cblogger/-/cblogger-1.0.3.tgz","fileCount":6,"unpackedSize":24592,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfOam2CRA9TVsSAnZWagAAJeYP/3zgS4+gf+e+7xJ90nN3\nLVSs3L6kDXP+w9is2Iix4NjafWyzuLrwiWd9J2w6cNfScg4zHIZBik9X+UwD\nk81CIyoNaboaiATM7yX81qiIxgs8SS+Khr0sykWgvegHR0l+h4jp6JM+bBZq\n3/3UOxHUiSgTtYI558F71/Bh8KShoWm4i24aCtDvDRA+o8OCaCwy3L4vH91W\nmA7QOIWAFHXKV1q2Exh9IEPL8D9srzTOCriFIqAr5SvR7wEQhemWt0GedzpE\nur32l7hqvPqSiHnpLBeX8YYtwq1hapEp7jPIIn2opm0wKP858EY9oeMDjID2\n/8Tkz56ejixnlIkqeeY7LSuqemKb9pE84rBhCEXjjOJD63yaJDs/EZc1EfIp\nJK6RIZhCEFWcMTiiSPUK1x+kjgzt7gUjOgJR1D2dN0+zPG2DI4GIrW+zAmj5\ng32sxwpdsBimr5szBgTvsye4u32o0BpVZdJcOEPzPX2Ean2XtA9YoTJmkOOB\n/ttgrP7wBeYzWQQI1wnLSyAjw5zaoDqZ+vfgb/FywwZ3gVCOVs1We6BXOMQY\nOFQlp1sF7uU4WDk09zD2xWwVQGSl2kj9Aqsv49jUFt4QiatAE7vFOUaNc/19\nyB5pbrva6J4X26aXq/nbGIAKa7ry95Vo1U+4OVMAakm3vB/gIzcfsbYV9ZmS\nTN7w\r\n=ScrU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCqjDDAqe7SkZVxGsCgyeZW4t/A1UKNDvNO9S7J0DKx6AIhAL3zx0czlasSkNu0qU2/WTPxI+x6NM7NXtQSJ0BVR1zu"}]},"maintainers":[{"name":"ajguyot","email":"guyot@unapologetic.io"}],"_npmUser":{"name":"ajguyot","email":"guyot@unapologetic.io"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cblogger_1.0.3_1597614518228_0.28031590416350705"},"_hasShrinkwrap":false},"1.0.4":{"name":"@unplgtc/cblogger","version":"1.0.4","description":"Quality logger for Node applications","main":"src/CBLogger.js","scripts":{"test":"jest"},"repository":{"type":"git","url":"git+https://github.com/unplgtc/CBLogger.git"},"author":{"name":"Alex Guyot","email":"guyot@unapologetic.io","url":"https://unapologetic.io"},"license":"ISC","bugs":{"url":"https://github.com/unplgtc/CBLogger/issues"},"homepage":"https://github.com/unplgtc/CBLogger#readme","devDependencies":{"jest":"^23.4.2","@unplgtc/cbalerter":"1.1.1"},"dependencies":{"@unplgtc/standard-error":"1.0.0"},"directories":{"test":"test"},"gitHead":"c6238aa638c2630f7bb58ecffa623ce8a6ca40ef","_id":"@unplgtc/cblogger@1.0.4","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-BE3bqh5LO1cFDNJYCCIVogWHR08eGZyRDCmC9w4DmlEpUJ9MTmHSe/LDi0DWI9bLeaZfIvwaLXVdMU61+xfRtg==","shasum":"586a301e349e40b8179516390d5a7c327fe4c8f1","tarball":"https://registry.npmjs.org/@unplgtc/cblogger/-/cblogger-1.0.4.tgz","fileCount":6,"unpackedSize":25590,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfOvXTCRA9TVsSAnZWagAAqWIP/2FIFFXdDex8J+L8nvYn\nBvI1GuWkgow+SynT4Ye42MDBHEqMK2be6leV3h5/hUmooQTByUCRPKPAgTvY\nImD4QXjoXUk4HC7yYW/AF2FTnQoLCB09Ad5BgTG/VPfz027ILCY/RQrZzxbE\nO9NPam9Woh2Ue2qvkMmHqmQwj5POajUpJNNXUTQyrcws2HTMdDHVobgZ4qDe\n8VF6d5E3pnPZSBiTuBlpgojZm0757s7BBsoyJ2juKi9j0PehS+zKdAyGdlJN\n3kFqZt0y7DOCZvubK/+isA/ltDUzqkznM/vvZcYMO4gPxhX91C3kBoZMFLIh\nO1LkPlGC0ZKLAbps9JxTV7aXs9hLfXWzjfPZ5eZdSphdSJ4zDGDm8PPbjsqJ\n2HJHtJI87CvQRsqpfVgk0fPoAI6n5TzEjHZdkUfrg6F0WqUSV4/OOETxkFPj\nsK8siOa+3Wv7Mq2rb6Vq1exF3cQmmoFtM5Z2msqzOzGJUXRYO+Ibbf2ico2c\nNorgmPvlM6tpeBsfH4aWXd7OAohCXtkdl/rErTi3w2ImFVG5AcJSqLS3B6oq\n04tvzERlSwZINGMzG1/O3L5p5nKBZXie8j5wk/ITotBkQODgi9K7FwlSBOlq\n9s3cDXqrUSQ5CyJO4JOxAuakFllt8tInMXrWv05HL+EP5k7Uo6rgw4GEkho5\nb1yS\r\n=nxXl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCs7mp9vT7BtEAfyuuMJZLAwFTVfuM4JZy8B46zOJX98gIhAPWGXj3nnzopAl1dBjPLPg5HVMRP76Myy/Ogrg/afixN"}]},"maintainers":[{"name":"ajguyot","email":"guyot@unapologetic.io"}],"_npmUser":{"name":"ajguyot","email":"guyot@unapologetic.io"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cblogger_1.0.4_1597699538666_0.16373290366549642"},"_hasShrinkwrap":false},"1.1.0":{"name":"@unplgtc/cblogger","version":"1.1.0","description":"Quality logger for Node applications","main":"src/CBLogger.js","scripts":{"test":"jest"},"repository":{"type":"git","url":"git+https://github.com/unplgtc/CBLogger.git"},"author":{"name":"Alex Guyot","email":"guyot@unapologetic.io","url":"https://unapologetic.io"},"license":"ISC","bugs":{"url":"https://github.com/unplgtc/CBLogger/issues"},"homepage":"https://github.com/unplgtc/CBLogger#readme","devDependencies":{"jest":"^23.4.2","@unplgtc/cbalerter":"1.1.1"},"dependencies":{"@unplgtc/standard-error":"1.0.0"},"directories":{"test":"test"},"gitHead":"a47ab2a2cb8629c53cacee086c7efd0eb34dafc3","_id":"@unplgtc/cblogger@1.1.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-vsolOGMljHLxtKjvnNGBKWPSHvt+nFpdJUfIF63vQ/U6yKPIqCL08CHlIk/023m6Fh2gt2D+epp03Xv18TLkIQ==","shasum":"4c0c9f10ad1b3f132f308324220ca20c1665a5cc","tarball":"https://registry.npmjs.org/@unplgtc/cblogger/-/cblogger-1.1.0.tgz","fileCount":6,"unpackedSize":27975,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWQvQCRA9TVsSAnZWagAAtvMP/iWytRrEJ3K6lD23cGiD\nw5yPkyJPQVFx85Z1319yXJgF4RI0DIBQyk5ZyikSyf3nS4nbJMFobzHbzG0c\nkGUgrNHRULeiJlNhJwuN85xpd9/NEWj8kUiMbjQH4bolLapOGVCBtwq1kbmh\nTHh92++ignDDSFSFZQauBia64EPgxVESZMgCiLFTLTYi5eqOu3YQaR4225Qb\n4T5H5/EwqP2sDC7dGbI49mqv08pVDlN0MTqQzHsgHz8xtcRmiPeLt6BZBTRT\nrTtRZ+Bxr0NzXG6gz4+eVnJzUUNWrM/q4N5q0Ma98IwR0yEPFwNaCX9CO7+g\nkom5TrcU4IXVZWfYwfJnjzFuvELg0Ql0FDSYjd1qPBBcI8R536zdWUx5K0fc\ncoTEvuN7nx+53gD1t0u1ZFHU7qB+qx4TxJu3w3sOGNcaOVJUntgKcTDeuAEx\nX4kld+RECairN6Evu+cwJRJT5beHClaiENcduHJ5OphoRZZT7BH2R4MXiW30\nsxPcEHxAmGjgwDmZASSBniOmONGzYjEsxjTqIjoaif/s4LdhrGAWteFe5OND\nem4TdBr6VLR9Np77+GQU50IAneTO2mOkSHKQw2pCgXCkN8TUebAzM6OigDye\nSgdhgba+MYXmx/dTdLA6exQ6Fn24ahT3SiR7ycoUkiM8PmCREDjT29ZsSEoG\norA3\r\n=wFbY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF0N639q5cU0zC69zgjQDwGr8LeYJh3a4XH7vVzPf/gOAiBg/MmMhqvKywHV2A8N/LYCespOlOy3WewWhzwz7boqrg=="}]},"_npmUser":{"name":"ajguyot","email":"guyot@unapologetic.io"},"maintainers":[{"name":"ajguyot","email":"guyot@unapologetic.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cblogger_1.1.0_1616448464139_0.5598753317477272"},"_hasShrinkwrap":false},"2.0.0":{"name":"@unplgtc/cblogger","version":"2.0.0","description":"Quality logger for Node applications","type":"module","exports":"./src/CBLogger.js","engines":{"node":">=14.13.1 || >=16.0.0"},"scripts":{"test":"NODE_OPTIONS=--experimental-vm-modules npx jest"},"repository":{"type":"git","url":"git+https://github.com/unplgtc/CBLogger.git"},"author":{"name":"Alex Guyot","email":"alex@unapologetic.io","url":"https://unapologetic.io"},"license":"ISC","bugs":{"url":"https://github.com/unplgtc/CBLogger/issues"},"homepage":"https://github.com/unplgtc/CBLogger#readme","devDependencies":{"@unplgtc/cbalerter":"3.0.0","jest":"^27.3.1"},"dependencies":{"@unplgtc/standard-error":"^3.0.1"},"directories":{"test":"test"},"gitHead":"9928053bd1d7d5eb06a588b83bfe55124858710f","_id":"@unplgtc/cblogger@2.0.0","_nodeVersion":"16.13.0","_npmVersion":"8.1.0","dist":{"integrity":"sha512-1hJBGKbR939+VGd5AK5EA9HE0IiVZM6j8BYkbCbujT8/lsPMxQ0b3gS2lJ8a7jkhy58YCYCmUKP/7banJJ7S+A==","shasum":"2e765c9ec366c4811e930a98bca52ea84a762d4d","tarball":"https://registry.npmjs.org/@unplgtc/cblogger/-/cblogger-2.0.0.tgz","fileCount":6,"unpackedSize":28295,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhr/WpCRA9TVsSAnZWagAAGZYP/iCbK53iMNOm84K7U3hz\nZRvWSr/yUJlQfYSZ9uuDbI3ngfH5LvQkkYu2he11AodZeEVXVr4hjir+6xkp\n2iAv0D464Z5pdPVDgwIFkxdo47ssAbjAL674mhlD3oMgZPZ1ZyoRaJnEojcT\nMVWi9E9eQMdgEGTl5vtOpdZs7jM7M6HIxGsbDxL1Lbe3jlRrZNmyRNBO+81/\n7lddnvGmEzatePGQEnNjMgXBlvo67eeaqtBYfqpeUVhh0e5tDCbU7tcNf1wJ\n8bvODJADUgG0tQnbMWNy1Cfk+X9ya40E8xL+vK7yjvYa4gEI5o+RspUCkwwY\nHsyzAfXIAi9P5RL7S67xwAERORYK+TtKKoXTwVLLWSaZc74fbRmNAyuTwxRm\n1EpAXYI2ojM3AKoz+rMFsis9P04BiLiYWLCl3ofZ/Mq8dbztsCD4BlA916S8\nThNrPnMAgPppI960eoIBPkX2drTBtiOlG6YVH88FEojVs1TWyyXnOg+fahAl\nM18jJzwUGCKh6t+7XzDPG6P3bu8g13/hH4z8BbqygbjmunwWv6iALHPndFdU\nAfzDCoBp5N5Ts15Pz/6IHGttMCzBp+oN6dPO2vC6SSvTVM645vSuSTiRdHlH\nwkq3mfmMED9xs/unymL1d1RT/nyEJLEPWO0mgR2AhoNEaN2Fv6Zfm6pjky0R\nM9Sg\r\n=k/lo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEkIVIbi3DfYknJynCc6gNENN+GYVJyYlUgmbCuep3yuAiAG+LrfkXA17AigKt5I9quDpwLPsF2OSs38b4accBj4ug=="}]},"_npmUser":{"name":"ajguyot","email":"guyot@unapologetic.io"},"maintainers":[{"name":"ajguyot","email":"guyot@unapologetic.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cblogger_2.0.0_1638921641027_0.22494532070520568"},"_hasShrinkwrap":false},"2.0.0-nextjs":{"name":"@unplgtc/cblogger","version":"2.0.0-nextjs","description":"Quality logger for Node applications","type":"module","exports":"./src/CBLogger.js","engines":{"node":">=14.13.1 || >=16.0.0"},"scripts":{"test":"NODE_OPTIONS=--experimental-vm-modules npx jest"},"repository":{"type":"git","url":"git+https://github.com/unplgtc/CBLogger.git"},"author":{"name":"Alex Guyot","email":"alex@unapologetic.io","url":"https://unapologetic.io"},"license":"ISC","bugs":{"url":"https://github.com/unplgtc/CBLogger/issues"},"homepage":"https://github.com/unplgtc/CBLogger#readme","devDependencies":{"@unplgtc/cbalerter":"3.0.0","jest":"^27.3.1"},"dependencies":{"@unplgtc/standard-error":"^3.0.1"},"directories":{"test":"test"},"gitHead":"6c39ca84ef84d7cbbbae5f9ca58420a0cd66b22f","readme":"[![CircleCI master build status](https://img.shields.io/circleci/project/github/unplgtc/CBLogger/master.svg?label=master&logo=circleci)](https://circleci.com/gh/unplgtc/CBLogger/tree/master)\n[![npm version](https://img.shields.io/npm/v/@unplgtc/cblogger.svg)](https://www.npmjs.com/package/@unplgtc/cblogger)\n\n# CBLogger\n\n### Quality logger for Node applications\n\nCBLogger puts an end to loosely-formatted log messages. As your Node projects grow larger, haphazard and unstandardized log output becomes an enormous hinderance. If you don't have a strategy for identifying the source of your log messages, matching identical messages with easy-to-find keys, and tagging them with timestamps, then tracking down bugs with those logs becomes unnecessarily difficult and time consuming.\n\nCBLogger provides a light interface which you can use in place of calls to `console.log`, `console.error`, or `console.trace`. Pass in some simple parameters and CBLogger will assemble and print your log messages in a standardized and information-rich way. Full stack traces can be added to any log message by flagging an option, but every log will always include the filename and line number of the CBLogger call, as well as both human-readable and [Unix epoch](https://en.wikipedia.org/wiki/Unix_time) timestamps.\n\nOnce you transition to CBLogger, your application's log output will be richer and more useful. Monitoring and debugging problems, and sending runtime alerts to your platform of choice will be easier than ever before.\n\n## Usage\n\nInstall CBLogger from npm:\n\n```\n$ npm i @unplgtc/cblogger\n```\n\nImport CBLogger into a service:\n\n```js\nimport CBLogger from '@unplgtc/cblogger';\n```\n\nCBLogger support four different log output calls: `CBLogger.debug`, `CBLogger.info`, `CBLogger.warn`, and `CBLogger.error`. All four use identical interfaces, so they can be used interchangeably based solely on what level of log you need to output. All arguments to CBLogger calls are optional, but you should at least include a `key` if you want your logs to mean anything.\n\nThe first argument CBLogger accepts is named `key`, and if you're following best practices then each key should be unique to each log message (or at least to a very small set of log messages). If your Node project is minuscule and that's already a stricter mandate than you're looking for, don't leave yet. CBLogger at its most basic supports a very similar interface to the familiar `console.log`. Feel free to pass in nothing but an arbitrary string of text for your `key` and CBLogger will happily output it. If you want to dump the contents of an Object, just use the `data` param — CBLogger's second argument.\n\n```js\n// MyService.js\n\nCBLogger.info('Some arbitrary text');\n```\n\nAnnotated output:\n\n```\nINFO: ** Some arbitrary text\n-> MyService.js L3 at 2018-10-08 03:50:35.417Z (1538970635417)\n   ^            ^     ^                         ^\n   Filename   Line #  Human-readable timestamp  Epoch timestamp\n```\n\nLog arbitrary text and an Object:\n\n```js\nvar someObject = {\n\tfoo: 'bar'\n}\nCBlogger.debug('Description of this object', someObject);\n```\n\nOutput:\n\n```\nDEBUG: ** Description of this object\n{ foo: 'bar' }\n-> MyService.js L4 at 2018-10-08 03:50:35.417Z (1538970635417)\n```\n\nUsing CBLogger with unique keys works the exact same way, and has the added bonus of improving log aggregation techniques if you ever need to implement them. Keys are more easily identifiable in manual log searches as well. Here's an example with a `warn` message:\n\n```js\nCBLogger.warn('unique_key_for_this_warning', someObject);\n```\n\nOutput:\n\n```\nWARN: ** unique_key_for_this_warning\n{ foo: 'bar' }\n-> MyService.js L5 at 2018-10-08 03:50:35.417Z (1538970635417)\n```\n\nThe second argument to any CBLogger log call, `data`, accepts any JavaScript Object. You can pass in your own Objects you want to output if you need no context around them other than your key, but it's also a good place to type out more descriptive messages in non-key form for your logs:\n\n```js\nCBLogger.info('some_info_key', {message: 'This is what happened', theObject: someObject});\n```\n\nOutput:\n\n```\nINFO: ** some_info_key\n{ message: 'This is what happened', theObject: { foo: 'bar' } }\n-> MyService.js L4 at 2018-10-08 03:50:35.417Z (1538970635417)\n```\n\nIf the Object in your `data` field grows long enough, it will be split out onto separate lines:\n\n```js\nCBLogger.info('some_info_key', {message: 'This is what happened', theObject: someObject, bar: 'baz'});\n```\n\nOutput:\n\n```\nINFO: ** some_info_key\n{ message: 'This is what happened',\n  theObject: { foo: 'bar' },\n  bar: 'baz' }\n-> MyService.js L4 at 2018-10-08 03:50:35.417Z (1538970635417)\n```\n\n## Options\n\nThe third CBLogger argument is `options`, and unsurprisingly it takes an Object with which you can flag various options. Currently CBLogger supports five options: `stack`, `ts`, `depth`, `alert`, and `webhook`.\n\nSetting `stack` to `true` in the `options` parameter of any call to CBLogger will result in a full stacktrace being appended to your log's output:\n\n```js\nCBLogger.info('some_info_key', {message: 'This is what happened'}, {stack: true});\n```\n\nOutput:\n\n```\nINFO: ** some_info_key\n{ message: 'This is what happened' }\n-> MyService.js L4 at 2018-10-08 03:50:35.417Z (1538970635417)\n   at Object.<anonymous> (/Users/path/to/file/src/MyService.js:4:10)\n    at Module._compile (module.js:643:30)\n    at Object.Module._extensions..js (module.js:654:10)\n    at Module.load (module.js:556:32)\n    at tryModuleLoad (module.js:499:12)\n    at Function.Module._load (module.js:491:3)\n    at Function.Module.runMain (module.js:684:10)\n```\n\nThe `ts` options is always true by default, but you can explicitly set it to `false` if you want to remove the timestamps from your log output. This may be useful if your log data already includes a timestamp, of if you're using a process manager like PM2 and want to use its log timestamps instead of CBLogger's.\n\n```js\nCBLogger.info('some_info_key', {message: 'This is what happened'}, {ts: false});\n```\n\nOutput:\n\n```\nINFO: ** some_info_key\n{ message: 'This is what happened' }\n-> MyService.js L4\n```\n\nThe `depth` option allows you to output nested objects in the data field. By default depth is set to `4`, but you can set it via this option to lesser or greater numbers, or set it to `null` to output all levels of the data object regardless of how deep it goes.\n\nThe `alert` and `webhook` options trigger custom webhook alerting objects which CBLogger can be extended with. See the \"Extending with Alerters\" section below for more information on using these options.\n\n## Err\n\n`err` is the fourth and final argument for CBLogger's log output functions. `err` can be any object, but by convention it should represent an actual error that the log message pertains to. This argument is often used for JavaScript `Error` objects which have been thrown and caught and need to be outputted into your logs. You can also use [StandardError](https://github.com/unplgtc/StandardError) errors for this argument. Whatever you choose to pass in for `err`, it will be printed underneath the `data` object, preceded by two asterisks.\n\n```js\nCBLogger.error('some_error_key', {message: 'Uh oh there was an error'}, undefined, new Error('oh no'));\n```\n\nOutput:\n\n```\nINFO: ** some_error_key\n{ message: 'Uh oh there was an error' }\n** Error: oh no\n    at Object.<anonymous> (/Users/path/to/file/src/MyService.js:7:79)\n    at Module._compile (module.js:643:30)\n    at Object.Module._extensions..js (module.js:654:10)\n    at Module.load (module.js:556:32)\n    at tryModuleLoad (module.js:499:12)\n    at Function.Module._load (module.js:491:3)\n    at Function.Module.runMain (module.js:684:10)\n    at startup (bootstrap_node.js:187:16)\n    at bootstrap_node.js:608:3\n-> test.js L7 at 2018-10-11 04:00:27.363Z (1539230427363)\n```\n\nIf you are outputting an actual JavaScript `Error` Object — as by convention you generally should be for the `err` argument — then you can omit the `options` or `data` arguments on occasions where you have no options or data to pass. This means there's no need to add unnecessary `undefined` or `null` arguments to space out your CBLogger call such that `err` is the fourth arg. In other words, this call:\n\n```js\nCBLogger.error('some_error_key', {message: 'Uh oh there was an error'}, undefined, new Error('oh no'));\n```\n\nIs entirely equivalent to this call:\n\n```js\nCBLogger.error('some_error_key', {message: 'Uh oh there was an error'}, new Error('oh no'));\n```\n\nSimilarly, if no extra data output is needed, this call will set the `Error` to the `err` argument as well:\n\n```js\nCBLogger.error('some_error_key', new Error('oh no'));\n```\n\nAgain, this shortcut only works with actual `Error` Objects (or extensions of the `Error` Object), so if you want a string or other Object output as `err` then you will need to space the arguments with `undefined` or `null` as necessary.\n\n## Extending with Alerter\n\nCBLogger supports being extended with a single \"alerter\" Object. This can be any Object which implements a function named `alert`, but if your alerts just require sending a POST message to a webhook, Unapologetic's [CBAlerter](https://github.com/unplgtc/CBAlerter) package has been purpose-built for this use case.\n\nTo extend CBLogger with an alerter Object (exemplified here with CBAlerter, but that is not required) just pass the Object to CBLogger's `extend()` function, along with the `Alerter` enum:\n\n```js\nimport CBLogger from '@unplgtc/cblogger';\nimport CBAlerter from '@unplgtc/cbalerter';\n\n//\n// Make sure to set up your CBAlerter instance here\n//\n\nCBLogger.extend(CBLogger.EXTENSION.Alerter, CBAlerter);\n\n// Log an error and trigger an alert with CBAlerter\nCBLogger.error('some_error_key', { message: 'Uh oh there was an error and we should be alerted about it!' }, { alert: true }, new Error('Oh no'));\n```\n\nOnce extended, when CBLogger receives a call with the `alert: true` option set, it will call its alerter and pass all of the data it was given. The alerter will post that data to whatever source it has set up, then let CBLogger know whether the request was successful. If the alert succeeded then CBLogger does nothing further, but if the alert failed then CBLogger will output an error message so that you can tell your alerts aren't going through.\n\nWhen attempting to extend CBLogger, `CBLogger.extend()` will return `true` if the extension was successful, `false` otherwise. Currently all Objects which implement `alert()` functions are accepted, but in order for the alerts to work without throwing errors there are a few further requirements.\n\nA valid alerter needs to not just implement a function named `alert`, but that function must take five arguments: `level`, `key`, `data`, `options`, and `err`. The function must also return a Promise that will unwrap to the success or failure of the alert.\n\nIn the example above, CBLogger would call its extended alerter with  `alert('ERROR', key, data, options, err)`. Assuming that alerter Object is functional, it will in turn post that message to a webhook somewhere and return the success value as a Promise to CBLogger. The `level` argument will be `'DEBUG'`, `'INFO'`, `'WARN'`, or `'ERROR'`, depending on which CBLogger function was called. The remaining arguments are passed to the alerter just as they were passed to CBLogger.\n\nFinally, if for some reason you want to _change_ the alerter Object that CBLogger is extended with, you'll need to explicitly remove the existing alerter before being able to extend with a new one. This can be done with CBLogger's `unextendAlerter()` method.\n\n```js\nvar result = CBLogger.extend(CBLogger.EXTENSION.Alerter, CBAlerter);\n// true\n\nresult = CBLogger.extend(CBLogger.EXTENSION.Alerter, someAlerter);\n// StandardError.CBLogger_409 (Logger has already been extended with this extension type)\n\nresult = CBLogger.unextendAlerter();\n// true\n\nresult = CBLogger.extend(CBLogger.EXTENSION.Alerter, someAlerter);\n// true\n```\n\n## Extending with Honeybadger\n\nCBLogger integrates with [Honeybadger](https://honeybadger.io) to track error metrics. Enable the extension by passing a configured `Honeybadger` object to `CBLogger.extend()`, like so:\n\n```js\nimport Honeybadger from '@honeybadger-io/js';\n\nHoneybadger.configure(honeybadgerConfig);\n\nCBLogger.extend(CBLogger.EXTENSION.Honeybadger, Honeybadger);\n```\n\nOnce extended, calls to `CBLogger.error()` which include an `Error` object will be passed to Honeybadger. You can use your Honeybadger configuration to determine which environments actually forward errors so that your local, dev, or test environments don't use your Honeybadger rate limits. If you pass an object in the `data` parameter of your `CBLogger.error()` call then it will be passed to Honeybadger as the `context` parameter for the error, and whatever `key` parameter you send will be passed as the error's descriptive name:\n\n```js\n// Honeybadger will receive the 'Oh no' Error with the `data` object passed as context and `oh_no` passed as name\nconst data = { message: 'Some context' };\n\nCBLogger.error('oh_no', data, new Error('Oh no'));\n```\n\n## cls-rtracer Support\n\nCBLogger supports outputting request IDs if your application is using the [cls-rtracer package](https://github.com/puzpuzpuz/cls-rtracer). cls-rtracer uses the [`AsyncLocalStorage` class](https://nodejs.org/api/async_hooks.html#async_hooks_class_asynclocalstorage) from the experimental [`async_hooks` core Node module](https://nodejs.org/api/async_hooks.html) to generate unique IDs for requests coming into your application. cls-rtracer supports several different server middlewares, including [Express](https://expressjs.com). If you add support for cls-rtracer to your application, CBLogger will automatically identify this and include request IDs in your log output — no configuration required.\n","readmeFilename":"README.md","_id":"@unplgtc/cblogger@2.0.0-nextjs","_nodeVersion":"16.13.0","_npmVersion":"8.1.0","dist":{"integrity":"sha512-h9P097OwaoJkJyXGYyDiHbq1lNTzyrmndw6QlAbmWl+909ui8tcRLHfKcUypvybVzVOAudrMi6CogGxKh7e/nQ==","shasum":"a95ebc88934e987d0a595f16c4041d8112c3c5de","tarball":"https://registry.npmjs.org/@unplgtc/cblogger/-/cblogger-2.0.0-nextjs.tgz","fileCount":6,"unpackedSize":28026,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiDvqYACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmonXg/+PI4cm4pYS9jzGc+Mlci1Oiv/Is2EymIDPyp7A3CDVoEFcVqL\r\nXLK9WsOddaksjRHNjGcRxLllVHf4noUgcgkmtMSFWLA7OwqQpfqmsLVHFTqj\r\nO8fqMwmhSK+ozwUVB21d7p8mxP/KL8+FK+Izer2UCR2NF4ZC3mWrmdy0N0no\r\nD3nL+4f5Ta/cDcn99nePteZsBJ/qccjvwxKJHx4yqdXoKmoiWoCQEpHwab/4\r\nrfPyzl1do5YeREgBYyZHLNObRWDwCwPMaBQo7BwMkGHww+V3CixkroLgpaC7\r\npn5XhInuESwnpHGBOmqkmrBZeG8+gBmMNUmX/JCVpg166bRHWOuwWpiiLYm1\r\n840h6WRzE+6fID52aoOaH2cKFvoh7Jap5oDRMhDGr3QAEjE9DRahkwBYuNuw\r\nghnexxizuI5EpIF33om9q9wiuwKv8SfxmPZw+ku3DwF9x8qISlKpuih53VzD\r\nkG7PJ+5E2KlhC2UzKt+z4XWrMrgEjf2kUkJEcrI8/GyZXVAIGi+IkhFK5n3H\r\n3oR6lzm+LgGz0fLpZbKodSvdIqq6H25yCgQF3Wlc9Yqh6sFWrJIkNg3/AHbw\r\nUVJerC3VfdWvvwVg6klNAkrI5hNOxUsDko/qJckuJhs2qW1f3xkRoZZtlDfl\r\nviGlFw/l6uHTMLIdtCULH5Exbp2Y8FoVAuA=\r\n=PpZB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLbAZDLMCIK0ER7d56RmuE3epckofy2Lmc+lrtdMfArwIgc9z+bZPUeJZFm/OdSVnVgR/iI5ZulOpd+55h4aIw8rw="}]},"_npmUser":{"name":"ajguyot","email":"alex@unapologetic.io"},"maintainers":[{"name":"ajguyot","email":"alex@unapologetic.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cblogger_2.0.0-nextjs_1645148824530_0.34230807321868384"},"_hasShrinkwrap":false},"2.0.1-nextjs":{"name":"@unplgtc/cblogger","version":"2.0.1-nextjs","description":"Quality logger for Next.js applications","type":"module","exports":"./src/CBLogger.js","engines":{"node":">=14.13.1 || >=16.0.0"},"scripts":{"test":"NODE_OPTIONS=--experimental-vm-modules npx jest"},"repository":{"type":"git","url":"git+https://github.com/unplgtc/CBLogger.git"},"author":{"name":"Alex Guyot","email":"alex@unapologetic.io","url":"https://unapologetic.io"},"license":"ISC","bugs":{"url":"https://github.com/unplgtc/CBLogger/issues"},"homepage":"https://github.com/unplgtc/CBLogger#readme","devDependencies":{"@unplgtc/cbalerter":"3.0.0","jest":"^27.3.1"},"dependencies":{"@unplgtc/standard-error":"^3.0.1","util":"^0.12.4"},"directories":{"test":"test"},"gitHead":"547abaab3d448ab9d66a2b91661772d8d957c809","readme":"[![CircleCI master build status](https://img.shields.io/circleci/project/github/unplgtc/CBLogger/master.svg?label=master&logo=circleci)](https://circleci.com/gh/unplgtc/CBLogger/tree/master)\n[![npm version](https://img.shields.io/npm/v/@unplgtc/cblogger.svg)](https://www.npmjs.com/package/@unplgtc/cblogger)\n\n# CBLogger\n\n### Quality logger for Node applications\n\nCBLogger puts an end to loosely-formatted log messages. As your Node projects grow larger, haphazard and unstandardized log output becomes an enormous hinderance. If you don't have a strategy for identifying the source of your log messages, matching identical messages with easy-to-find keys, and tagging them with timestamps, then tracking down bugs with those logs becomes unnecessarily difficult and time consuming.\n\nCBLogger provides a light interface which you can use in place of calls to `console.log`, `console.error`, or `console.trace`. Pass in some simple parameters and CBLogger will assemble and print your log messages in a standardized and information-rich way. Full stack traces can be added to any log message by flagging an option, but every log will always include the filename and line number of the CBLogger call, as well as both human-readable and [Unix epoch](https://en.wikipedia.org/wiki/Unix_time) timestamps.\n\nOnce you transition to CBLogger, your application's log output will be richer and more useful. Monitoring and debugging problems, and sending runtime alerts to your platform of choice will be easier than ever before.\n\n## Usage\n\nInstall CBLogger from npm:\n\n```\n$ npm i @unplgtc/cblogger\n```\n\nImport CBLogger into a service:\n\n```js\nimport CBLogger from '@unplgtc/cblogger';\n```\n\nCBLogger support four different log output calls: `CBLogger.debug`, `CBLogger.info`, `CBLogger.warn`, and `CBLogger.error`. All four use identical interfaces, so they can be used interchangeably based solely on what level of log you need to output. All arguments to CBLogger calls are optional, but you should at least include a `key` if you want your logs to mean anything.\n\nThe first argument CBLogger accepts is named `key`, and if you're following best practices then each key should be unique to each log message (or at least to a very small set of log messages). If your Node project is minuscule and that's already a stricter mandate than you're looking for, don't leave yet. CBLogger at its most basic supports a very similar interface to the familiar `console.log`. Feel free to pass in nothing but an arbitrary string of text for your `key` and CBLogger will happily output it. If you want to dump the contents of an Object, just use the `data` param — CBLogger's second argument.\n\n```js\n// MyService.js\n\nCBLogger.info('Some arbitrary text');\n```\n\nAnnotated output:\n\n```\nINFO: ** Some arbitrary text\n-> MyService.js L3 at 2018-10-08 03:50:35.417Z (1538970635417)\n   ^            ^     ^                         ^\n   Filename   Line #  Human-readable timestamp  Epoch timestamp\n```\n\nLog arbitrary text and an Object:\n\n```js\nvar someObject = {\n\tfoo: 'bar'\n}\nCBlogger.debug('Description of this object', someObject);\n```\n\nOutput:\n\n```\nDEBUG: ** Description of this object\n{ foo: 'bar' }\n-> MyService.js L4 at 2018-10-08 03:50:35.417Z (1538970635417)\n```\n\nUsing CBLogger with unique keys works the exact same way, and has the added bonus of improving log aggregation techniques if you ever need to implement them. Keys are more easily identifiable in manual log searches as well. Here's an example with a `warn` message:\n\n```js\nCBLogger.warn('unique_key_for_this_warning', someObject);\n```\n\nOutput:\n\n```\nWARN: ** unique_key_for_this_warning\n{ foo: 'bar' }\n-> MyService.js L5 at 2018-10-08 03:50:35.417Z (1538970635417)\n```\n\nThe second argument to any CBLogger log call, `data`, accepts any JavaScript Object. You can pass in your own Objects you want to output if you need no context around them other than your key, but it's also a good place to type out more descriptive messages in non-key form for your logs:\n\n```js\nCBLogger.info('some_info_key', {message: 'This is what happened', theObject: someObject});\n```\n\nOutput:\n\n```\nINFO: ** some_info_key\n{ message: 'This is what happened', theObject: { foo: 'bar' } }\n-> MyService.js L4 at 2018-10-08 03:50:35.417Z (1538970635417)\n```\n\nIf the Object in your `data` field grows long enough, it will be split out onto separate lines:\n\n```js\nCBLogger.info('some_info_key', {message: 'This is what happened', theObject: someObject, bar: 'baz'});\n```\n\nOutput:\n\n```\nINFO: ** some_info_key\n{ message: 'This is what happened',\n  theObject: { foo: 'bar' },\n  bar: 'baz' }\n-> MyService.js L4 at 2018-10-08 03:50:35.417Z (1538970635417)\n```\n\n## Options\n\nThe third CBLogger argument is `options`, and unsurprisingly it takes an Object with which you can flag various options. Currently CBLogger supports five options: `stack`, `ts`, `depth`, `alert`, and `webhook`.\n\nSetting `stack` to `true` in the `options` parameter of any call to CBLogger will result in a full stacktrace being appended to your log's output:\n\n```js\nCBLogger.info('some_info_key', {message: 'This is what happened'}, {stack: true});\n```\n\nOutput:\n\n```\nINFO: ** some_info_key\n{ message: 'This is what happened' }\n-> MyService.js L4 at 2018-10-08 03:50:35.417Z (1538970635417)\n   at Object.<anonymous> (/Users/path/to/file/src/MyService.js:4:10)\n    at Module._compile (module.js:643:30)\n    at Object.Module._extensions..js (module.js:654:10)\n    at Module.load (module.js:556:32)\n    at tryModuleLoad (module.js:499:12)\n    at Function.Module._load (module.js:491:3)\n    at Function.Module.runMain (module.js:684:10)\n```\n\nThe `ts` options is always true by default, but you can explicitly set it to `false` if you want to remove the timestamps from your log output. This may be useful if your log data already includes a timestamp, of if you're using a process manager like PM2 and want to use its log timestamps instead of CBLogger's.\n\n```js\nCBLogger.info('some_info_key', {message: 'This is what happened'}, {ts: false});\n```\n\nOutput:\n\n```\nINFO: ** some_info_key\n{ message: 'This is what happened' }\n-> MyService.js L4\n```\n\nThe `depth` option allows you to output nested objects in the data field. By default depth is set to `4`, but you can set it via this option to lesser or greater numbers, or set it to `null` to output all levels of the data object regardless of how deep it goes.\n\nThe `alert` and `webhook` options trigger custom webhook alerting objects which CBLogger can be extended with. See the \"Extending with Alerters\" section below for more information on using these options.\n\n## Err\n\n`err` is the fourth and final argument for CBLogger's log output functions. `err` can be any object, but by convention it should represent an actual error that the log message pertains to. This argument is often used for JavaScript `Error` objects which have been thrown and caught and need to be outputted into your logs. You can also use [StandardError](https://github.com/unplgtc/StandardError) errors for this argument. Whatever you choose to pass in for `err`, it will be printed underneath the `data` object, preceded by two asterisks.\n\n```js\nCBLogger.error('some_error_key', {message: 'Uh oh there was an error'}, undefined, new Error('oh no'));\n```\n\nOutput:\n\n```\nINFO: ** some_error_key\n{ message: 'Uh oh there was an error' }\n** Error: oh no\n    at Object.<anonymous> (/Users/path/to/file/src/MyService.js:7:79)\n    at Module._compile (module.js:643:30)\n    at Object.Module._extensions..js (module.js:654:10)\n    at Module.load (module.js:556:32)\n    at tryModuleLoad (module.js:499:12)\n    at Function.Module._load (module.js:491:3)\n    at Function.Module.runMain (module.js:684:10)\n    at startup (bootstrap_node.js:187:16)\n    at bootstrap_node.js:608:3\n-> test.js L7 at 2018-10-11 04:00:27.363Z (1539230427363)\n```\n\nIf you are outputting an actual JavaScript `Error` Object — as by convention you generally should be for the `err` argument — then you can omit the `options` or `data` arguments on occasions where you have no options or data to pass. This means there's no need to add unnecessary `undefined` or `null` arguments to space out your CBLogger call such that `err` is the fourth arg. In other words, this call:\n\n```js\nCBLogger.error('some_error_key', {message: 'Uh oh there was an error'}, undefined, new Error('oh no'));\n```\n\nIs entirely equivalent to this call:\n\n```js\nCBLogger.error('some_error_key', {message: 'Uh oh there was an error'}, new Error('oh no'));\n```\n\nSimilarly, if no extra data output is needed, this call will set the `Error` to the `err` argument as well:\n\n```js\nCBLogger.error('some_error_key', new Error('oh no'));\n```\n\nAgain, this shortcut only works with actual `Error` Objects (or extensions of the `Error` Object), so if you want a string or other Object output as `err` then you will need to space the arguments with `undefined` or `null` as necessary.\n\n## Extending with Alerter\n\nCBLogger supports being extended with a single \"alerter\" Object. This can be any Object which implements a function named `alert`, but if your alerts just require sending a POST message to a webhook, Unapologetic's [CBAlerter](https://github.com/unplgtc/CBAlerter) package has been purpose-built for this use case.\n\nTo extend CBLogger with an alerter Object (exemplified here with CBAlerter, but that is not required) just pass the Object to CBLogger's `extend()` function, along with the `Alerter` enum:\n\n```js\nimport CBLogger from '@unplgtc/cblogger';\nimport CBAlerter from '@unplgtc/cbalerter';\n\n//\n// Make sure to set up your CBAlerter instance here\n//\n\nCBLogger.extend(CBLogger.EXTENSION.Alerter, CBAlerter);\n\n// Log an error and trigger an alert with CBAlerter\nCBLogger.error('some_error_key', { message: 'Uh oh there was an error and we should be alerted about it!' }, { alert: true }, new Error('Oh no'));\n```\n\nOnce extended, when CBLogger receives a call with the `alert: true` option set, it will call its alerter and pass all of the data it was given. The alerter will post that data to whatever source it has set up, then let CBLogger know whether the request was successful. If the alert succeeded then CBLogger does nothing further, but if the alert failed then CBLogger will output an error message so that you can tell your alerts aren't going through.\n\nWhen attempting to extend CBLogger, `CBLogger.extend()` will return `true` if the extension was successful, `false` otherwise. Currently all Objects which implement `alert()` functions are accepted, but in order for the alerts to work without throwing errors there are a few further requirements.\n\nA valid alerter needs to not just implement a function named `alert`, but that function must take five arguments: `level`, `key`, `data`, `options`, and `err`. The function must also return a Promise that will unwrap to the success or failure of the alert.\n\nIn the example above, CBLogger would call its extended alerter with  `alert('ERROR', key, data, options, err)`. Assuming that alerter Object is functional, it will in turn post that message to a webhook somewhere and return the success value as a Promise to CBLogger. The `level` argument will be `'DEBUG'`, `'INFO'`, `'WARN'`, or `'ERROR'`, depending on which CBLogger function was called. The remaining arguments are passed to the alerter just as they were passed to CBLogger.\n\nFinally, if for some reason you want to _change_ the alerter Object that CBLogger is extended with, you'll need to explicitly remove the existing alerter before being able to extend with a new one. This can be done with CBLogger's `unextendAlerter()` method.\n\n```js\nvar result = CBLogger.extend(CBLogger.EXTENSION.Alerter, CBAlerter);\n// true\n\nresult = CBLogger.extend(CBLogger.EXTENSION.Alerter, someAlerter);\n// StandardError.CBLogger_409 (Logger has already been extended with this extension type)\n\nresult = CBLogger.unextendAlerter();\n// true\n\nresult = CBLogger.extend(CBLogger.EXTENSION.Alerter, someAlerter);\n// true\n```\n\n## Extending with Honeybadger\n\nCBLogger integrates with [Honeybadger](https://honeybadger.io) to track error metrics. Enable the extension by passing a configured `Honeybadger` object to `CBLogger.extend()`, like so:\n\n```js\nimport Honeybadger from '@honeybadger-io/js';\n\nHoneybadger.configure(honeybadgerConfig);\n\nCBLogger.extend(CBLogger.EXTENSION.Honeybadger, Honeybadger);\n```\n\nOnce extended, calls to `CBLogger.error()` which include an `Error` object will be passed to Honeybadger. You can use your Honeybadger configuration to determine which environments actually forward errors so that your local, dev, or test environments don't use your Honeybadger rate limits. If you pass an object in the `data` parameter of your `CBLogger.error()` call then it will be passed to Honeybadger as the `context` parameter for the error, and whatever `key` parameter you send will be passed as the error's descriptive name:\n\n```js\n// Honeybadger will receive the 'Oh no' Error with the `data` object passed as context and `oh_no` passed as name\nconst data = { message: 'Some context' };\n\nCBLogger.error('oh_no', data, new Error('Oh no'));\n```\n\n## cls-rtracer Support\n\nCBLogger supports outputting request IDs if your application is using the [cls-rtracer package](https://github.com/puzpuzpuz/cls-rtracer). cls-rtracer uses the [`AsyncLocalStorage` class](https://nodejs.org/api/async_hooks.html#async_hooks_class_asynclocalstorage) from the experimental [`async_hooks` core Node module](https://nodejs.org/api/async_hooks.html) to generate unique IDs for requests coming into your application. cls-rtracer supports several different server middlewares, including [Express](https://expressjs.com). If you add support for cls-rtracer to your application, CBLogger will automatically identify this and include request IDs in your log output — no configuration required.\n","readmeFilename":"README.md","_id":"@unplgtc/cblogger@2.0.1-nextjs","_nodeVersion":"16.13.0","_npmVersion":"8.1.0","dist":{"integrity":"sha512-AEn2AvPSKvFY2n5Aeysr+CK4LPzfET7g68nz3eEjUAaIl/ZM4zhKJYcsK2rQY6qD/vkDZVM3ZB7uG2PU8Thziw==","shasum":"793ca52d4507f4a092dd332d23d24cdab04c8a12","tarball":"https://registry.npmjs.org/@unplgtc/cblogger/-/cblogger-2.0.1-nextjs.tgz","fileCount":6,"unpackedSize":28052,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiETgWACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqYmg//bO5IkFHukKwFWwz4BFkySDnTUYpl6hd0AzxsUrQx16nsXsqw\r\nU0Fb6kxjenP3rKJ44q8GLeB94hCea4P/EC4Zf4ek+GUvKCM5RhbX5eV1k8/V\r\neGlfnOhAjfP2WVo2f9gJeAJrt9VY0EBouR5AQHxIOxJMw5xGjCdy+TWT5q9S\r\n6n+AedZEjWqZa7HFeAYkuGvx7snocDWDumu6zMgTNPAK9yVCUV2LPH/tU0YZ\r\nwNiX6IoShM4M2Ija/FpzuNTnVOnczDPdDZXmhSrzu9m3QOdn6h4L7XalbwSV\r\nS+b6ZWTjCoo9MlCnIUXIwyX4DV5iHtSitzKfrZeSVEC+K29mWGdoPHlJRDv9\r\nO0R5jI/Kb+lM9CivpY+TuqbBGfiJ+qZyY+DS7MO7PJG4CqOKBXwioGOUIJRe\r\nfquV09qqqVyRI7ZjwKhTmVizfa2GzCU/ch5nYjmwk7i0s64HkB3fsW0jwLsI\r\n9d6b5bdIcO+he+RTZBh5RaX41WKMwIPg3gD+8pg+LaQ05+MSRDFkbKEaD/0b\r\nhDpgwiXv1cy/0nlq/j0DDWXBuZO32wTaVe91DyX8ka3SZEW7Jjxz5YW8DVSv\r\nKhvIsn8R8oETs4OXp42R444h6iwArapgmw1YydAFwmSXnnboq8JO+tYSbxg1\r\nPVYxVojaCcLeoBdwmDTQJMwiUd9w+IK1htI=\r\n=sszR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAsdt83T/xFAv3gpBcg0kJsyB6oO9bunEETnlPyXLiegAiBEYdV5Gz1XESIZUeOSQvdNAO05KMSEK1qfUvNwNynOkQ=="}]},"_npmUser":{"name":"ajguyot","email":"alex@unapologetic.io"},"maintainers":[{"name":"ajguyot","email":"alex@unapologetic.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cblogger_2.0.1-nextjs_1645295638150_0.29682778135349785"},"_hasShrinkwrap":false},"2.0.2-nextjs":{"name":"@unplgtc/cblogger","version":"2.0.2-nextjs","description":"Quality logger for Next.js applications","type":"module","exports":"./src/CBLogger.js","engines":{"node":">=14.13.1 || >=16.0.0"},"scripts":{"test":"NODE_OPTIONS=--experimental-vm-modules npx jest"},"repository":{"type":"git","url":"git+https://github.com/unplgtc/CBLogger.git"},"author":{"name":"Alex Guyot","email":"alex@unapologetic.io","url":"https://unapologetic.io"},"license":"ISC","bugs":{"url":"https://github.com/unplgtc/CBLogger/issues"},"homepage":"https://github.com/unplgtc/CBLogger#readme","devDependencies":{"@unplgtc/cbalerter":"3.0.0","jest":"^27.3.1"},"dependencies":{"@unplgtc/standard-error":"^3.0.1","util":"^0.12.4"},"directories":{"test":"test"},"readme":"[![CircleCI master build status](https://img.shields.io/circleci/project/github/unplgtc/CBLogger/master.svg?label=master&logo=circleci)](https://circleci.com/gh/unplgtc/CBLogger/tree/master)\n[![npm version](https://img.shields.io/npm/v/@unplgtc/cblogger.svg)](https://www.npmjs.com/package/@unplgtc/cblogger)\n\n# CBLogger\n\n### Quality logger for Node applications\n\nCBLogger puts an end to loosely-formatted log messages. As your Node projects grow larger, haphazard and unstandardized log output becomes an enormous hinderance. If you don't have a strategy for identifying the source of your log messages, matching identical messages with easy-to-find keys, and tagging them with timestamps, then tracking down bugs with those logs becomes unnecessarily difficult and time consuming.\n\nCBLogger provides a light interface which you can use in place of calls to `console.log`, `console.error`, or `console.trace`. Pass in some simple parameters and CBLogger will assemble and print your log messages in a standardized and information-rich way. Full stack traces can be added to any log message by flagging an option, but every log will always include the filename and line number of the CBLogger call, as well as both human-readable and [Unix epoch](https://en.wikipedia.org/wiki/Unix_time) timestamps.\n\nOnce you transition to CBLogger, your application's log output will be richer and more useful. Monitoring and debugging problems, and sending runtime alerts to your platform of choice will be easier than ever before.\n\n## Usage\n\nInstall CBLogger from npm:\n\n```\n$ npm i @unplgtc/cblogger\n```\n\nImport CBLogger into a service:\n\n```js\nimport CBLogger from '@unplgtc/cblogger';\n```\n\nCBLogger support four different log output calls: `CBLogger.debug`, `CBLogger.info`, `CBLogger.warn`, and `CBLogger.error`. All four use identical interfaces, so they can be used interchangeably based solely on what level of log you need to output. All arguments to CBLogger calls are optional, but you should at least include a `key` if you want your logs to mean anything.\n\nThe first argument CBLogger accepts is named `key`, and if you're following best practices then each key should be unique to each log message (or at least to a very small set of log messages). If your Node project is minuscule and that's already a stricter mandate than you're looking for, don't leave yet. CBLogger at its most basic supports a very similar interface to the familiar `console.log`. Feel free to pass in nothing but an arbitrary string of text for your `key` and CBLogger will happily output it. If you want to dump the contents of an Object, just use the `data` param — CBLogger's second argument.\n\n```js\n// MyService.js\n\nCBLogger.info('Some arbitrary text');\n```\n\nAnnotated output:\n\n```\nINFO: ** Some arbitrary text\n-> MyService.js L3 at 2018-10-08 03:50:35.417Z (1538970635417)\n   ^            ^     ^                         ^\n   Filename   Line #  Human-readable timestamp  Epoch timestamp\n```\n\nLog arbitrary text and an Object:\n\n```js\nvar someObject = {\n\tfoo: 'bar'\n}\nCBlogger.debug('Description of this object', someObject);\n```\n\nOutput:\n\n```\nDEBUG: ** Description of this object\n{ foo: 'bar' }\n-> MyService.js L4 at 2018-10-08 03:50:35.417Z (1538970635417)\n```\n\nUsing CBLogger with unique keys works the exact same way, and has the added bonus of improving log aggregation techniques if you ever need to implement them. Keys are more easily identifiable in manual log searches as well. Here's an example with a `warn` message:\n\n```js\nCBLogger.warn('unique_key_for_this_warning', someObject);\n```\n\nOutput:\n\n```\nWARN: ** unique_key_for_this_warning\n{ foo: 'bar' }\n-> MyService.js L5 at 2018-10-08 03:50:35.417Z (1538970635417)\n```\n\nThe second argument to any CBLogger log call, `data`, accepts any JavaScript Object. You can pass in your own Objects you want to output if you need no context around them other than your key, but it's also a good place to type out more descriptive messages in non-key form for your logs:\n\n```js\nCBLogger.info('some_info_key', {message: 'This is what happened', theObject: someObject});\n```\n\nOutput:\n\n```\nINFO: ** some_info_key\n{ message: 'This is what happened', theObject: { foo: 'bar' } }\n-> MyService.js L4 at 2018-10-08 03:50:35.417Z (1538970635417)\n```\n\nIf the Object in your `data` field grows long enough, it will be split out onto separate lines:\n\n```js\nCBLogger.info('some_info_key', {message: 'This is what happened', theObject: someObject, bar: 'baz'});\n```\n\nOutput:\n\n```\nINFO: ** some_info_key\n{ message: 'This is what happened',\n  theObject: { foo: 'bar' },\n  bar: 'baz' }\n-> MyService.js L4 at 2018-10-08 03:50:35.417Z (1538970635417)\n```\n\n## Options\n\nThe third CBLogger argument is `options`, and unsurprisingly it takes an Object with which you can flag various options. Currently CBLogger supports five options: `stack`, `ts`, `depth`, `alert`, and `webhook`.\n\nSetting `stack` to `true` in the `options` parameter of any call to CBLogger will result in a full stacktrace being appended to your log's output:\n\n```js\nCBLogger.info('some_info_key', {message: 'This is what happened'}, {stack: true});\n```\n\nOutput:\n\n```\nINFO: ** some_info_key\n{ message: 'This is what happened' }\n-> MyService.js L4 at 2018-10-08 03:50:35.417Z (1538970635417)\n   at Object.<anonymous> (/Users/path/to/file/src/MyService.js:4:10)\n    at Module._compile (module.js:643:30)\n    at Object.Module._extensions..js (module.js:654:10)\n    at Module.load (module.js:556:32)\n    at tryModuleLoad (module.js:499:12)\n    at Function.Module._load (module.js:491:3)\n    at Function.Module.runMain (module.js:684:10)\n```\n\nThe `ts` options is always true by default, but you can explicitly set it to `false` if you want to remove the timestamps from your log output. This may be useful if your log data already includes a timestamp, of if you're using a process manager like PM2 and want to use its log timestamps instead of CBLogger's.\n\n```js\nCBLogger.info('some_info_key', {message: 'This is what happened'}, {ts: false});\n```\n\nOutput:\n\n```\nINFO: ** some_info_key\n{ message: 'This is what happened' }\n-> MyService.js L4\n```\n\nThe `depth` option allows you to output nested objects in the data field. By default depth is set to `4`, but you can set it via this option to lesser or greater numbers, or set it to `null` to output all levels of the data object regardless of how deep it goes.\n\nThe `alert` and `webhook` options trigger custom webhook alerting objects which CBLogger can be extended with. See the \"Extending with Alerters\" section below for more information on using these options.\n\n## Err\n\n`err` is the fourth and final argument for CBLogger's log output functions. `err` can be any object, but by convention it should represent an actual error that the log message pertains to. This argument is often used for JavaScript `Error` objects which have been thrown and caught and need to be outputted into your logs. You can also use [StandardError](https://github.com/unplgtc/StandardError) errors for this argument. Whatever you choose to pass in for `err`, it will be printed underneath the `data` object, preceded by two asterisks.\n\n```js\nCBLogger.error('some_error_key', {message: 'Uh oh there was an error'}, undefined, new Error('oh no'));\n```\n\nOutput:\n\n```\nINFO: ** some_error_key\n{ message: 'Uh oh there was an error' }\n** Error: oh no\n    at Object.<anonymous> (/Users/path/to/file/src/MyService.js:7:79)\n    at Module._compile (module.js:643:30)\n    at Object.Module._extensions..js (module.js:654:10)\n    at Module.load (module.js:556:32)\n    at tryModuleLoad (module.js:499:12)\n    at Function.Module._load (module.js:491:3)\n    at Function.Module.runMain (module.js:684:10)\n    at startup (bootstrap_node.js:187:16)\n    at bootstrap_node.js:608:3\n-> test.js L7 at 2018-10-11 04:00:27.363Z (1539230427363)\n```\n\nIf you are outputting an actual JavaScript `Error` Object — as by convention you generally should be for the `err` argument — then you can omit the `options` or `data` arguments on occasions where you have no options or data to pass. This means there's no need to add unnecessary `undefined` or `null` arguments to space out your CBLogger call such that `err` is the fourth arg. In other words, this call:\n\n```js\nCBLogger.error('some_error_key', {message: 'Uh oh there was an error'}, undefined, new Error('oh no'));\n```\n\nIs entirely equivalent to this call:\n\n```js\nCBLogger.error('some_error_key', {message: 'Uh oh there was an error'}, new Error('oh no'));\n```\n\nSimilarly, if no extra data output is needed, this call will set the `Error` to the `err` argument as well:\n\n```js\nCBLogger.error('some_error_key', new Error('oh no'));\n```\n\nAgain, this shortcut only works with actual `Error` Objects (or extensions of the `Error` Object), so if you want a string or other Object output as `err` then you will need to space the arguments with `undefined` or `null` as necessary.\n\n## Extending with Alerter\n\nCBLogger supports being extended with a single \"alerter\" Object. This can be any Object which implements a function named `alert`, but if your alerts just require sending a POST message to a webhook, Unapologetic's [CBAlerter](https://github.com/unplgtc/CBAlerter) package has been purpose-built for this use case.\n\nTo extend CBLogger with an alerter Object (exemplified here with CBAlerter, but that is not required) just pass the Object to CBLogger's `extend()` function, along with the `Alerter` enum:\n\n```js\nimport CBLogger from '@unplgtc/cblogger';\nimport CBAlerter from '@unplgtc/cbalerter';\n\n//\n// Make sure to set up your CBAlerter instance here\n//\n\nCBLogger.extend(CBLogger.EXTENSION.Alerter, CBAlerter);\n\n// Log an error and trigger an alert with CBAlerter\nCBLogger.error('some_error_key', { message: 'Uh oh there was an error and we should be alerted about it!' }, { alert: true }, new Error('Oh no'));\n```\n\nOnce extended, when CBLogger receives a call with the `alert: true` option set, it will call its alerter and pass all of the data it was given. The alerter will post that data to whatever source it has set up, then let CBLogger know whether the request was successful. If the alert succeeded then CBLogger does nothing further, but if the alert failed then CBLogger will output an error message so that you can tell your alerts aren't going through.\n\nWhen attempting to extend CBLogger, `CBLogger.extend()` will return `true` if the extension was successful, `false` otherwise. Currently all Objects which implement `alert()` functions are accepted, but in order for the alerts to work without throwing errors there are a few further requirements.\n\nA valid alerter needs to not just implement a function named `alert`, but that function must take five arguments: `level`, `key`, `data`, `options`, and `err`. The function must also return a Promise that will unwrap to the success or failure of the alert.\n\nIn the example above, CBLogger would call its extended alerter with  `alert('ERROR', key, data, options, err)`. Assuming that alerter Object is functional, it will in turn post that message to a webhook somewhere and return the success value as a Promise to CBLogger. The `level` argument will be `'DEBUG'`, `'INFO'`, `'WARN'`, or `'ERROR'`, depending on which CBLogger function was called. The remaining arguments are passed to the alerter just as they were passed to CBLogger.\n\nFinally, if for some reason you want to _change_ the alerter Object that CBLogger is extended with, you'll need to explicitly remove the existing alerter before being able to extend with a new one. This can be done with CBLogger's `unextendAlerter()` method.\n\n```js\nvar result = CBLogger.extend(CBLogger.EXTENSION.Alerter, CBAlerter);\n// true\n\nresult = CBLogger.extend(CBLogger.EXTENSION.Alerter, someAlerter);\n// StandardError.CBLogger_409 (Logger has already been extended with this extension type)\n\nresult = CBLogger.unextendAlerter();\n// true\n\nresult = CBLogger.extend(CBLogger.EXTENSION.Alerter, someAlerter);\n// true\n```\n\n## Extending with Honeybadger\n\nCBLogger integrates with [Honeybadger](https://honeybadger.io) to track error metrics. Enable the extension by passing a configured `Honeybadger` object to `CBLogger.extend()`, like so:\n\n```js\nimport Honeybadger from '@honeybadger-io/js';\n\nHoneybadger.configure(honeybadgerConfig);\n\nCBLogger.extend(CBLogger.EXTENSION.Honeybadger, Honeybadger);\n```\n\nOnce extended, calls to `CBLogger.error()` which include an `Error` object will be passed to Honeybadger. You can use your Honeybadger configuration to determine which environments actually forward errors so that your local, dev, or test environments don't use your Honeybadger rate limits. If you pass an object in the `data` parameter of your `CBLogger.error()` call then it will be passed to Honeybadger as the `context` parameter for the error, and whatever `key` parameter you send will be passed as the error's descriptive name:\n\n```js\n// Honeybadger will receive the 'Oh no' Error with the `data` object passed as context and `oh_no` passed as name\nconst data = { message: 'Some context' };\n\nCBLogger.error('oh_no', data, new Error('Oh no'));\n```\n\n## cls-rtracer Support\n\nCBLogger supports outputting request IDs if your application is using the [cls-rtracer package](https://github.com/puzpuzpuz/cls-rtracer). cls-rtracer uses the [`AsyncLocalStorage` class](https://nodejs.org/api/async_hooks.html#async_hooks_class_asynclocalstorage) from the experimental [`async_hooks` core Node module](https://nodejs.org/api/async_hooks.html) to generate unique IDs for requests coming into your application. cls-rtracer supports several different server middlewares, including [Express](https://expressjs.com). If you add support for cls-rtracer to your application, CBLogger will automatically identify this and include request IDs in your log output — no configuration required.\n","readmeFilename":"README.md","gitHead":"45ed531d1f2660de2d038a540e4c51ab415ed376","_id":"@unplgtc/cblogger@2.0.2-nextjs","_nodeVersion":"16.13.0","_npmVersion":"8.1.0","dist":{"integrity":"sha512-3AYeOFJ+Bd8KRHKLoNWw4tnKXg9jYyccPBeUBXR8aXi6FSy3mwlhipt/JuOL/7KCCMEFzNOTB374oNkkOT+rTg==","shasum":"3709d2197f6fa88c5998d3d5ccc32cdbdcef3e63","tarball":"https://registry.npmjs.org/@unplgtc/cblogger/-/cblogger-2.0.2-nextjs.tgz","fileCount":6,"unpackedSize":28027,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiEvnvACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqP4A//ZHrSKAib/iiZdh9oI/3zkp4zTwCClPBoWDIruCi05LGxOhOo\r\nyMH09V/oVzNdB0o/UT+VS3FIHM04100tum+dQzwQoxAYdJYc0fdMk4yYTQQI\r\neKciMsMVVIFuCsyI8QT2TZCrgrwH5BI+yWFrVks/AWdLNbDIhfHSW9Ssh4Dm\r\nILfOfMcAfQYsWgAIz3WFtWRUHlM9XwatGXiQkqOrn+oqI4EkXWkcel5RsOGE\r\nKAxdthVyW1UdBW6+89GSLklFq+VGuVc8ezDOzcnFZYD5NKNmEWkTVMovu/9i\r\nLrE/fqMixPBKd4NJ8gW4r0pJhZ7BiGWPSGfZ7lrUvouRwtP0bHfFdMB2FeOu\r\njRrWtAtlfm27H8Fb/mc9KS1e+NUxMO06+xP8adDxcmUlh8ttWHAf2+jADdEe\r\njB9R25HvvSoGDayE7tHJRjd/I/8kpBhe20S2BNYKayf5JXtcHOS1NPiavpW5\r\nbhZU8yv9jV8sUC8lBwEKj8QM5CY3BcF74aEtuboPmJvaMbc8+2Xp39Y989gN\r\nmR2D+edpk1lEgIiugoJq04vtHa/K3IfimgKOtA1Q+LeQB+9K2DLsCgN8AuyC\r\nFsMCksMv4Hkp06WvCPVcmCpWylSnFgPGJAl/ZxevAkL25y7vvwKx5qD6L/6J\r\ntk3zuPGQfGi5gw/r0Poei5wPj5iubazVNvs=\r\n=D2FV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICEwdinorxwBsUHcIay2A9ggASKnvnrRDUjKFvhWl5XfAiEAklqB8qlqclZOa+Tz5G/WLQsslUMUt1nCjJ+opfKccoI="}]},"_npmUser":{"name":"ajguyot","email":"alex@unapologetic.io"},"maintainers":[{"name":"ajguyot","email":"alex@unapologetic.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cblogger_2.0.2-nextjs_1645410798962_0.23125641519370022"},"_hasShrinkwrap":false},"2.0.1":{"name":"@unplgtc/cblogger","version":"2.0.1","description":"Quality logger for Node applications","type":"module","exports":"./src/CBLogger.js","engines":{"node":">=14.13.1 || >=16.0.0"},"scripts":{"test":"NODE_OPTIONS=--experimental-vm-modules npx jest"},"repository":{"type":"git","url":"git+https://github.com/unplgtc/CBLogger.git"},"author":{"name":"Alex Guyot","email":"alex@unapologetic.io","url":"https://unapologetic.io"},"license":"ISC","bugs":{"url":"https://github.com/unplgtc/CBLogger/issues"},"homepage":"https://github.com/unplgtc/CBLogger#readme","devDependencies":{"@unplgtc/cbalerter":"3.0.1","jest":"^27.3.1"},"dependencies":{"@unplgtc/standard-error":"4.0.1"},"directories":{"test":"test"},"readme":"[![CircleCI master build status](https://img.shields.io/circleci/project/github/unplgtc/CBLogger/master.svg?label=master&logo=circleci)](https://circleci.com/gh/unplgtc/CBLogger/tree/master)\n[![npm version](https://img.shields.io/npm/v/@unplgtc/cblogger.svg)](https://www.npmjs.com/package/@unplgtc/cblogger)\n\n# CBLogger\n\n### Quality logger for Node applications\n\nCBLogger puts an end to loosely-formatted log messages. As your Node projects grow larger, haphazard and unstandardized log output becomes an enormous hinderance. If you don't have a strategy for identifying the source of your log messages, matching identical messages with easy-to-find keys, and tagging them with timestamps, then tracking down bugs with those logs becomes unnecessarily difficult and time consuming.\n\nCBLogger provides a light interface which you can use in place of calls to `console.log`, `console.error`, or `console.trace`. Pass in some simple parameters and CBLogger will assemble and print your log messages in a standardized and information-rich way. Full stack traces can be added to any log message by flagging an option, but every log will always include the filename and line number of the CBLogger call, as well as both human-readable and [Unix epoch](https://en.wikipedia.org/wiki/Unix_time) timestamps.\n\nOnce you transition to CBLogger, your application's log output will be richer and more useful. Monitoring and debugging problems, and sending runtime alerts to your platform of choice will be easier than ever before.\n\n## Usage\n\nInstall CBLogger from npm:\n\n```\n$ npm i @unplgtc/cblogger\n```\n\nImport CBLogger into a service:\n\n```js\nimport CBLogger from '@unplgtc/cblogger';\n```\n\nCBLogger support four different log output calls: `CBLogger.debug`, `CBLogger.info`, `CBLogger.warn`, and `CBLogger.error`. All four use identical interfaces, so they can be used interchangeably based solely on what level of log you need to output. All arguments to CBLogger calls are optional, but you should at least include a `key` if you want your logs to mean anything.\n\nThe first argument CBLogger accepts is named `key`, and if you're following best practices then each key should be unique to each log message (or at least to a very small set of log messages). If your Node project is minuscule and that's already a stricter mandate than you're looking for, don't leave yet. CBLogger at its most basic supports a very similar interface to the familiar `console.log`. Feel free to pass in nothing but an arbitrary string of text for your `key` and CBLogger will happily output it. If you want to dump the contents of an Object, just use the `data` param — CBLogger's second argument.\n\n```js\n// MyService.js\n\nCBLogger.info('Some arbitrary text');\n```\n\nAnnotated output:\n\n```\nINFO: ** Some arbitrary text\n-> MyService.js L3 at 2018-10-08 03:50:35.417Z (1538970635417)\n   ^            ^     ^                         ^\n   Filename   Line #  Human-readable timestamp  Epoch timestamp\n```\n\nLog arbitrary text and an Object:\n\n```js\nvar someObject = {\n\tfoo: 'bar'\n}\nCBlogger.debug('Description of this object', someObject);\n```\n\nOutput:\n\n```\nDEBUG: ** Description of this object\n{ foo: 'bar' }\n-> MyService.js L4 at 2018-10-08 03:50:35.417Z (1538970635417)\n```\n\nUsing CBLogger with unique keys works the exact same way, and has the added bonus of improving log aggregation techniques if you ever need to implement them. Keys are more easily identifiable in manual log searches as well. Here's an example with a `warn` message:\n\n```js\nCBLogger.warn('unique_key_for_this_warning', someObject);\n```\n\nOutput:\n\n```\nWARN: ** unique_key_for_this_warning\n{ foo: 'bar' }\n-> MyService.js L5 at 2018-10-08 03:50:35.417Z (1538970635417)\n```\n\nThe second argument to any CBLogger log call, `data`, accepts any JavaScript Object. You can pass in your own Objects you want to output if you need no context around them other than your key, but it's also a good place to type out more descriptive messages in non-key form for your logs:\n\n```js\nCBLogger.info('some_info_key', {message: 'This is what happened', theObject: someObject});\n```\n\nOutput:\n\n```\nINFO: ** some_info_key\n{ message: 'This is what happened', theObject: { foo: 'bar' } }\n-> MyService.js L4 at 2018-10-08 03:50:35.417Z (1538970635417)\n```\n\nIf the Object in your `data` field grows long enough, it will be split out onto separate lines:\n\n```js\nCBLogger.info('some_info_key', {message: 'This is what happened', theObject: someObject, bar: 'baz'});\n```\n\nOutput:\n\n```\nINFO: ** some_info_key\n{ message: 'This is what happened',\n  theObject: { foo: 'bar' },\n  bar: 'baz' }\n-> MyService.js L4 at 2018-10-08 03:50:35.417Z (1538970635417)\n```\n\n## Options\n\nThe third CBLogger argument is `options`, and unsurprisingly it takes an Object with which you can flag various options. Currently CBLogger supports five options: `stack`, `ts`, `depth`, `alert`, and `webhook`.\n\nSetting `stack` to `true` in the `options` parameter of any call to CBLogger will result in a full stacktrace being appended to your log's output:\n\n```js\nCBLogger.info('some_info_key', {message: 'This is what happened'}, {stack: true});\n```\n\nOutput:\n\n```\nINFO: ** some_info_key\n{ message: 'This is what happened' }\n-> MyService.js L4 at 2018-10-08 03:50:35.417Z (1538970635417)\n   at Object.<anonymous> (/Users/path/to/file/src/MyService.js:4:10)\n    at Module._compile (module.js:643:30)\n    at Object.Module._extensions..js (module.js:654:10)\n    at Module.load (module.js:556:32)\n    at tryModuleLoad (module.js:499:12)\n    at Function.Module._load (module.js:491:3)\n    at Function.Module.runMain (module.js:684:10)\n```\n\nThe `ts` options is always true by default, but you can explicitly set it to `false` if you want to remove the timestamps from your log output. This may be useful if your log data already includes a timestamp, of if you're using a process manager like PM2 and want to use its log timestamps instead of CBLogger's.\n\n```js\nCBLogger.info('some_info_key', {message: 'This is what happened'}, {ts: false});\n```\n\nOutput:\n\n```\nINFO: ** some_info_key\n{ message: 'This is what happened' }\n-> MyService.js L4\n```\n\nThe `depth` option allows you to output nested objects in the data field. By default depth is set to `4`, but you can set it via this option to lesser or greater numbers, or set it to `null` to output all levels of the data object regardless of how deep it goes.\n\nThe `alert` and `webhook` options trigger custom webhook alerting objects which CBLogger can be extended with. See the \"Extending with Alerters\" section below for more information on using these options.\n\n## Err\n\n`err` is the fourth and final argument for CBLogger's log output functions. `err` can be any object, but by convention it should represent an actual error that the log message pertains to. This argument is often used for JavaScript `Error` objects which have been thrown and caught and need to be outputted into your logs. You can also use [StandardError](https://github.com/unplgtc/StandardError) errors for this argument. Whatever you choose to pass in for `err`, it will be printed underneath the `data` object, preceded by two asterisks.\n\n```js\nCBLogger.error('some_error_key', {message: 'Uh oh there was an error'}, undefined, new Error('oh no'));\n```\n\nOutput:\n\n```\nINFO: ** some_error_key\n{ message: 'Uh oh there was an error' }\n** Error: oh no\n    at Object.<anonymous> (/Users/path/to/file/src/MyService.js:7:79)\n    at Module._compile (module.js:643:30)\n    at Object.Module._extensions..js (module.js:654:10)\n    at Module.load (module.js:556:32)\n    at tryModuleLoad (module.js:499:12)\n    at Function.Module._load (module.js:491:3)\n    at Function.Module.runMain (module.js:684:10)\n    at startup (bootstrap_node.js:187:16)\n    at bootstrap_node.js:608:3\n-> test.js L7 at 2018-10-11 04:00:27.363Z (1539230427363)\n```\n\nIf you are outputting an actual JavaScript `Error` Object — as by convention you generally should be for the `err` argument — then you can omit the `options` or `data` arguments on occasions where you have no options or data to pass. This means there's no need to add unnecessary `undefined` or `null` arguments to space out your CBLogger call such that `err` is the fourth arg. In other words, this call:\n\n```js\nCBLogger.error('some_error_key', {message: 'Uh oh there was an error'}, undefined, new Error('oh no'));\n```\n\nIs entirely equivalent to this call:\n\n```js\nCBLogger.error('some_error_key', {message: 'Uh oh there was an error'}, new Error('oh no'));\n```\n\nSimilarly, if no extra data output is needed, this call will set the `Error` to the `err` argument as well:\n\n```js\nCBLogger.error('some_error_key', new Error('oh no'));\n```\n\nAgain, this shortcut only works with actual `Error` Objects (or extensions of the `Error` Object), so if you want a string or other Object output as `err` then you will need to space the arguments with `undefined` or `null` as necessary.\n\n## Extending with Alerter\n\nCBLogger supports being extended with a single \"alerter\" Object. This can be any Object which implements a function named `alert`, but if your alerts just require sending a POST message to a webhook, Unapologetic's [CBAlerter](https://github.com/unplgtc/CBAlerter) package has been purpose-built for this use case.\n\nTo extend CBLogger with an alerter Object (exemplified here with CBAlerter, but that is not required) just pass the Object to CBLogger's `extend()` function, along with the `Alerter` enum:\n\n```js\nimport CBLogger from '@unplgtc/cblogger';\nimport CBAlerter from '@unplgtc/cbalerter';\n\n//\n// Make sure to set up your CBAlerter instance here\n//\n\nCBLogger.extend(CBLogger.EXTENSION.Alerter, CBAlerter);\n\n// Log an error and trigger an alert with CBAlerter\nCBLogger.error('some_error_key', { message: 'Uh oh there was an error and we should be alerted about it!' }, { alert: true }, new Error('Oh no'));\n```\n\nOnce extended, when CBLogger receives a call with the `alert: true` option set, it will call its alerter and pass all of the data it was given. The alerter will post that data to whatever source it has set up, then let CBLogger know whether the request was successful. If the alert succeeded then CBLogger does nothing further, but if the alert failed then CBLogger will output an error message so that you can tell your alerts aren't going through.\n\nWhen attempting to extend CBLogger, `CBLogger.extend()` will return `true` if the extension was successful, `false` otherwise. Currently all Objects which implement `alert()` functions are accepted, but in order for the alerts to work without throwing errors there are a few further requirements.\n\nA valid alerter needs to not just implement a function named `alert`, but that function must take five arguments: `level`, `key`, `data`, `options`, and `err`. The function must also return a Promise that will unwrap to the success or failure of the alert.\n\nIn the example above, CBLogger would call its extended alerter with  `alert('ERROR', key, data, options, err)`. Assuming that alerter Object is functional, it will in turn post that message to a webhook somewhere and return the success value as a Promise to CBLogger. The `level` argument will be `'DEBUG'`, `'INFO'`, `'WARN'`, or `'ERROR'`, depending on which CBLogger function was called. The remaining arguments are passed to the alerter just as they were passed to CBLogger.\n\nFinally, if for some reason you want to _change_ the alerter Object that CBLogger is extended with, you'll need to explicitly remove the existing alerter before being able to extend with a new one. This can be done with CBLogger's `unextendAlerter()` method.\n\n```js\nvar result = CBLogger.extend(CBLogger.EXTENSION.Alerter, CBAlerter);\n// true\n\nresult = CBLogger.extend(CBLogger.EXTENSION.Alerter, someAlerter);\n// StandardError.CBLogger_409 (Logger has already been extended with this extension type)\n\nresult = CBLogger.unextendAlerter();\n// true\n\nresult = CBLogger.extend(CBLogger.EXTENSION.Alerter, someAlerter);\n// true\n```\n\n## Extending with Honeybadger\n\nCBLogger integrates with [Honeybadger](https://honeybadger.io) to track error metrics. Enable the extension by passing a configured `Honeybadger` object to `CBLogger.extend()`, like so:\n\n```js\nimport Honeybadger from '@honeybadger-io/js';\n\nHoneybadger.configure(honeybadgerConfig);\n\nCBLogger.extend(CBLogger.EXTENSION.Honeybadger, Honeybadger);\n```\n\nOnce extended, calls to `CBLogger.error()` which include an `Error` object will be passed to Honeybadger. You can use your Honeybadger configuration to determine which environments actually forward errors so that your local, dev, or test environments don't use your Honeybadger rate limits. If you pass an object in the `data` parameter of your `CBLogger.error()` call then it will be passed to Honeybadger as the `context` parameter for the error, and whatever `key` parameter you send will be passed as the error's descriptive name:\n\n```js\n// Honeybadger will receive the 'Oh no' Error with the `data` object passed as context and `oh_no` passed as name\nconst data = { message: 'Some context' };\n\nCBLogger.error('oh_no', data, new Error('Oh no'));\n```\n\n## cls-rtracer Support\n\nCBLogger supports outputting request IDs if your application is using the [cls-rtracer package](https://github.com/puzpuzpuz/cls-rtracer). cls-rtracer uses the [`AsyncLocalStorage` class](https://nodejs.org/api/async_hooks.html#async_hooks_class_asynclocalstorage) from the experimental [`async_hooks` core Node module](https://nodejs.org/api/async_hooks.html) to generate unique IDs for requests coming into your application. cls-rtracer supports several different server middlewares, including [Express](https://expressjs.com). If you add support for cls-rtracer to your application, CBLogger will automatically identify this and include request IDs in your log output — no configuration required.\n","readmeFilename":"README.md","gitHead":"0a30016147bba33c6835f9173918a85d1601f4d3","_id":"@unplgtc/cblogger@2.0.1","_nodeVersion":"16.13.0","_npmVersion":"8.1.0","dist":{"integrity":"sha512-OYXuY7ByC3+5W/suIOYM0HtrqN5WCvA2FY0C1H32DfALm5O0Lpv6bwtff5ReETsAk3yCB12+FCikLUwfGjPRuw==","shasum":"be851a1bbd27d006bf849dfdf5dfffc019d59f5e","tarball":"https://registry.npmjs.org/@unplgtc/cblogger/-/cblogger-2.0.1.tgz","fileCount":6,"unpackedSize":28488,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF+N41zvbLhlPJ38D5RyL9p155Kcfni/6GQuPirdEwA7AiBnLfirD1ssqfjWImEFo9oVcuUu+GmqyvjzRk5NvUiOiw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJitgcTACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrfuxAAmbW1alXQKqCtLARgS9LBt80BwbA7k0uQ98mUKXoRGHxS5QCf\r\nqydT6CtoK3wpef6wkg2JclF6ja0kgUcdQPt8Y9Ox83YYYw0lWaeCocpS/Yd/\r\ngQAWGcKY+LTwHov8+GCtLY1cZrgByfFB10B5Hy80/UT7Gvg5yKamsrylLvlT\r\nuWjLOl/Kvf9dBd3OD38J2l8X7isYHv2arKnRxtFIRTHxot2ZGQ/lQXcVWL9L\r\nYRsIC91w5o+gqmJOIqsklgHLR0IlVbP2GPbC65CfwYOAgPuiF1rf/25oevZV\r\nwXrM0u9P4kWNxRaQhvcx9ZHgw4voi+8mM0qM8c0CwaPqvq5+h3q3Jt4jG7fC\r\n9ktSlQO8sGHkdHbQ/1ncAN5r6f4Wy7LPAnU4OSjSGr+qb8xxd2HFHOf2SMSG\r\n7nf27X+Bx7lcJeY6diQnHNCyi+a/ZRsGBTJ6Mlei7YSL8omdu7Cc+r2KieKa\r\nn52r45G1Mv6HOzMGEq/eSRWu8PKUHPU9Etw8514k/KxoVPPzkKM2sgTwm9wH\r\n7OmaZUkmuWOmswsUUhDZ+mFmJuFUmwH3FmuiXpPVkSkWLQSjWhccUtrXUcLv\r\nnVt9Cz5Xv+tH3CDq6o8MvmTtVgAvHkgqOevewCeDy6UK6CEpY3zp6wia0Nzg\r\ntOWJTVaB8HMCIR96A5Ib95RzwOXydnnNqlE=\r\n=X2jV\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ajguyot","email":"alex@unapologetic.io"},"maintainers":[{"name":"ajguyot","email":"alex@unapologetic.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cblogger_2.0.1_1656096531059_0.5438485924830416"},"_hasShrinkwrap":false}},"time":{"created":"2018-09-29T22:23:40.937Z","0.0.0":"2018-09-29T22:23:41.243Z","modified":"2022-06-24T18:48:55.032Z","0.0.1":"2018-09-30T17:03:01.975Z","0.0.2":"2018-10-07T00:53:28.358Z","0.1.0":"2018-10-07T01:03:30.153Z","0.1.1":"2018-10-08T01:15:47.481Z","0.1.2":"2018-10-08T01:46:52.645Z","0.1.3":"2018-10-11T05:56:44.727Z","1.0.0":"2018-10-14T20:34:01.973Z","1.0.1":"2018-11-22T00:55:30.191Z","1.0.2":"2018-11-22T01:02:11.896Z","1.0.3":"2020-08-16T21:48:38.342Z","1.0.4":"2020-08-17T21:25:38.807Z","1.1.0":"2021-03-22T21:27:44.356Z","2.0.0":"2021-12-08T00:00:41.192Z","2.0.0-nextjs":"2022-02-18T01:47:04.853Z","2.0.1-nextjs":"2022-02-19T18:33:58.315Z","2.0.2-nextjs":"2022-02-21T02:33:19.132Z","2.0.1":"2022-06-24T18:48:51.238Z"},"maintainers":[{"name":"ajguyot","email":"alex@unapologetic.io"}],"description":"Quality logger for Node applications","homepage":"https://github.com/unplgtc/CBLogger#readme","repository":{"type":"git","url":"git+https://github.com/unplgtc/CBLogger.git"},"author":{"name":"Alex Guyot","email":"alex@unapologetic.io","url":"https://unapologetic.io"},"bugs":{"url":"https://github.com/unplgtc/CBLogger/issues"},"license":"ISC","readme":"","readmeFilename":""}