{"_id":"senselogs","_rev":"17-3af1dfb034f3a7732b4623e79608e7c7","name":"senselogs","description":"Simple, dynamic, blazing fast serverless logging","dist-tags":{"latest":"1.0.7"},"versions":{"0.8.0":{"name":"senselogs","version":"0.8.0","keywords":["lambda","serverless","typescript","aws","amazon","logging"],"author":{"name":"Michael O'Brien","email":"mob@sensedeep.com"},"license":"MIT","_id":"senselogs@0.8.0","maintainers":[{"name":"sensedeep","email":"mob@sensedeep.com"}],"homepage":"https://github.com/sensedeep/senselogs","bugs":{"url":"http://github.com/sensedeep/senselogs/issues"},"dist":{"shasum":"706682663e67ebbff84bbe244c8f60d217faba70","tarball":"https://registry.npmjs.org/senselogs/-/senselogs-0.8.0.tgz","fileCount":9,"integrity":"sha512-Cuoqr4y6ZSO+HywatAvUHP8nwDSlJqOvqU213aXELKyJM6AmZkordVzLe0UlZNBGif6ZI9rEP6Jg16oZZpx9NA==","signatures":[{"sig":"MEQCIBXgv2jrteMwbywcyO4gM5xK2iHmFKxGxgy5U1Ntrj7bAiA0KAhaEbyc0JFbf5JlE+sKloKHuhctyv8bpud9LErKNA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54747,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg8Tz3CRA9TVsSAnZWagAAcKoP/0y8UdwBgz98kg5OrFum\nBNPhwNwQPd7o5LN7ER/zBpCBlvWHfzorYn5o8zPatKTt0RUkV9kmxh2QAdF3\n/+N1YI5MTpTnx8cvFyQx51XbqZaJUnWDgg9z+HFRJ9OAMK++mWhzHbqyDRV9\ndnKZHcjaYBGp+XOquGSrJBWB4CB7CXf+ZWgur6QWiK1MmBN6pHamvInPZCQ+\n66nvLpRat9FSuhYBg4AtKpFO+TwM2tlVpYnwLlVS5vJOiUAO33VKVqwq5BFz\nw2XHOW6N/JBF3zmaTCxm3qK+9fUWlGHWyL2wQfNjnPkbg2miKXUlawY353EM\nNUHS5Acd9Iwe2fnvmnnVbx4Ct8tBdFAa5/2+WAuajfhhd7Dg+S669/dXAaNR\n2YQEDgV+PfSyUxxmJeT8MamvjqsDuc705hp/24H/mkVYpFsigg3hH/RriqeT\nSN5DBp1KqL1IjSSr7uMviP5xPUdDtBVEwCia6Foe/XLwy2iGLiICoX51w64L\nKNRxyKNmhrN82ISjuW75icNbGaWK/n04QMC/Z0A7/tGdFMd7sBqdTWdrA5p+\ni3IQk2bLFJvz366kX83v81kKFalnpRXWRoArRx88r+gFekjdipecWJgZFXcA\n/q+1KwAeS/k6aVnQ9yKSLu0Elw8XympUWzUFmjzPKZq345nsM9ttSMvmEmjY\nUjJi\r\n=EDfH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/cjs/index.js","types":"dist/mjs/index.d.ts","module":"dist/mjs/index.js","exports":{".":{"import":"./dist/mjs/index.js","require":"./dist/cjs/index.js"}},"gitHead":"59317629bbffd1c7bebec5f952ab14bf6f093e25","scripts":{"test":"jest","_lint":"eslint .","build":"rm -fr dist/* && tsc -p tsconfig.json && tsc -p tsconfig-cjs.json && ./fixup","prepare":"npm run build","test-cov":"jest --coverage","_prepublishOnly":"npm test && npm run lint"},"_npmUser":{"name":"sensedeep","email":"mob@sensedeep.com"},"repository":{"url":"git+https://github.com/sensedeep/senselogs.git","type":"git"},"_npmVersion":"6.14.13","description":"Dynamic serverless logging","directories":{},"_nodeVersion":"14.17.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","eslint":"^7.25.0","ts-jest":"^26.4.4","typescript":"^4.1.3","@types/jest":"^26.0.19","@types/node":"^14.14.16"},"_npmOperationalInternal":{"tmp":"tmp/senselogs_0.8.0_1626422519031_0.14091396195506167","host":"s3://npm-registry-packages"}},"0.8.1":{"name":"senselogs","version":"0.8.1","keywords":["lambda","serverless","typescript","aws","amazon","logging"],"author":{"name":"Michael O'Brien","email":"mob@sensedeep.com"},"license":"MIT","_id":"senselogs@0.8.1","maintainers":[{"name":"sensedeep","email":"mob@sensedeep.com"}],"homepage":"https://github.com/sensedeep/senselogs","bugs":{"url":"http://github.com/sensedeep/senselogs/issues"},"dist":{"shasum":"e047b2b58a6626844b6b7396631f2ea70bf046c6","tarball":"https://registry.npmjs.org/senselogs/-/senselogs-0.8.1.tgz","fileCount":9,"integrity":"sha512-uj1716fh3ZQFhg4KZegztV/zu1wit63BQLjL/vfChBFeGjd+TyiXEC2RrYwd6Pvg0+13fUq0gLOwk0lVXI3zKA==","signatures":[{"sig":"MEUCIECQ8DLou8eGmVHn9jyo7aJeFbY13KOyAz/kyjAUshrpAiEApUCtURp9sVTIIKJHzfZQ1AAlr++4MpI/EOwr1ou8ZGY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58982,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg8qHLCRA9TVsSAnZWagAACSkP/jhGLqaFTz5o/tmOSOKC\ntrNeFFVHXEkqCqUitZN4mnkghQydtLBEzJXFcl2k92Ng6dMhwfDH6dqvCMUu\nZWIjgPY4N8Q3RzYAzYZg4mqJSBrNEjZiIoXEaaXP1CiLQ6T8K6UKOvV5KE3i\nzTGkCbxGUKkbsaCr+cP8E0+cnfH0fQ/g8MbEVQ8FyhS/32detuELXpMXEyEy\nDacK/IQrjrDoWIs6nQwU5C/cyPNpSCjpbpPs8CcUvlBUxXPKEO4Y63ab8LcI\nhgcyjVKnNgEN588JVas8tjzi0USXR4U6ltw4kgWc7hZBFUfmEaPO7F6tJyfh\nlwBwt5LBZrGAIvCXFOVCsXLuNZ5oADzQN3Q+2QvoMq/y/lyo+damlYkK9CKq\nl0/xRoLJGLVquEVm0GtIgwic/OszyBgou4iI3Lem0NmczIJGTL2UOaLKK29O\n4Izl4ntmf0lXNowKE/JPE5qX2lPBpr0WHT8nWMVW7zm82X5W2QKWgWBXBJSe\nMP2H5xf+Pl1+MIesh5qPFiuZlVDK1FETEza1rlNl32LgAh1pIwb4U/2g+kHV\nsunKnqp9Ii2j5pHEEtYkQUajMB/RoL/+OTxSptjDjshY4gXFEI4HgKwIpiFp\nZGjYQaEhhEL0QtS/BCxP22QvgOcUAdw8Yn48F9/ad0LI2M38UXcKiw9L6QVY\nAkNW\r\n=mo/9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/cjs/index.js","types":"dist/mjs/index.d.ts","module":"dist/mjs/index.js","exports":{".":{"import":"./dist/mjs/index.js","require":"./dist/cjs/index.js"}},"gitHead":"dd42840b491e71945d05111d76f30549d89a3e04","scripts":{"test":"jest","_lint":"eslint .","build":"rm -fr dist/* && tsc -p tsconfig.json && tsc -p tsconfig-cjs.json && ./fixup","prepare":"npm run build","test-cov":"jest --coverage","_prepublishOnly":"npm test && npm run lint"},"_npmUser":{"name":"sensedeep","email":"mob@sensedeep.com"},"repository":{"url":"git+https://github.com/sensedeep/senselogs.git","type":"git"},"_npmVersion":"6.14.13","description":"Dynamic serverless logging","directories":{},"_nodeVersion":"14.17.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","eslint":"^7.25.0","ts-jest":"^26.4.4","typescript":"^4.1.3","@types/jest":"^26.0.19","@types/node":"^14.14.16"},"_npmOperationalInternal":{"tmp":"tmp/senselogs_0.8.1_1626513866935_0.5414030939963788","host":"s3://npm-registry-packages"}},"0.8.2":{"name":"senselogs","version":"0.8.2","keywords":["lambda","serverless","typescript","aws","amazon","logging"],"author":{"name":"Michael O'Brien","email":"mob@sensedeep.com"},"license":"MIT","_id":"senselogs@0.8.2","maintainers":[{"name":"sensedeep","email":"mob@sensedeep.com"}],"homepage":"https://github.com/sensedeep/senselogs","bugs":{"url":"http://github.com/sensedeep/senselogs/issues"},"dist":{"shasum":"f84dac654751e6fe7cee208659ecbfdfa5934ee7","tarball":"https://registry.npmjs.org/senselogs/-/senselogs-0.8.2.tgz","fileCount":9,"integrity":"sha512-rPIaTDcuAwKCs2ikkIapHTW2aWCd4rkV7hdO2Bk2Ua3nd9UJlnZKmJSFwTA0RnUtGVAL3Bn4SMzI2VR8x8K6Pw==","signatures":[{"sig":"MEUCIQCyvEp1VK2ksPKHuQ7Sn6+ErdJ8izSfxb7hIdVJwO8f8wIgeKV7AIcmOKxwnhVHISOaoIgKsZMNGiv8qLK4BXS9LbU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65731,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg9jhOCRA9TVsSAnZWagAAQesP/R6hCoHyNNwbubPnuj/4\njiin40gYInIwkNxeJ6ndD7CsVeUvmfRdZ3KxLJsF0Ac7/9CFHLHT2H/PzE3v\nJKbR4TIO0X4qYue2GNmrX4yTqHRmgvBVhM1VpuKRvWU+bKjKsXchpUi620Z1\nbYlS0TOqP2LxY5+0qgQLmwUeHoX/jKE/ED7RFeQgstFdG1QF0cGSQgiVmVAx\n2Pby+MCKlaWZttG0fLl7qJqj0r3krt8MmFAqiyw684T43bjM2QpBtCIRxsPH\npPwH0K5uAn/5tnIbaPNwdYR9zSgfgDi+jruRg0SwAUnicY5iJvn0SxygPAOf\nwZ6q6PBXzn/qDWJSOhdC7ayg9Z3uzvlIv7rpgVfFi62UBbNmQLpB66StDPSR\nITGM1THEd3pKDLnthNMwwwqgIs/wRjpZuhw+0ryd8Aw7HKmJxd44U+nlLZ89\nMl0gCv7njt2EnXCrriDWI0D6287ml9wAej8dGbHacOk4qTpMIkIZW4z2IWSR\n7SYwrYHFMV37Y9Nf3f057uzq3440UulucELrOnromVpLaeYXNHq1I/fl3HeV\nSKrDzznuvEITWYRz40MiMOd6fPrJWT3tRlOMd71Q633gHJx7BQtANpOxkK4z\n6Hd2+E5Y61ksF2JaPwAOlqAdld1JR+VymOjr7ImTo9kfAFHaZe/yCQL/zacz\nTs5D\r\n=IFqL\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/cjs/index.js","types":"dist/mjs/index.d.ts","module":"dist/mjs/index.js","exports":{".":{"import":"./dist/mjs/index.js","require":"./dist/cjs/index.js"}},"gitHead":"d85955cb7299d9d3641779c4bce53268feb9ae29","scripts":{"test":"jest","_lint":"eslint .","build":"rm -fr dist/* && tsc -p tsconfig.json && tsc -p tsconfig-cjs.json && ./fixup","prepare":"npm run build","test-cov":"jest --coverage","_prepublishOnly":"npm test && npm run lint"},"_npmUser":{"name":"sensedeep","email":"mob@sensedeep.com"},"repository":{"url":"git+https://github.com/sensedeep/senselogs.git","type":"git"},"_npmVersion":"6.14.13","description":"Dynamic serverless logging","directories":{},"_nodeVersion":"14.17.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","eslint":"^7.25.0","ts-jest":"^26.4.4","typescript":"^4.1.3","@types/jest":"^26.0.19","@types/node":"^14.14.16"},"_npmOperationalInternal":{"tmp":"tmp/senselogs_0.8.2_1626749006472_0.04472056407802838","host":"s3://npm-registry-packages"}},"0.8.3":{"name":"senselogs","version":"0.8.3","keywords":["lambda","serverless","typescript","aws","amazon","logging"],"author":{"name":"Michael O'Brien","email":"mob@sensedeep.com"},"license":"MIT","_id":"senselogs@0.8.3","maintainers":[{"name":"sensedeep","email":"mob@sensedeep.com"}],"homepage":"https://github.com/sensedeep/senselogs","bugs":{"url":"http://github.com/sensedeep/senselogs/issues"},"dist":{"shasum":"010b81d71f30e2513491ed5308a881a7a9ec5a00","tarball":"https://registry.npmjs.org/senselogs/-/senselogs-0.8.3.tgz","fileCount":9,"integrity":"sha512-a4RfG3XzXdLc/ZkCS47IZLHH7+O/WgV6h+KGIgGbthnBpieYTI1j+WuQaro3JbkiVH3+UP80dPGNp0/yReUimw==","signatures":[{"sig":"MEUCICku3r56ZEGHv3Db72fV0v29uLSlodMc760IDe6/AieYAiEAkEyrCO7dtPbZzSFAmHP63VCyZHuWViBRciDaGhPFakA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66149,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg+PiSCRA9TVsSAnZWagAAg0sP/0WF3u+cg9iyxx1n1kB/\n6a+PL28gyXn++hV0y43KczD6evdT70Wnree04eN3n8GSW3RAx1gYaou/g38E\nDQS16BiZ7UATzs6olFo2WDh6MnWcILJapPj3OoylUS0WEFPe78a89BNvyWRo\nMgIXcSu81RrvdryfYLTgH+8tflo3LCoIYbt2CgWdTmhnxAGhRy1abI8tELAe\nOnU/4mZFMeyWhyyolnlD/T3BBf/fEPP08fps9jTwwKfltd+rkK1dVk2665Tg\nKJOtYnS7OtDBu985663dm4cL0cHNVfUyHqTxCqSrJWCH6B1ik/enypSbSsR9\nf7+b+nolezqQ080/Zl3wW74zUhp6GX2Vlt04MJmsX4Dryu9yMrFobZBJWXqn\nFMRiDdO0pQGhaUYl4YZ1B0fgnuXVghbXQQD7MgALAAIQbcHDG5ZlVUNXH5az\nk6//sGzCXDQX+D9E98qpIhatCIZ4i2RhyjC+RDBN6V6/wL9lwJ2AqiQsANKt\nnjdGdChQSADGVRJtJO/+47Fo3nNOEEMLauD81k58LnZu95qd78z52dSkgxgv\n1+bF/0zMU9TFHXTTcKlKWojM/0jQLXZueToqzF2vGfIqG5+n8xsFARcVK6k2\nrWwFumFvn+cFHBHo5TLe6ATA8nkRyraiIAehCEAziVjHhAk6CC3F0YgWbBgr\n4JFB\r\n=avBM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/cjs/index.js","types":"dist/mjs/index.d.ts","module":"dist/mjs/index.js","exports":{".":{"import":"./dist/mjs/index.js","require":"./dist/cjs/index.js"}},"gitHead":"c8eda3d0742bdc0a2acfc52e688475d80cb42dae","scripts":{"test":"jest","_lint":"eslint .","build":"rm -fr dist/* && tsc -p tsconfig.json && tsc -p tsconfig-cjs.json && ./fixup","prepare":"npm run build","test-cov":"jest --coverage","_prepublishOnly":"npm test && npm run lint"},"_npmUser":{"name":"sensedeep","email":"mob@sensedeep.com"},"repository":{"url":"git+https://github.com/sensedeep/senselogs.git","type":"git"},"_npmVersion":"6.14.13","description":"Dynamic serverless logging","directories":{},"_nodeVersion":"14.17.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","eslint":"^7.25.0","ts-jest":"^26.4.4","typescript":"^4.1.3","@types/jest":"^26.0.19","@types/node":"^14.14.16"},"_npmOperationalInternal":{"tmp":"tmp/senselogs_0.8.3_1626929297992_0.8424620861366936","host":"s3://npm-registry-packages"}},"0.8.4":{"name":"senselogs","version":"0.8.4","keywords":["serverless","log","logs","logging","library","lambda","typescript","aws","amazon"],"author":{"name":"Michael O'Brien","email":"mob@sensedeep.com"},"license":"MIT","_id":"senselogs@0.8.4","maintainers":[{"name":"sensedeep","email":"mob@sensedeep.com"}],"homepage":"https://github.com/sensedeep/senselogs","bugs":{"url":"http://github.com/sensedeep/senselogs/issues"},"dist":{"shasum":"c27c8fb653d6129f9a3aa7bc9af737beceb77ec7","tarball":"https://registry.npmjs.org/senselogs/-/senselogs-0.8.4.tgz","fileCount":9,"integrity":"sha512-zH2ZyBHA9ftjI1kxGnSA4twp2/ka0cXYS1TgUwVT808yxiV5k/vFY12nP2/mJ8VJCQWX6Sn71GUsXcOwOQQoEA==","signatures":[{"sig":"MEUCIFSMf3RmU/zxSeglwS/QYtyH/3O4/8I1YYRz3UDaTlg1AiEA5GybLHZuTwVVSjn8V3DXwRUNjDaX1vdhSH/1jEjsDz8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66271,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg/3ZfCRA9TVsSAnZWagAAA+oP/AzvHfcz3VtVOYX+F2cr\noWJ7fpAK5xqwsLQ0HqOGSd/fG4oDNodn6lhs4TwcCKmoYdyAe62qV0EtaRj7\nEqeQSzNlGcDyAL19/sEc8YCIpCs17haSTb3Dy25LnT3tXHAk1vnctvoTrOLi\nkaTv0lsptw95Xq09RFRKnQ1gMvoVTZkRI3gBebVqukeKCpCGx2rilSieu1us\n620DUHw32FF52TJrxcT912EAAqyi68iUlBT3ZCa/x6Pjt5nf478wGdzcMzPb\nAWYSr4mgEL+6XMjbYatvvPJctM/gUM7hAVeJOfWYiJhRsZD3k31Ov2MH+bnx\nt1MEOh3ot2eIMVt5gs8nhq/5VAhXqcP4+sEPpaXt2uhehLQgapsD03Yetxig\n2qMZODjalrP0TbTNJiktEyOR2vXEJ+nXwYjSx1X7m68qCXUu9NqqiAR1wnYl\n7fWtOz3MlZ0dK0nzKdeocqFX+nCfD1OtZAbBQywFTqobqXAMUGX3N48lPfcv\n4/MAkDRBCIJHlitL4uDC9aH0/wHF6C+3+FlwXilBzIZWQzuAgrLfBC4D4Jau\nSNNEbc60sqKOn8WmMnbvYEmS/OpqC8aKZcmEVgyIGyRlooMMyTgtbFndV+NR\nTq5yqOI4qLHfEPgm31RDJIJHSrftV4nEYFOJ+TUCyaYFlsE4oaAjpEtsukPL\nwPX7\r\n=dvC6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/cjs/index.js","types":"dist/mjs/index.d.ts","module":"dist/mjs/index.js","exports":{".":{"import":"./dist/mjs/index.js","require":"./dist/cjs/index.js"}},"gitHead":"0b28fd58ed60aa935f13beead90e4ef9981a7997","scripts":{"test":"jest","_lint":"eslint .","build":"rm -fr dist/* && tsc -p tsconfig.json && tsc -p tsconfig-cjs.json && ./fixup","prepare":"npm run build","test-cov":"jest --coverage","_prepublishOnly":"npm test && npm run lint"},"_npmUser":{"name":"sensedeep","email":"mob@sensedeep.com"},"repository":{"url":"git+https://github.com/sensedeep/senselogs.git","type":"git"},"_npmVersion":"7.20.1","description":"Dynamic serverless logging","directories":{},"_nodeVersion":"14.17.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","eslint":"^7.25.0","ts-jest":"^26.4.4","typescript":"^4.1.3","@types/jest":"^26.0.19","@types/node":"^14.14.16"},"_npmOperationalInternal":{"tmp":"tmp/senselogs_0.8.4_1627354719514_0.2304468420427368","host":"s3://npm-registry-packages"}},"0.9.0":{"name":"senselogs","version":"0.9.0","keywords":["serverless","log","logs","logging","library","lambda","typescript","aws","amazon"],"author":{"name":"Michael O'Brien","email":"mob@sensedeep.com"},"license":"MIT","_id":"senselogs@0.9.0","maintainers":[{"name":"sensedeep","email":"mob@sensedeep.com"}],"homepage":"https://github.com/sensedeep/senselogs","bugs":{"url":"http://github.com/sensedeep/senselogs/issues"},"dist":{"shasum":"2d7299f4c45f295c5c521235535a82696a53ec78","tarball":"https://registry.npmjs.org/senselogs/-/senselogs-0.9.0.tgz","fileCount":9,"integrity":"sha512-Kege3u3hf3czHYYfY4EP+cTUu2eigCA4EF8tdBEHt47mURuZt+jU9iVHDD77qZB9+skt1w7Gd0W7XcLZH2od1w==","signatures":[{"sig":"MEQCIGd++P2MSzoVTqpWCEwNFBRzX3NuX0tFRf4mFTs7LXYVAiAsjLvWaN81ou68SjzfOvRwre+SxAeYlMdizAAlNeHVpw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60143,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhAlfmCRA9TVsSAnZWagAAtEMP+wbjjU4GI/C8lFtxjGG8\n7QNiqtOj7C/ZEu42UlVXZ3QHJlKCminen52z7/jU/vAdUIk9RiQd7XlfK5qa\ncU3metuNJJqHi+3rKuEyCpYDPIHEh4uKgGjhM1YICT0Z+3k22mZHAHjAzRla\neJg2FEHxvxRsNUF2OXHn/raQJ7/br7KOz3eePPzgIUUY+WJtP4D3y2WRGyLE\nKZlKjou+20bhvr5d6kjqvdY4Iq1uFSok48kC9kv9kunoB1eR4h79nqEz8iTQ\nilrBbvi6dblpt1zS7oWoXAXCOgIZaoo8t4FRneaES2y/BA9tWkakzNlvuNLj\ngJ1VztvHcDS9PatRqUL9D1xpkDYxOVraNvTmufsg0j9dzqhx4mgT0iDpaEj2\nTPPMECZ3TjDiXLtQJ3eCIdelhc0UDVRWgEDrQUogqe5KcSy+RWlIn8Td5WFD\nJ6usBq2D79CvGy5xLe2Mx21cqPj/mNEahOB+74ZmoRgV3Nubzfp2835i1V/x\nb36z3/No4I+OWqyIronRJnA0SEauaOrw5xbCxFD8GUjs5bZQp84r4YB5/XdA\nwh0vSWzhPHpsUKZPbGUvzNkgOXefn8Zup7MmAiuI7jEh7/9ZtMUPiSM60NTz\nAG3ytwmThopiQ0CjsllCgVGJTO2S+Qf9/bl9K/6GgT2Ig4NjCfNaCW7VmpGv\nDMND\r\n=rtFp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/cjs/index.js","types":"dist/mjs/index.d.ts","module":"dist/mjs/index.js","exports":{".":{"import":"./dist/mjs/index.js","require":"./dist/cjs/index.js"}},"gitHead":"dd00b979e16971aed37509edda5541bb4033bd5d","scripts":{"test":"jest","_lint":"eslint .","build":"rm -fr dist/* && tsc -p tsconfig.json && tsc -p tsconfig-cjs.json && ./fixup","prepare":"npm run build","test-cov":"jest --coverage","_prepublishOnly":"npm test && npm run lint"},"_npmUser":{"name":"sensedeep","email":"mob@sensedeep.com"},"repository":{"url":"git+https://github.com/sensedeep/senselogs.git","type":"git"},"_npmVersion":"7.20.1","description":"Dynamic serverless logging","directories":{},"_nodeVersion":"14.17.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","eslint":"^7.25.0","ts-jest":"^26.4.4","typescript":"^4.1.3","@types/jest":"^26.0.19","@types/node":"^14.14.16"},"_npmOperationalInternal":{"tmp":"tmp/senselogs_0.9.0_1627543526498_0.2781730955395738","host":"s3://npm-registry-packages"}},"0.9.1":{"name":"senselogs","version":"0.9.1","keywords":["serverless","log","logs","logging","library","lambda","typescript","aws","amazon"],"author":{"name":"Michael O'Brien","email":"mob@sensedeep.com"},"license":"MIT","_id":"senselogs@0.9.1","maintainers":[{"name":"sensedeep","email":"mob@sensedeep.com"}],"homepage":"https://github.com/sensedeep/senselogs","bugs":{"url":"http://github.com/sensedeep/senselogs/issues"},"dist":{"shasum":"48c2fbfd004ba5c4e5e2a0f40ddf5de4d15cbb49","tarball":"https://registry.npmjs.org/senselogs/-/senselogs-0.9.1.tgz","fileCount":9,"integrity":"sha512-Y8TsBm/uQtN7ZlhyVRkmI/jdOACr2aFatfyi4DTVD0djXG9+jBICh/I5ofA7i+/H1kTyklyRkNyLwoRlWV3YdA==","signatures":[{"sig":"MEQCIFZ8jvEEvxeQfHSN61VNUjXkC6XPRSpal8FrG2gP3d+oAiBIJOk+6ZfrqtBXuhdy9+jqjAdQ4D/OfAgvE2vZqb6o7w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60973,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhA1voCRA9TVsSAnZWagAAHE4P/3oBK23siVkx5OXfwZTU\nl5IeSQkpN85KTKSIpJo7ZDVaC0sinHiBadPEAS5w/XRD+fCZzTgF5UbzFX8c\nmsQCylTt7sc8F+4qvLxQTZlltMfQHF59L5smp1Ls3fgwZlnF6/RmVBySKcxc\n+A9pvv8ehGCp190j5yhxdd2NFQyzT3X1/aHJpetcFFpWObpYzY4NWVWPWd4T\naHkH5VQnwm+WoS03BTTCnoKYOb6GpAKnVWXTEjA6vvAfTXLW7z+kZPOA9x0c\ncYH+O6eqn+PRrxceHk/rTlNYGXFEUSqqYhF4K13Ijkod72Goxlycn6PgmgO4\nc+crPCypKRMmZna0HJ02YUWl/q1TJM54e2K3vD6B9juy6S/ND+eLVpKN0ua9\n6yUMZ7e64jQxB1+4W0AQS1OYKgeMY4OZVEtFmnNkxKvETGTQywu8Do7sNdvz\n1tBFExkOd0nbg67MoJ270c+kRuhppwGjvVrIcXxLm8/blbNK9qHNVS59F3Wd\nUKVFXeMom/Bt1PdxTJlgfHC07bM9OA3dB2xj1dkRwArytcRRhfEYQDOtKNJg\nN1nJ3dj9prrEJfg5IF2NQUeoO2P+MKL1jhMHUPqSH2C0TBSSGdoqpj+4WOPY\n7a5jN/mZhZ7X5bHvoQ1SRxB5PVAzn3ce9OmmlGo84HH3f9rhrOD7y+3GNBe2\nPszK\r\n=WqAY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/cjs/index.js","types":"dist/mjs/index.d.ts","module":"dist/mjs/index.js","exports":{".":{"import":"./dist/mjs/index.js","require":"./dist/cjs/index.js"}},"gitHead":"3993308c5b3385e8db07e5e4e1a4528a0ad11f2c","scripts":{"test":"jest","_lint":"eslint .","build":"rm -fr dist/* && tsc -p tsconfig.json && tsc -p tsconfig-cjs.json && ./fixup","prepare":"npm run build","test-cov":"jest --coverage","_prepublishOnly":"npm test && npm run lint"},"_npmUser":{"name":"sensedeep","email":"mob@sensedeep.com"},"repository":{"url":"git+https://github.com/sensedeep/senselogs.git","type":"git"},"_npmVersion":"7.20.1","description":"Simple, dynamic, blazing fast serverless logging","directories":{},"_nodeVersion":"14.17.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","eslint":"^7.25.0","ts-jest":"^26.4.4","typescript":"^4.1.3","@types/jest":"^26.0.19","@types/node":"^14.14.16"},"_npmOperationalInternal":{"tmp":"tmp/senselogs_0.9.1_1627610088548_0.026717852996408498","host":"s3://npm-registry-packages"}},"0.9.2":{"name":"senselogs","version":"0.9.2","keywords":["serverless","log","logs","logging","library","lambda","typescript","aws","amazon"],"author":{"name":"Michael O'Brien","email":"mob@sensedeep.com"},"license":"MIT","_id":"senselogs@0.9.2","maintainers":[{"name":"sensedeep","email":"mob@sensedeep.com"}],"homepage":"https://github.com/sensedeep/senselogs","bugs":{"url":"http://github.com/sensedeep/senselogs/issues"},"dist":{"shasum":"96761bfeabb28404371d8ecd8336899f0bad6303","tarball":"https://registry.npmjs.org/senselogs/-/senselogs-0.9.2.tgz","fileCount":9,"integrity":"sha512-Eq6/8ggv0m0wrZSzJ6+enhhHV77oZmLaWsMaMQupLarkyFamvw4oOcBwV1qkt+YhqkdlfarrCscM7IuI8iaeIQ==","signatures":[{"sig":"MEQCIGsk1rZ/6IMRRzHWYOwTMfBphIpz7exomCO1dzydoa4NAiByiwjQJ468ZBlUHiO4cnX308aCqoD0Whc07M9pVmX5Jw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65150,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhEIxvCRA9TVsSAnZWagAA0g8QAIr75Rpk0jIMGfGRcEp8\nO0lJJ1h/xnZOdv3VbcbgQhzrHA/yF87b8/dizNBmhqDLJVDZqJxvzYd5xGhd\nt5NRQTmG09GpMgJLbDqxjHDNwDP2KJ4z8rNi7E/6Mf3Az/0wRuK4CvLg0Yeh\nIvFAmZfrmo6lnSv2cgiYyKUE44RqX0icTlqKYv5GJMQYmS1G84U9nd/kLSBB\nf4dYpV3b8LiecdMTfxW8orYopN+NXc7N/BfwaroZSMYoThZ7FNf6aTCdbrPv\nu0l0giQ6aP0ad0jJ4KWxVJnzkXi74Q2the7JcxzWXfVckO8hAKWhQmqbijzs\ndUK6VEwBiAftdKpFtXSPdUuK0pBsnP0/gIDm4O4E8ppfAmxxAJOlPTpJc9/H\nmeK58dq7buIfjAo43Amy7CijcOsiGDkczY847BoxpPkwy2uOTSz5TjE6g9er\nKVU0eqtsRds6tHsr9pJuqxGVOIJn6BiQMGuLhFI+dQr5REUE6zuHw7C8H8G4\ndjQp9XYrbwHFhXRvW54s/1MGSlc66CtXGHtPeeBOUfnaRlDGcrMoCNwZJTIV\nk+QJ3V3iUMNkhXVbmo1R6NUYgRTXLGoIKPup1e4aE2OVbmeq6R3nzJPLi/wh\nV2nYocp4q3XOh/CrbJkLHpzfc1CUF+JDzYJHTss/VM2tIL7xqudIyQvTQH3B\nxdFV\r\n=t4nD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/cjs/index.js","types":"dist/mjs/index.d.ts","module":"dist/mjs/index.js","exports":{".":{"import":"./dist/mjs/index.js","require":"./dist/cjs/index.js"}},"gitHead":"19980703fc2833551c0aadd9caac200194645db5","scripts":{"test":"jest","_lint":"eslint .","build":"rm -fr dist/* && tsc -p tsconfig.json && tsc -p tsconfig-cjs.json && ./fixup","prepare":"npm run build","test-cov":"jest --coverage","_prepublishOnly":"npm test && npm run lint"},"_npmUser":{"name":"sensedeep","email":"mob@sensedeep.com"},"repository":{"url":"git+https://github.com/sensedeep/senselogs.git","type":"git"},"_npmVersion":"7.20.1","description":"Simple, dynamic, blazing fast serverless logging","directories":{},"_nodeVersion":"14.17.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","eslint":"^7.25.0","ts-jest":"^26.4.4","typescript":"^4.1.3","@types/jest":"^26.0.19","@types/node":"^14.14.16"},"_npmOperationalInternal":{"tmp":"tmp/senselogs_0.9.2_1628474479416_0.7410443783837548","host":"s3://npm-registry-packages"}},"0.10.0":{"name":"senselogs","version":"0.10.0","keywords":["serverless","log","logs","logging","library","lambda","typescript","aws","amazon"],"author":{"name":"Michael O'Brien","email":"mob@sensedeep.com"},"license":"MIT","_id":"senselogs@0.10.0","maintainers":[{"name":"sensedeep","email":"mob@sensedeep.com"}],"homepage":"https://github.com/sensedeep/senselogs","bugs":{"url":"http://github.com/sensedeep/senselogs/issues"},"dist":{"shasum":"1e2bf52c2cf5dc74eaff8f6f851ac2d019cdbce5","tarball":"https://registry.npmjs.org/senselogs/-/senselogs-0.10.0.tgz","fileCount":9,"integrity":"sha512-OHYNtccAVsDLCi57m/ioxiSp3eQAg7Dh3LUrhnTnrLlYcdvg0sCHyss2rMUvQFWaaGyMorxDPcJwIpKuC4Pecg==","signatures":[{"sig":"MEUCIDQi/d+BRqIEgbh4xrc5bVgI8Vitl5Rg1ynEYPuN+YAzAiEA6kZUYBRsm/wJdSQZK/FI3K1fEf/7t2ZfSQBqk1JvAPY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":67129,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhHbvzCRA9TVsSAnZWagAAwYIP/3QSCeFyi9fPi8thzudo\nPEuh57pUwu0p6adwmkgsL/JKt/v71hyV5HYCVnXPCOhHdQJyHHH0bRX8jfSw\nYthRJmHBm7ddEiWXNZDAeL8kEpjSusAcblgFyDIpvTSYqR/Bvm2SOA8jZzoJ\nK4I9fXFpPQh3F2l5rNvPqF02fkiqR5D2Y/jTfJbD+nv82B875DMJCSNmu1pp\nDvBDHpm7kdMKLWWc2/SHBoGqGzAPRRzH5lEExbVzS6JZ1HsgqVhEtJkoy2NJ\nSMWN23ko1MbLOCrEifWmaFeWGDUOtyQZOsyDbPlhqp+WkAdaQk/IfiIb/6qB\nBB3cY1b/FXSZ3/OssyN8JhSoW00GJa2k5eUxmXwlGkVDx2EApflGqdskAMwz\n9HA3+cnkksK3X+0A7q9XJokm3ylQgdjtxaWLdpdan0p8J55HBEmpcmiAjTrW\n25Sc6pS8DC71X1w+jscoL1Mz4U1p5Q0ZK1r/Ns6iLZpf3UA0ABB2WRKrYy+s\nD7hlbryvb50sOJAkph3rLcZ1dr/mUmyP1k5lTCSz2nTI/sbnbi0Ue/F0A4QM\n6HXXqzb7MoxzbWIeqAi7NNGULrd74Uvuk39lTB9BmtUePAI1cr3NwhdXOS+M\n8bGz4IrsMGhDFHRYgvbO1ludX6X+7WpBEr95HnKuI/v5+YbDqSee9MqnMSPp\nI0Ep\r\n=30Pe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/cjs/index.js","types":"dist/mjs/index.d.ts","module":"dist/mjs/index.js","exports":{".":{"import":"./dist/mjs/index.js","require":"./dist/cjs/index.js"}},"gitHead":"056a43882353a3bde2d9222a48b6bfd4239661c9","scripts":{"test":"jest","_lint":"eslint src","build":"rm -fr dist/* && tsc -p tsconfig.json && tsc -p tsconfig-cjs.json && ./fixup","prepare":"npm run build","test-cov":"jest --coverage","_prepublishOnly":"npm test && npm run lint"},"_npmUser":{"name":"sensedeep","email":"mob@sensedeep.com"},"repository":{"url":"git+https://github.com/sensedeep/senselogs.git","type":"git"},"_npmVersion":"7.20.1","description":"Simple, dynamic, blazing fast serverless logging","directories":{},"_nodeVersion":"14.17.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","eslint":"^7.25.0","ts-jest":"^26.4.4","typescript":"^4.1.3","@types/jest":"^26.0.19","@types/node":"^14.14.16"},"_npmOperationalInternal":{"tmp":"tmp/senselogs_0.10.0_1629338611094_0.6684011821998226","host":"s3://npm-registry-packages"}},"1.0.0":{"name":"senselogs","version":"1.0.0","keywords":["serverless","log","logs","logging","library","lambda","typescript","aws","amazon"],"author":{"name":"Michael O'Brien","email":"mob@sensedeep.com"},"license":"MIT","_id":"senselogs@1.0.0","maintainers":[{"name":"sensedeep","email":"mob@sensedeep.com"}],"homepage":"https://github.com/sensedeep/senselogs","bugs":{"url":"http://github.com/sensedeep/senselogs/issues"},"dist":{"shasum":"14bf69aec7d2116563dfa19d0e37e017f59fa101","tarball":"https://registry.npmjs.org/senselogs/-/senselogs-1.0.0.tgz","fileCount":9,"integrity":"sha512-TGgIqPBBD/jIve7bAyZeYURnsapYkYahZ4DYCShkMM7+vT0hbnoQZBY92VjN7mMlqVK8hL6TYHdJXs9Fib317A==","signatures":[{"sig":"MEQCIA1N+CYR4hCuV84hjt9v3HXJcruUUe1Lf3vumj/2sPgJAiBFmXUFrfME/yyIrgFQt3hdf5G9t1ty+5KsevX4WbNyRA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":69156,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhMTZ/CRA9TVsSAnZWagAAigEP/jS2vJsl1BgKgytmNTZG\n/bysa4aG2IPFQ6Dz9GjgjIHIhQrkA0rgYmx9p24UKENqQ6HhGMK6Y68fXuIq\na2IXhmq0L901weSqWBdXNr6buHGMqmVyvSwbh3eS/6r4c8S8WSTy/ZUCRH2e\nqxTYWwH3tqtJrb7AAbddWP7XbX7OAD+ScYTwHEA/jdBCtKWmlZ1LEJJp5Pgv\nxiyKh0JnsRdTrZ8AlA1zFg1ImwK3s91YPHf/SK1Evr/amSeSUv2sf8I7DdI8\ninUrpxEjPowQIjO9DN7PuRRbAR/EPIy5/a4EQAlJzBHODmXWpfBLmDyXKRPr\nqacGaPnesTqZ/5y/fS7F3F3ujf+P2QuFITyfKWIBiRQzihbuIL/rMJWIh8ZG\nI4pdfHlXGz5KyYuoW3dfyR38ONGh+nsRwsu9sZuya8ssq+cXwtnQom3izqwl\nZbcWsXvEzExcCOZuNrJWM4sW4Ul6O49tXQ29ErYQ75TJ2VSGlDytCiHLI5tB\nUplBgrIvQqeKnRkv8KzY9iWwUwtO5IxeclHzEdOZg5NGN0e5Pxf77ojf3ZLt\nOwLup+OHdDLTvoFSMkd+i8O08wJv3TcWx83i3n5WUJKzgegKqUPp2i5ZJxNB\nL1fOlA/3khxNQphrQI1GWVGqyDVZ3XKlNdIoXjNBeLd6TS9QjYrNnNZ3DqAv\n3FFE\r\n=TAmh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/cjs/index.js","types":"dist/mjs/index.d.ts","module":"dist/mjs/index.js","exports":{".":{"import":"./dist/mjs/index.js","require":"./dist/cjs/index.js"}},"gitHead":"a7ce86dbb8c494ae751b681385bfdcf710599007","scripts":{"test":"jest","_lint":"eslint src","build":"rm -fr dist/* && tsc -p tsconfig.json && tsc -p tsconfig-cjs.json && ./fixup","prepare":"npm run build","test-cov":"jest --coverage","_prepublishOnly":"npm test && npm run lint"},"_npmUser":{"name":"sensedeep","email":"mob@sensedeep.com"},"repository":{"url":"git+https://github.com/sensedeep/senselogs.git","type":"git"},"_npmVersion":"7.20.1","description":"Simple, dynamic, blazing fast serverless logging","directories":{},"_nodeVersion":"14.17.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","eslint":"^7.25.0","ts-jest":"^26.4.4","typescript":"^4.1.3","@types/jest":"^26.0.19","@types/node":"^14.14.16"},"_npmOperationalInternal":{"tmp":"tmp/senselogs_1.0.0_1630615167074_0.6048760358804364","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"senselogs","version":"1.0.1","keywords":["serverless","lambda","log","logs","logging","observability","typescript","aws","amazon"],"author":{"name":"Michael O'Brien","email":"mob@sensedeep.com"},"license":"MIT","_id":"senselogs@1.0.1","maintainers":[{"name":"sensedeep","email":"mob@sensedeep.com"}],"homepage":"https://github.com/sensedeep/senselogs","bugs":{"url":"http://github.com/sensedeep/senselogs/issues"},"dist":{"shasum":"90dfdb769be058879ca95c398b619dd7d45973fa","tarball":"https://registry.npmjs.org/senselogs/-/senselogs-1.0.1.tgz","fileCount":9,"integrity":"sha512-qxkoS9Io9im5YVWoeuCVKoPdSOvj6o56jkaIT7D2x1PpLOETs+3ujONoDNgvZd10Wf7aGOksaPSPDDpbBhmizg==","signatures":[{"sig":"MEQCIDeJOzuNC+NBZ5Y5wx7ZgvQqQXJ4lfnjg/mzOqMgzHX1AiBiOeHZt0j4vl+JoqMarbS3ALA9sBEKfh+XNPTrDG4vTQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":69971},"main":"dist/cjs/index.js","types":"dist/mjs/index.d.ts","module":"dist/mjs/index.js","exports":{".":{"import":"./dist/mjs/index.js","require":"./dist/cjs/index.js"}},"gitHead":"7d9a24af6cd13e60fd758acbf68f54b58a216c43","scripts":{"test":"jest","_lint":"eslint src","build":"rm -fr dist/* && tsc -p tsconfig.json && tsc -p tsconfig-cjs.json && ./fixup","prepare":"npm run build","test-cov":"jest --coverage","_prepublishOnly":"npm test && npm run lint"},"_npmUser":{"name":"sensedeep","email":"mob@sensedeep.com"},"repository":{"url":"git+https://github.com/sensedeep/senselogs.git","type":"git"},"_npmVersion":"7.20.1","description":"Simple, dynamic, blazing fast serverless logging","directories":{},"_nodeVersion":"14.17.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","eslint":"^7.25.0","ts-jest":"^26.4.4","typescript":"^4.1.3","@types/jest":"^26.0.19","@types/node":"^14.14.16"},"_npmOperationalInternal":{"tmp":"tmp/senselogs_1.0.1_1633031334980_0.5797231186375693","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"senselogs","version":"1.0.2","keywords":["serverless","lambda","log","logs","logging","observability","typescript","aws","amazon"],"author":{"name":"Michael O'Brien","email":"mob@sensedeep.com"},"license":"MIT","_id":"senselogs@1.0.2","maintainers":[{"name":"sensedeep","email":"mob@sensedeep.com"}],"homepage":"https://github.com/sensedeep/senselogs","bugs":{"url":"http://github.com/sensedeep/senselogs/issues"},"dist":{"shasum":"118c81e0bc68b0cfe28e678fbccf35ea5bd09ec7","tarball":"https://registry.npmjs.org/senselogs/-/senselogs-1.0.2.tgz","fileCount":9,"integrity":"sha512-gfxeoQKsPz+BMGd62l7720SuadMTktoKa9iK8Lbqqb1nhhFe/qgUo8lBb+FLr5bZ8xmNt17nKh1E5H4qBtH7Ig==","signatures":[{"sig":"MEUCIQDVO1ohNckN1cp+5Hyjrqo7v4wXMgzoKPRPCFpdK8xMIQIgVqxQRBf+diqJljwFMQYE0739xsxiOi6TiTG+b6bLg2k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":72142,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhyUo/CRA9TVsSAnZWagAAP4wQAIvVJcv60uxjx0UzpCXW\n7NPiacJ+YymZ5BRspAeJnfwY2SUg21VYn1rzfMevHQnyfGuaOlhkqZvuJ5jM\nIC6gI4lXFMAKYt9G3Xd5wuO15bB9tkkZx3EY1L/EuH/JXrZ5Ok+Q39pI5ghI\nmTe8rhy6IC8sJoN7QHBHyf0/6urrh7vdPp1FR+wruQhTl47Q0xe2isfXIipg\nry5oQQdnU4i4EYayBKuVZ65D7jbSE/qkHbmWBagQpTwYwt8/1XMTEkl8USfm\nhvnnHCA+6gQ+9awlvf8U5p27t0NCiu5R3XKwLmh206UmLzcIl7ksnrr5V9To\nr9HxKe+TJcm7HlxuC6o8V7ry1GtJ1lEhYVoUZkEjseLIT0P8lDcP47kuTkE8\npOXRc5F0YQPVPXX6CZKxcZl/Zb0AemH0keHGrnqm57RQpWStjuP1k0lY1rca\nhkYtYF1fEfGARDggW2TV8e5INq4zpjtyuKdzVjkYHzbvHdscQCbanqHQrmu0\nko6Kj50xe/3Xckydun9Ko8akonCJkO/HWGCw8kfjotcGd0O5THEAlzmoCc4x\n3YYAPBmAa1nArnoghsNq9Cu7R/oIVs6/QmJppTAwoI7khUDvvbmremSnnUaq\nFvZfJbyuJ7/aNQXczaEgkB2x9Ia0xRM41AHPoPMoCKCV6ojX2NyKmJc02CRf\nVqWa\r\n=oEad\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/cjs/index.js","types":"dist/mjs/index.d.ts","module":"dist/mjs/index.js","exports":{".":{"import":"./dist/mjs/index.js","require":"./dist/cjs/index.js"}},"gitHead":"0e9c88f9ae52cac322cb61b7afeb7b38330fb5b2","scripts":{"test":"jest","_lint":"eslint src","build":"rm -fr dist/* && tsc -p tsconfig.json && tsc -p tsconfig-cjs.json && ./fixup","prepare":"npm run build","test-cov":"jest --coverage","_prepublishOnly":"npm test && npm run lint"},"_npmUser":{"name":"sensedeep","email":"mob@sensedeep.com"},"repository":{"url":"git+https://github.com/sensedeep/senselogs.git","type":"git"},"_npmVersion":"7.20.1","description":"Simple, dynamic, blazing fast serverless logging","directories":{},"_nodeVersion":"14.17.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","eslint":"^7.25.0","ts-jest":"^26.4.4","typescript":"^4.1.3","@types/jest":"^26.0.19","@types/node":"^14.14.16"},"_npmOperationalInternal":{"tmp":"tmp/senselogs_1.0.2_1640581694947_0.842827074701384","host":"s3://npm-registry-packages"}},"1.0.3":{"name":"senselogs","version":"1.0.3","keywords":["serverless","lambda","log","logs","logging","observability","typescript","aws","amazon"],"author":{"name":"Michael O'Brien","email":"mob@sensedeep.com"},"license":"MIT","_id":"senselogs@1.0.3","maintainers":[{"name":"sensedeep","email":"mob@sensedeep.com"}],"homepage":"https://github.com/sensedeep/senselogs","bugs":{"url":"http://github.com/sensedeep/senselogs/issues"},"dist":{"shasum":"de6d1af5a9029da8bc33071b3df6c53745344996","tarball":"https://registry.npmjs.org/senselogs/-/senselogs-1.0.3.tgz","fileCount":9,"integrity":"sha512-wKWGIq/ubAhn7qgSW7gaXZPZo/WITfefgVx7pV4R/Gzkg3SuvY+zIXZK1dYqGFVcS+HyaHOKm0V5WSpHYF7aNA==","signatures":[{"sig":"MEQCIFyz5sexTPTUSHdJxWvRiomh4c2HDehg8ThczV92TJe2AiAzjgS/hVLb3/KFiFFg2+g4+Vm/O6lNA7+/62IjdSXeNA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":73612,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiROllACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmobng/+Iay3b3iDS03C3l67YSx++Vq4XX+pYouhsgfSvKxbH6OU5B8r\r\nXIURrH/f9zS9bk50BN2ZDi81d5zg/eh/oC2SviPXrQTF8LWVBfBflEzLpZeI\r\nG1HLKZRoLFWFQC9C0UzdldeORt54RaCaav+LE6/ccuyiDMmRkOFTCpA2wnAw\r\n1ebAZE6U+OwNU9ZERGch+tsSSPa/iejcpXqObl/lZLHcqqaiHm4tgePL2pGu\r\nVZOinwq4A4DexqMihIsoGpAZHnv1o6/0Ao1fjTEaZwgFitp/5Fqmlti9ZKEj\r\nlh5oPY9OaQ6xFWd+aIXnkRz4EDTBEegJ1Li9eHeI12VQadckTfnnOPyoRnZz\r\n+zWq0Z1UuNH3zH66YFkL6PB0LlttTeyGRoxsl2BYqUyHmWI078sdFwsOsr1A\r\nIYSn32WRh7ZTr7E1jQxdQOTRwCyD3Y0t+WCjVQgWqiepm7643P+n29kA74Pq\r\n9Sc1K98TBI00gbGR2ca3nPb+P+0gTnR1h7c0oGD6CzbsHCcCwiP7PzscZMlG\r\nZfpLIFXrYN3Zh/ILf/2SEPzgYruCXWMXohhvU4KPXS2l9/skjC+vhN1l+sIS\r\nml2cXZJbRfLvAlm+OffVbIVOhewn64LDKZmC8JtLL2NHtjPLah6H19jAmCYk\r\nsX5m2rLgYteut7afK+/SCttSIN1qjWomVaY=\r\n=wSzf\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/cjs/index.js","types":"dist/mjs/index.d.ts","module":"dist/mjs/index.js","exports":{".":{"import":"./dist/mjs/index.js","require":"./dist/cjs/index.js"}},"gitHead":"5610d66d052396471c9fb644e49df89608e2e63b","scripts":{"test":"jest","_lint":"eslint src","build":"rm -fr dist/* && tsc -p tsconfig.json && tsc -p tsconfig-cjs.json && ./fixup","prepare":"npm run build","test-cov":"jest --coverage","_prepublishOnly":"npm test && npm run lint"},"_npmUser":{"name":"sensedeep","email":"mob@sensedeep.com"},"repository":{"url":"git+https://github.com/sensedeep/senselogs.git","type":"git"},"_npmVersion":"7.20.1","description":"Simple, dynamic, blazing fast serverless logging","directories":{},"_nodeVersion":"14.17.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^27.5.1","eslint":"^8.12.0","ts-jest":"^27.1.4","typescript":"^4.6.3","@types/jest":"^27.4.1","@types/node":"^17.0.23"},"_npmOperationalInternal":{"tmp":"tmp/senselogs_1.0.3_1648683364795_0.49584937944661367","host":"s3://npm-registry-packages"}},"1.0.4":{"name":"senselogs","version":"1.0.4","keywords":["serverless","lambda","log","logs","logging","observability","typescript","aws","amazon"],"author":{"name":"Michael O'Brien","email":"mob@sensedeep.com"},"license":"MIT","_id":"senselogs@1.0.4","maintainers":[{"name":"sensedeep","email":"mob@sensedeep.com"}],"homepage":"https://github.com/sensedeep/senselogs","bugs":{"url":"http://github.com/sensedeep/senselogs/issues"},"dist":{"shasum":"670b5311249c4b6fd3c30d48d95522fd1042eae1","tarball":"https://registry.npmjs.org/senselogs/-/senselogs-1.0.4.tgz","fileCount":9,"integrity":"sha512-yCV18Mkdksl/Z9+v3WcVxo4DFlHFJT9Mer7YpLon1btY8xAbwn8eQsanMFvD7H6YYixxGwyPLzi7XIU9IZ7sHQ==","signatures":[{"sig":"MEUCIE8YQ4923aauNUvcwWacuBo76/4n3F7OV66jeS2Sq50UAiEAqo5iqXvYLoIqgp8Ln6vQJnPw7dGiBpnq/DEJKR1e9sk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":75576,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjafmwACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqY4A/9GEcuE5eAxOCI+9k7ixBOU07Rki5Ak3aLebsjgvKRNZrKc/MW\r\nE65BwQdaHEPwEZfFEfWx1qjYKoh7aYSh5RO3v+XH4N5Eofeb3f5zKBJloMRr\r\nec6LC2Zsr6nD4oQ+UXZHox+wPpjtQUDQ7GCkm9FU8obxzwcszhn5CMyI7S+S\r\noDvixXFGn6V4ULQqDKDvmcu8TgLp+gaBnXYaB+6U2TcRTQbs8L8kimjEcDw/\r\nY6Si/8y4HRJDcdLp/lTTrIxBSrymKKYVQDm4cDl862XG/fwQRQS/N+yFj8Ew\r\nrSahEi//72uRhgsCaqM9XmZs7pOmdm1KJC33gJwcMlK6HB6664RYcLYYAYoC\r\nxAc/63psmLhRYkXXRF6xoaLL4bBFP2PlpU+ooNbZhJvbWOteddjy7ogC3Xv6\r\nlbBsdl3OS+8mIceU00SorYzapShnp80GlMlrtIy0E4YFU6GqbQQh7Yfo8hyf\r\nZR4Ok1ptFsNG4b7PTuZxD8yjoCT77zFcBoSjNlWF4i3ndyOGx5Ii7fjoTj8Y\r\nwjmUkb6SteeNkIVL0HDHzqZSjaw8LHWnsAHmW1xFc195JOl5gH4ZdJZbZ+zg\r\n3C+cm0N7akLd4dnTII2jPOgmBI657buaZSJBA85y6r5cXb0yxgvxHE+kkED2\r\nxXL2mE4SNmx8TKPrH6TTfwmqH6gpgLotNMU=\r\n=uT0V\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/cjs/index.js","types":"dist/mjs/index.d.ts","module":"dist/mjs/index.js","exports":{".":{"import":"./dist/mjs/index.js","require":"./dist/cjs/index.js"}},"gitHead":"3564e7616a705276bfb0d04004d3e8200b4b0788","scripts":{"test":"jest","_lint":"eslint src","build":"rm -fr dist/* && tsc -p tsconfig.json && tsc -p tsconfig-cjs.json && ./fixup","prepare":"npm run build","test-cov":"jest --coverage","_prepublishOnly":"npm test && npm run lint"},"_npmUser":{"name":"sensedeep","email":"mob@sensedeep.com"},"repository":{"url":"git+https://github.com/sensedeep/senselogs.git","type":"git"},"_npmVersion":"6.14.17","description":"Simple, dynamic, blazing fast serverless logging","directories":{},"_nodeVersion":"14.20.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.3.0","eslint":"^8.27.0","ts-jest":"^29.0.3","typescript":"^4.8.4","@types/jest":"^29.2.2","@types/node":"^18.11.9"},"_npmOperationalInternal":{"tmp":"tmp/senselogs_1.0.4_1667889584447_0.8281527257331249","host":"s3://npm-registry-packages"}},"1.0.5":{"name":"senselogs","version":"1.0.5","keywords":["serverless","lambda","log","logs","logging","observability","typescript","aws","amazon"],"author":{"name":"Michael O'Brien","email":"mob@sensedeep.com"},"license":"MIT","_id":"senselogs@1.0.5","maintainers":[{"name":"sensedeep","email":"mob@sensedeep.com"}],"homepage":"https://github.com/sensedeep/senselogs","bugs":{"url":"http://github.com/sensedeep/senselogs/issues"},"dist":{"shasum":"21d4c575626646155f23917dc976584f5c942355","tarball":"https://registry.npmjs.org/senselogs/-/senselogs-1.0.5.tgz","fileCount":9,"integrity":"sha512-zGtPuIZ+MnTZ1jUISX9xY5MGTU+a889pIt99zLx1mdb+mth0f52Dj+OI5ce4aE2EazQm+rEd376ixhMNpgyE8w==","signatures":[{"sig":"MEQCIFoWX1BuhpMtSKnhU94kohvPO472b0fE4wKo3ZCbAWg+AiAZVHTpiAqIKsZjxY+AFNkkZmzefLwXkIjnVg6gmKFAXw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":77118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj7GqjACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoOGBAAgtkms02fLa7FjP+v+AAREFRZQ8s6zOr/J8mSsRYqbtM+mBPJ\r\nBBlcJYSBir0MJNPXjAJaJhzjnaZXCKPQDeKY54S/EMVuuE6eB7aJfPm1OgNT\r\nGhk2wJnXZJ3iI7Zra0h8AwU3BOPPO/s03VI9QOuV/J+5MdmDpvE+W6cMZDMW\r\noIj9+dk6r6B70ry6IeVbLIbQ+HHWv3jF7K12ZHCy7ham9xhN/n8HM1V0c5Ba\r\nB6GVHZZNfeW8MK3I1BJ2VMaDa/Tm3OkvnYJFfpKiucOlZAMD3svriq2xfpyy\r\n5XSyfrIUmnR5FeRgn4yNHsilxhgwUxN9occ+W/5njNZJGm34t5GOYO6IbE0c\r\nAyZEUXQGi5ApyQJFYUAL2/ggUC4zI5OU6X13PAAPHRhEg1YntYwTmmeEjA4m\r\n2/1w4qmVOmHz5IEnF8Z2rJtR94IxVEv6UfDUtOGDKz51ZlZamf4BslN48cyW\r\n+3Aw1lnf6orqFibEJD4SWxCz5llljUrE8gsH3ppR6W7xqyF+V77qLwyb2uzU\r\nNVwUUOnFI/S0c5Fn77lul54tqOdY3bWtvxMkYvZqA/B5TXLKUId6Ap3PUZ2z\r\nkyuXqjkCOH2eJDeOwjgx8QKEeWn+Hz1HNeNVOLTB/QUzWmF58QIUAspTvEmR\r\ncmd2WnCwR27kIkNL+X/rXpdGf3pHb57MA60=\r\n=d3Ni\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/cjs/index.js","types":"dist/mjs/index.d.ts","module":"dist/mjs/index.js","exports":{".":{"import":"./dist/mjs/index.js","require":"./dist/cjs/index.js"}},"gitHead":"127a317fe7de3c4ddf4919873081a9adfffb5ecf","scripts":{"test":"jest","_lint":"eslint src","build":"rm -fr dist/* && tsc -p tsconfig.json && tsc -p tsconfig-cjs.json && ./fixup","prepare":"npm run build","test-cov":"jest --coverage","_prepublishOnly":"npm test && npm run lint"},"_npmUser":{"name":"sensedeep","email":"mob@sensedeep.com"},"repository":{"url":"git+https://github.com/sensedeep/senselogs.git","type":"git"},"_npmVersion":"8.15.0","description":"Simple, dynamic, blazing fast serverless logging","directories":{},"_nodeVersion":"16.17.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.4.2","eslint":"^8.34.0","ts-jest":"^29.0.5","typescript":"^4.9.5","@types/jest":"^29.4.0","@types/node":"^18.13.0"},"_npmOperationalInternal":{"tmp":"tmp/senselogs_1.0.5_1676438179605_0.9718777789916069","host":"s3://npm-registry-packages"}},"1.0.6":{"name":"senselogs","version":"1.0.6","keywords":["serverless","lambda","log","logs","logging","observability","typescript","aws","amazon"],"author":{"name":"Michael O'Brien","email":"mob@sensedeep.com"},"license":"MIT","_id":"senselogs@1.0.6","maintainers":[{"name":"sensedeep","email":"mob@sensedeep.com"}],"homepage":"https://github.com/sensedeep/senselogs","bugs":{"url":"http://github.com/sensedeep/senselogs/issues"},"dist":{"shasum":"2712d3da311feaa70c03f51b674236e395d03dd7","tarball":"https://registry.npmjs.org/senselogs/-/senselogs-1.0.6.tgz","fileCount":9,"integrity":"sha512-qD92MAyKmzZ8/f40Gts9pfRJ0ZHXwdn3PIAX6kE59RLkROAgx8QRr4v8rXzpnyq71rcgERYDSz6TRgvPKfUdpw==","signatures":[{"sig":"MEYCIQDG/DA6dd+ILxwGkraOb7d/Q6AY2S5vLaoBC6vj3JYPBQIhAP0Pvq5GZQfcWCiYYXdGbKNxqO4M5YNBZRz5v9NtK/bK","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":76883},"main":"dist/cjs/index.js","types":"dist/mjs/index.d.ts","module":"dist/mjs/index.js","exports":{".":{"import":"./dist/mjs/index.js","require":"./dist/cjs/index.js"}},"gitHead":"56c252a2a09f1e624fc8630b4ef16989dc10837a","scripts":{"test":"jest","_lint":"eslint src","build":"rm -fr dist/* && tsc -p tsconfig.json && tsc -p tsconfig-cjs.json && ./fixup","prepare":"npm run build","test-cov":"jest --coverage","_prepublishOnly":"npm test && npm run lint"},"_npmUser":{"name":"sensedeep","email":"mob@sensedeep.com"},"repository":{"url":"git+https://github.com/sensedeep/senselogs.git","type":"git"},"_npmVersion":"8.15.0","description":"Simple, dynamic, blazing fast serverless logging","directories":{},"_nodeVersion":"16.17.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","ts-jest":"^29.1.0","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/node":"^20.1.3"},"_npmOperationalInternal":{"tmp":"tmp/senselogs_1.0.6_1692332052476_0.27706216723638377","host":"s3://npm-registry-packages"}},"1.0.7":{"name":"senselogs","version":"1.0.7","description":"Simple, dynamic, blazing fast serverless logging","main":"dist/cjs/index.js","module":"dist/mjs/index.js","types":"dist/mjs/index.d.ts","exports":{".":{"import":"./dist/mjs/index.js","require":"./dist/cjs/index.js"}},"keywords":["serverless","lambda","log","logs","logging","observability","typescript","aws","amazon"],"author":{"name":"Michael O'Brien","email":"mob@sensedeep.com"},"repository":{"type":"git","url":"git+https://github.com/sensedeep/senselogs.git"},"bugs":{"url":"http://github.com/sensedeep/senselogs/issues"},"homepage":"https://github.com/sensedeep/senselogs","license":"MIT","scripts":{"build":"rm -fr dist/* && tsc -p tsconfig.json && tsc -p tsconfig-cjs.json && ./fixup","_lint":"eslint src","prepare":"npm run build","_prepublishOnly":"npm test && npm run lint","test":"jest","test-cov":"jest --coverage"},"devDependencies":{"@types/jest":"^29.5.12","@types/node":"^20.14.5","eslint":"^9.5.0","jest":"^29.7.0","ts-jest":"^29.1.5","typescript":"^5.4.5"},"_id":"senselogs@1.0.7","gitHead":"a491d0b50f6f35d5ca1fd499ea1b7c1593084c2c","_nodeVersion":"20.11.1","_npmVersion":"10.2.4","dist":{"integrity":"sha512-RSOTnR0xE/3vlmtMGaay9CYzdJAFSghD2r5SNiAhSgLLtI1vAyXM7mgQwRImPPS3bnJiOR/b1UMuts/mDd2deg==","shasum":"d1f1d2a719b035d554c58969a613facb6caafad9","tarball":"https://registry.npmjs.org/senselogs/-/senselogs-1.0.7.tgz","fileCount":9,"unpackedSize":76973,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDb3n8dsdWXIt4w9rFRI/1WTUrrfPjA+H4DWyyan6fmuwIgQLutlT4IG8sl32YxHp/r/4RxFMeTIOLU3e+ocYEPrfs="}]},"_npmUser":{"name":"sensedeep","email":"mob@sensedeep.com"},"directories":{},"maintainers":[{"name":"sensedeep","email":"mob@sensedeep.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/senselogs_1.0.7_1718760284150_0.36536885745738634"},"_hasShrinkwrap":false}},"time":{"created":"2021-07-16T08:01:59.031Z","modified":"2024-06-19T01:24:44.512Z","0.8.0":"2021-07-16T08:01:59.345Z","0.8.1":"2021-07-17T09:24:27.102Z","0.8.2":"2021-07-20T02:43:26.695Z","0.8.3":"2021-07-22T04:48:18.126Z","0.8.4":"2021-07-27T02:58:39.678Z","0.9.0":"2021-07-29T07:25:26.667Z","0.9.1":"2021-07-30T01:54:48.731Z","0.9.2":"2021-08-09T02:01:19.570Z","0.10.0":"2021-08-19T02:03:31.250Z","1.0.0":"2021-09-02T20:39:27.248Z","1.0.1":"2021-09-30T19:48:55.174Z","1.0.2":"2021-12-27T05:08:15.324Z","1.0.3":"2022-03-30T23:36:04.980Z","1.0.4":"2022-11-08T06:39:44.604Z","1.0.5":"2023-02-15T05:16:19.777Z","1.0.6":"2023-08-18T04:14:12.701Z","1.0.7":"2024-06-19T01:24:44.338Z"},"maintainers":[{"name":"sensedeep","email":"mob@sensedeep.com"}],"author":{"name":"Michael O'Brien","email":"mob@sensedeep.com"},"repository":{"type":"git","url":"git+https://github.com/sensedeep/senselogs.git"},"keywords":["serverless","lambda","log","logs","logging","observability","typescript","aws","amazon"],"license":"MIT","homepage":"https://github.com/sensedeep/senselogs","bugs":{"url":"http://github.com/sensedeep/senselogs/issues"},"readme":"![SenseLogs](https://www.sensedeep.com/images/senselogs.png)\n\n*Observability without the crushing performance cost (6.5 times faster than Pino)*\n\n<!--\n[![Build Status](https://img.shields.io/github/actions/workflow/status/sensedeep/senselogs/build.yml?branch=main)](https://img.shields.io/github/actions/workflow/status/sensedeep/senselogs/build.yml?branch=main)\n[![npm](https://img.shields.io/npm/v/senselogs.svg)](https://www.npmjs.com/package/senselogs)\n[![npm](https://img.shields.io/npm/l/senselogs.svg)](https://www.npmjs.com/package/senselogs)\n[![Coverage Status](https://coveralls.io/repos/github/sensedeep/senselogs/badge.svg?branch=main)](https://coveralls.io/github/sensedeep/senselogs?branch=main)\n-->\n\n**Extremely fast, dynamically controllable logging for serverless.**\n\nSenseLogs is a simple, flexible, dynamic, blazing fast log library designed exclusively for serverless apps using NodeJS.\n\nWhile there are many other good logging libraries that claim to be fast, they were not designed `for` serverless and so are bigger and slower than necessary.\n\nFurthermore, serverless apps have special requirements like minimizing cold-start time, dynamic log filtering control without redeploying and being able to capture detailed context and request information without modifying your functions.\n\nSenseLogs is designed to do this, simply and elegantly. SenseLogs makes it easy to instrument your code for maximum Observability without a crushing performance penalty.\n\n## SenseLogs Features\n\n* Emit log data with rich context for maximum Observability.\n* Flexible log channels and filters.\n* Dynamic log control to change log filters without redeploying.\n* Emits logs in JSON with full context.\n* Extremely fast initialization time to shorten cold-starts.\n* Up to 7 times faster than the nearest alternative.\n* Log sampling to emit increased logs for a percentage of requests.\n* For local debugging, emits in human readable formats.\n* Inheriting child log instances for per-module logging.\n* Stack capture for uncaught exceptions.\n* Easily emit CloudWatch custom metrics using EMF.\n* Integrates with [SenseDeep](https://www.sensedeep.com) developer studio.\n* Full TypeScript support.\n* Clean, readable small code base (<500 lines).\n* No dependencies.\n\n\n## Quick Tour\n\nInstall the library using npm or yarn.\n\n    npm i senselogs\n\nImport the SenseLogs library. If you are not using ES modules or TypeScript, use `require` to import the library.\n\n```javascript\nimport SenseLogs from 'senselogs'\n```\n\nCreate and configure a logger.\n\n```javascript\nconst log = new SenseLogs()\n```\n\nThen log with a message:\n\n```javascript\nlog.info('Simple messsage')\nlog.error(`Request error for user: ${user.email}`)\n```\n\nYou can also supply addition message context:\n\n```javascript\nlog.error('Another log error message with context', {\n    requestId: 1234,\n    userId: '58b23f29-3f84-43ff-a767-18d83500dbd3'\n})\n```\n\nThis will emit\n\n```json\n{\n    \"message\": \"Another log error message with context\",\n    \"requestId\": 1234,\n    \"userId\": \"58b23f29-3f84-43ff-a767-18d83500dbd3\"\n}\n```\n\nSenseLogs organizes and filters log messages via channels which are names given to classify log message types.\nUnlike other logging products, channels are not ordered like log levels. You can enable or disable any level at any time.\n\nSenseLogs provides standard channels like: debug, error, warn and info. For example:\n\n```javascript\nlog.error('Bad things happen sometimes')\nlog.error(new Error('Invalid request state'), {request})\n\nlog.debug('The queue was empty')\nlog.trace('Database request', {request})\n```\n\nYou can extend upon this basic set of channels and use your own custom channels via the `emit` API. For example:\n\n```javascript\nlog.emit('custom-channel', 'My custom channel')\nlog.emit('messaging-backend', 'Network error')\n```\n\nThese channels are \"zero-config\" which means you do not need to pre-declare or define channels. Simply use them as you wish. Such custom channels are an ideal way to build \"observability\" into your app by defining latent logging commands that will only emit data when you enable those channels at runtime.\n\nSenseLogs integrates with the [SenseDeep](https://www.sensedeep.com) serverless developer studio which can manage custom channels to enable and disable output at runtime without redeploying your serverless apps.\n\n\n### Benchmarks\n\nBecause SenseLogs was designed exclusively for serverless, it does not carry unnecessary enterprise logging burdens and is blazing fast for serverless logging tasks.\n\nHere are the results of benchmarks against the self-claimed fastest logger [Pino](https://github.com/pinojs/pino).\n\nSenseLogs 6.5 times faster than the best alternative.\n\n| Logger | Time | Code Size |\n| -------- | :--: | ----------- |\n| SenseLogs | 477 ms | 450 lines |\n| Pino | 3,269 ms | 1281 lines |\n\n\n### Output Format\n\nBy default, SenseLogs will emit log messages in JSON format. However, you can configure the logger to emit human readable output by setting the format to `human`. Tab-delimited format can be specified by setting the format to `tsv`. Key/Value format is specified via `keyvalue`\n\n```javascript\nconst log = new SenseLogs({format: 'tsv'})\n```\n\nA custom formatting function can be specified via the `format` option which will be invoked and passed the combined log message context. The function should return the message to output without a trailing new line.\n\n```javascript\nformat(context): string\n```\n\nBy default, SenseLogs messages do not include a timestamp because Lambda and other services typically add their own timestamps. If you need a timestamp, set the `params.timestamp` to true in the SenseLogs constructor.\n\n\n### Custom Destinations\n\nYou can supply additional destinations at any time via the `addDestination`. This is useful to ship your logs to other destinations or to transform and format the output as you please. Each destination may configure a log output format to use for that destination.\n\n```javascript\nlog.addDestination({\n    write: (logger, context, message) => message\n}, 'human')\n```\n\nThe addDestination APi takes a format option as its 2nd parameter. This is set to 'json' by default, but you can set to `human`, `tsv` or `keyvalue`. A destination write function may choose to write the pre-formatted `message` argument or it can perform custom formatting and use the raw context to create its own message to write.\n\nUse the `setDestination` API to replace all destinations with a new single destination.\n\n### Log Channels\n\nSenseLogs defines the following default log channels: `assert`, `data`, `debug`, `error`, `fatal`, `info`, `metrics`, `trace`, `warn` and `silent`. These have corresponding log methods of the same name.\n\nLog messages will be emitted when you call a log channel method AND that channel is enabled in the filter set. See filters below.\n\nYou can also use custom channels for modules or services in your application, or you can use channels for horizontal traits like `testing`. You don't need to pre-create the channel, simply use it with the `emit` method.\n\nFor example:\n\n```javascript\n//  Enable output for the auth channel\nlog.addFilter('auth')\n\n//  Use the 'auth' channel\nlog.emit('auth', 'User Login', {user})\n```\n\nHere are some tips about when to use various channels:\n\n* Assert - Code assertions via the `assert` method. This channel be enabled in dev builds.\n* Data - Request response data. This channel is not enabled by default.\n* Trace - Detailed information of a request or code module. This channel is not enabled by default. Consider using custom channels to better manage trace.\n* Debug - Logging only during debugging. This channel is not enabled by default.\n* Info - Generally useful information that will always be available in the logs.\n* Metrics - Used to emit EMF custom metrics. Enabled by default.\n* Warn - Conditions that may or may not qualify as errors and should be logged.\n* Error - Any error which prevents the operation completing. These errors typically require user intervention to be recoverable.\n* Fatal - Any critical error that cannot be recovered and requires immediate attention.\n* Silent - A placeholder channel that is never emitted.\n\n### Filtering\n\nLog messages are emitted if the log channel is enabled in the current log filter.\n\nThe default log filter will emit messages for the `fatal`, `error`, `metrics`, `info` and `warn`, channels. The `data`, `debug` and `trace` channels will be hidden by default. However, you can change the channel filter via `addFilter` or `setFilter` at any time.\n\n```javascript\nlog.addFilter(['data', 'debug'])\n```\n\nThis will enable the output of log messages for the `data` and `debug` channels.\n\n\n### Contexts\n\nFor true observability of your apps, it is recommended that you log full information regarding request state in anticipation of future monitoring needs.\n\nAdditional context information can be supplied when logging via the second parameter.\n\n```javascript\nlog.info('Basic message', {\n    //  Extra context\n    event: lambda.event,\n    context: lambda.context,\n    requestId: apiGateway.requestId,\n})\n```\n\nThis per-API context is merged with the global logger context. When you create the logger, you can specify global context.\n\n```javascript\nconst log = new SenseLogs({params}, {\n    //  Global context properties\n    weather: 'sunny',\n    temp: 99.9,\n})\n```\n\nPer-API context takes precedence over the global context if both contexts define the same value.\n\nYou can extend or clear the global context at anytime via `addContext` and `clearContext`:\n\n```javascript\nlog.addContext({params})\nlog.clearContext()\n```\n\nSenseLogs accumlates all the context information into a single context that is passed to the log destinations for writing.\n\nWhen coupled with custom channels, you can add detailed log messages to your serverless app that are ready to be enabled when you need them. Such latent log messages do not incurr any significant runtime CPU or I/O overhead.\n\n\n### Child Instances\n\nIf you have modules or subsystems, it is often useful for them to derive their own child log instances which inherit context and channels from their parent instance. Then the child can modify the context and channels to suit.\n\n```javascript\nconst child = log.child({\n    module: 'authentication',\n})\n\nchild.info('Start request')\n```\n\nThis will log the given message with the child context and the context of all its parents.\n\nChild instances can be created to any desired depth. i.e. a child can be created from a child instance.\n\n\n### Correlation Trace IDs\n\nIf you are using AWS Lambda, SenseLogs supports the propagation of trace IDs by simply passing in the lambda `event` and `context` parameters. SenseLogs will extract the API Gateway requestId, Lambda requestId and X-Ray trace ID.\n\n```\nlog.addTraceIds(event, context)\n```\n\nSenseLogs will map these IDs to a uniform x-correlation-NAME SenseLogs context variables. The following variables are supported:\n\nx-correlation-api &mdash; API Gateway requestId\nx-correlation-lambda &mdash; Lambda requestId\nx-correlation-trace &mdash; X-Ray X-Amzn-Trace-Id header\nx-correlation-extended &mdash; AWS extended request ID\n\nSenseLogs will define a special variable 'x-correlation-id' that can be used as a stable request ID. It will be initialized to the value of the X-Correlation-ID header or if not defined, SenseLogs will use (in order) API Gateway request or X-Ray trace ID.\n\n### Dynamic Logging\n\nSenseLogs filtering can be dynamically controlled by calling `addFilter` or by setting environment variables for Lambda functions.\n\nSenseLogs keeps three log filter sets:\n\n* The default filter\n* The override filter\n* The sample filter\n\nThe default filter defines the base set of log channels that are enabled for output. The override set is added to the default set for a limited time duration. The sample set is added to the default set for a percentage of log requests.\n\nThe APIs to modifiy the filter sets are:\n\n* setFilter\n* setOverride\n* setSample\n\nThe environment variables to configure the filter sets are:\n\n* LOG_FILTER\n* LOG_OVERRIDE\n* LOG_SAMPLE\n\nIf you change these environment variables, the next time your Lambda function is invoked, it will be automatically loaded by AWS with the new environment variable values. In this manner, you can dynamically and immediately control your logging channels without modifying code or redeploying.\n\nThe [SenseDeep serverless studio](https://www.sensedeep.com) manages these filter settings and will update these environment variables on your Lambdas.\n\n\n#### LOG_FILTER\n\nThe LOG_FILTER is read by the SenseLogs constructor to invoke `setFilter` to define the default log filter. Set it to a comma separated list of log channels. For example:\n\n```shell\nLOG_FILTER=fatal,error,info\n```\n\n#### LOG_OVERRIDE\n\nThe LOG_OVERRIDE is read by SenseLogs to invoke `setOverride` to define an override log filter that will apply for a limited duration of time. Set it to a comma separated list of log channels that is prefixed by an expiry time as a Unix epoch (seconds since Jan 1 1970). For example:\n\n```shell\nLOG_OVERRIDE=1626409530045:data,trace\n```\n\n### LOG_SAMPLE\n\nThe LOG_SAMPLE is used to invoke `setSample` to define an additional log filter that will apply for percentage of requests. Set it to a comma separated list of log channels that is prefixed by a percentage. For example:\n\n```shell\nLOG_SAMPLE=1%:trace\n```\n\nThis will cause 1% of log requests to the given log channels to be logged. This is useful to ensure you have a complete trace of some requests at all times without needing to redeploy or reconfigure.\n\n\n### CloudWatch Metrics and EMF\n\nSenseLogs has integrated support to emit custom metrics to CloudWatch.\n\nAWS CloudWatch understands the [Embedded Metric Format](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Embedded_Metric_Format_Specification.html) (EMF) where you can easily emit custom metrics to CloudWatch.\n\nCloudWatch receives EMF metrics and dynamically creates and tracks metrics without prior configuration.\n\nEMF is one of the hidden gems in CloudWatch.\n\n```javascript\nlog.metrics('metrics', 'Acme Metrics', 'Acme/Rockets', {Launches: 1})\n```\n\nThe metrics API take the log channel as the first parameter. This is typically set to `metrics` but can be any channel.\nA custom CloudWatch metrics namespace as the next parameter and after that, the metric values and optionally metric dimensions.\n\n\n### Exceptions and Error Handling\n\nYou can provide an Error() object to SenseLogs as the message, context or context.err property. For example:\n\n```javascript\n//  As a message\nlog.error(new Error('Boom'))\n\n//  As a context\nlog.error('An error', new Error('Boom'))\n\ntry { throw new Error() }\ncatch (err) {\n    //  As context.err\n    log.error('Caught error', {err})\n}\n```\n\nWhen SenseLogs receives an exception Error object, it will capture the stack trace and include that in the logged JSON as a '@stack' property.\n\nYou can request a stack backtrace be included in any log message by setting the `@stack: true` in the context.\n\n```javascript\nlog.debug('Should never get here', {'@stack': true})\n```\n\n### Flagging Errors\n\nIf you are using an alerting platform like the [SenseDeep Serverless Studio](https://www.sensedeep.com/) to automatically detect your app errors, it can be helpful to add a searchable property for errors and other important application events. The flag option will nominate a property value that will be emitted in your log events for error channels.\n\nFor example:\n\n```javascript\nnew SenseLogs({flag: 'FLAG_ERROR'})\nlog.error('Boom')\n```\n\nThis will emit an 'FLAG_ERROR: true' property value for the `error` and `fatal` log message channels.\n\n```json\n{\n    \"message\": \"Boom\",\n    \"FLAG_ERROR\": true\n}\n```\n\nYour alerting platform can then easily trigger alerts for messages that include the property `FLAG_ERROR`.\n\nIf the flag option is set to an map of channels, then the nominated channels will be flagged with the associated value string. For example:\n\n```javavscript\nnew SenseLogs({flag: {warn: 'FLAG_WARN', error: 'FLAG_ERROR', custom: 'FLAG_CUSTOM'})\nlog.warn('Storm front coming')\n```\n\nThis will emit:\n\n```json\n{\n    \"message\": \"Storm front coming\",\n    \"FLAG_WARN\": true\n}\n```\n\n### Redacting Sensitive Information\n\nYou can modify log data to remove sensitive information before it is emitted by supplying your own redact function to the SenseLogs constructor.\n\n```javascript\nconst log = new SenseLogs({redact: (context) => {\n    if (context.password) {\n        context.password = '[REDACTED]'\n    }\n}})\n```\n\nIf you are using the [SenseDeep Serverless Developer Studio](https://www.sensedeep.com), you don't need to worry about redacting sensitive information as your log data never leaves your account.\n\nBut for all others, you can connect the redact function to any one of the NPM redaction modules. For example: [fast-redact](https://www.npmjs.com/package/fast-redact).\n\n\n### SenseLogs Class API\n\nThe SenseLogs class provides the public API for SenseLogs and public properties.\n\n### SenseLogs Constructor\n\n```javascript\nnew SenseLogs(options, context = {})\n```\n\nThe SenseLogs constructor takes an options parameter and an optional context property.\n\nThe `options` parameter is of type `object` with the following properties:\n\n| Property | Type | Description |\n| -------- | :--: | ----------- |\n| destination | `string\\|function` | Set to `json`, `console` or an instance of an object with a `write` function to be invoked as write(logger, context). Default to 'json'|\n| filter | `string\\|array` | Set to a comma separated list or array of log channels that are enabled. |\n| flag | `string\\|object` | Flag channel messages with a string for alert matching. If set to a string, error and fatal channel messages will get a property of that string name set to true. May be set to an object map of channel names and property values to set for those channel names. Default to null.|\n| format | `string\\|function` | Set to `json`, `human`, `tsv` or `keyvalue` for JSON, human-readable, tab-delimited or key-value formats. Set to a function for custom formats. Default to 'json'. |\n| name | `string` | Name for your app or service. The context.@module is set to this value by default. |\n| redact | `function` | Callback function invoked prior to passing the context data to the logger. Invoked as `callback(context)`|\n| timestamp | `boolean` | Set to true to add a context.timestamp to the log context message.|\n\nThe `context` property is a map of context information that is included in all log messages.\n\nFor example:\n\n```javascript\nconst log = new SenseLogs({\n    destination: 'console',\n    filter: 'fatal, error',\n    format: 'json',\n    name: 'MyApp',\n    redact: (context) => {\n        context.password = null\n        return context\n    },\n    timestamp: true,\n}, {context})\n```\n\n\n### Properties\n\nSenseLogs creates some reserved properties on the log message context. These properties are prefixed with `@` to avoid clashing with your properties.\n\n* @chan &mdash; Set to the log channel for the current log message (info, error, ...).\n* @exception &mdash; Set if an `Error` object is passed to SenseLogs.\n* @message &mdash; If a context.message is supplied in addition to the API message, the context message will be saved as `@message`.\n* @module &mdash; Set to the `name` given to the SenseLogs constructor or the `@module` context property on a child instance.\n* @stack &mdash; Set to a captured stack backtrace.\n\n#### Channel Methods\n\nThe standard channels and method signatures are:\n\n```typescript\n    data(message: string, context: {}): void;\n    debug(message: string, context: {}): void;\n    error(message: string, context: {}): void;\n    fatal(message: string, context: {}): void;\n    info(message: string, context: {}): void;\n    silent(message: string, context: {}): void;\n    trace(message: string, context: {}): void;\n    warn(message: string, context: {}): void;\n    emit(channel: string, message: string, context: {}): void;\n```\n\nThere is also an `assert` channel\n\n```typescript\nlog.assert(truthy: boolean, message: string, context: {}): void;\n```\n\nYou can use this as:\n\n```javascript\nlog.assert(someValue == 'good value')\nlog.assert(someValue == 'good value', 'Should never get here', {request})\n```\n\n### Methods\n\n#### addContext(contexts: object | array)\n\nBlend the given context properites or array of contexts into the log context.\n\n#### addDestination(dest, format: string)\n\nAdd the given destination function to the set of destinations. The destination is an object with a write method that will be invoked as:\n\n```javascript\ndest(logger: SenseLogs, context: object, message: string)\n```\n\nThe format may be set to 'json', 'human' or 'tsv' for JSON, human-readable or tab delimited output formats. When the destination function is invoked, the `message` argument will be formatted according to the specified format. Alternatively, the destination may choose to create its own message from the raw context.\n\n\n#### addFilter(filter: string | array)\n\nEnable the log channels described by the given filter in the current filter set. The current filter specifies the log channels that are enabled to emit log data.\n\nThe filter may be a comma separated string or an array of channels. Set `filter` to \"default\" to revert to the default filter set.\n\n\n#### child(context: {}): SenseLogs\n\nCreate a child log instance derived from the parent log. The child context has its own context inherited from the parent log instance.\n\nChildren and parent instances share a single, common filter of enabled log channels.\n\n```javascript\nconst child = log.child({brush: 'green'})\nchild.emit('color', 'Favorite color')\n```\n\n#### clearContext(): void\n\nThis will clear the context for the log instance.\n\n#### enabled(chan: string): boolean\n\nReturn true if the channel is enabled for output.\n\n\n#### getFilter(): []\n\nReturn an array of the current filter channels.\n\n\n#### getOverride(): {}\n\nReturn a map containing the current override definition.\n\n#### getSample(): {}\n\nReturn a map containing the current sample definition.\n\n\n#### emit(channel: string, message: string, context: {})\n\nConvenience method that takes the channel as the first argument.\n\n\n#### metrics(channel: string, message: string, namespace: string, values: {}, dimensions = [], units = null, properties = {})\n\nEmit metrics in [CloudWatch EMF](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Embedded_Metric_Format_Specification.html) format.\n\nThis is an easy way to define custom CloudWatch metrics from your log data.\n\nYou can use any channel to emit metrics and the `metrics` channel is an ideal choice. By using channel filters, you can dynamically control which metrics are emitted (See [Dynamic Logging](#dynamic-logging).\n\nThe log format for metric messages will always be unformatted which is required by the EMF specification.\n\nThe namespace is your unique custom namespace and usually consists of your name with service name. For example: 'MyCorp/App'.\n\nThe `values` is a map of metric values to submit. Dimensions are the optional CloudWatch Metrics array of dimensions. Units are the optional map of metric unit types. The `units` map may contain a `default` property that contains the default unit type to use.\n\nThe `properties` are additional properties that are emitted, but not as metrics. They can be searched using SenseDeep or insights. These are useful for high-cardinality items that if emitted as metrics would incur significant CloudWatch metric costs.\n\n#### setFilter(filter: string | array)\n\nSet the filter channels described by the given filter parameter. The current filter set specifies the channels that enabled to emit log data.\n\nThe filter may be a comma separated string or an array of channels. If filter is null, this call will remove all filter channels. If filter is set to 'default', the filter channels will be restored to the default defined via the constructor.\n\n\n#### setOverride(filter: string | array, expire: number)\n\nSet the override filter channels described by the given filter. The override filter will augment the default filter with additional channels until the `expire` time has been reached. When override channels are defined, the enabled channels are those defined by the union of the filter channels and the override channels.\n\nThe filter may be a comma separated string or an array of channels. If the filter is null, this call will clear all overrides.\n\nExpire is a Unix epoch date (seconds since Jan 1 1970).\n\n\n#### setSample(filter: string | array, percentage: number)\n\nSet the sampling filter channels described by the given filter. The filter may be a comma separated string or an array of channels.\n\nThe sample filter will augment the filter and override filter for the given percentage of requests. Set percentage to a positive percentage (may be fractional). When sample channels are defined, the enabled channels are those defined by the union of the filter channels, the override channels and the sample channels.\n\nIf the filter is null, this call will remove all samples.\n\n\n### References\n\n- [SenseLogs Tests](https://github.com/sensedeep/senselogs/tree/main/test)\n- [SenseDeep Blog](https://www.sensedeep.com/blog/)\n- [SenseDeep Web Site](https://www.sensedeep.com/)\n- [SenseDeep Developer Studio](https://app.sensedeep.com/)\n\n### Participate\n\nAll feedback, discussion, contributions and bug reports are very welcome.\n\n* [discussions](https://github.com/sensedeep/senselogs/discussions)\n* [issues](https://github.com/sensedeep/senselogs/issues)\n\n### Contact\n\nYou can contact me (Michael O'Brien) on Twitter at: [@mobstream](https://twitter.com/mobstream), or [email](mob-pub-18@sensedeep.com) and ready my [Blog](https://www.sensedeep.com/blog).\n\n### SenseDeep\n\nPlease try the best way to create serverless apps using the Serverless Developer Studio [SenseDeep](https://www.sensedeep.com/). It is integrated with SenseLogs and will control your filter channels for Lambdas without needing to redeploy.\n","readmeFilename":"README.md"}