{"_id":"anylogger","_rev":"43-edce1907bad6e0df77b6f5f65040f352","name":"anylogger","description":"Get a logger. Any logger.","dist-tags":{"latest":"1.0.11","beta":"1.1.0-beta.5"},"versions":{"0.1.0":{"name":"anylogger","version":"0.1.0","description":"Get a logger. Any logger.","main":"index.js","scripts":{"test":"echo \"No test specified yet\" && exit 0"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"gitHead":"98a7fd1ec6b60a4f3adfc6f6e5476f21c4ce0ca9","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@0.1.0","_shasum":"5f8f26febc44048c54b2ca178389095f59213c58","_from":".","_npmVersion":"3.10.7","_nodeVersion":"6.3.1","_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"dist":{"shasum":"5f8f26febc44048c54b2ca178389095f59213c58","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-0.1.0.tgz","integrity":"sha512-6395ZsuDwnsuwUmhV/4W4lic7JSOPSqUfsGqfsOFC+hb8SWqv7eBbqwPxsVPJF1m2NgRxfDU/QJZMt//oh57Ew==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAajMDKDNsdAKVMYRZChRN/gbn+1JeEqZ6lHOn1g4OR5AiEAi+0y7yjZuLHnGk9SLcPscW6klF7375LmAkggF+pA52c="}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/anylogger-0.1.0.tgz_1478298201713_0.603692970238626"},"directories":{}},"0.2.0":{"name":"anylogger","version":"0.2.0","description":"Get a logger. Any logger.","main":"any.js","scripts":{"test":"mocha any.spec.js"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","mocha":"^5.2.0","sinon":"^7.2.3"},"keywords":["anylogger","tiny","logging","logger","console","1kB"],"gitHead":"42e3cf8ad37581d88ee28179baab21ebc185e467","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@0.2.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"dist":{"integrity":"sha512-JdzKUHhAo5OGuT+Yb7+/J2zevrVbEW3roQz5Pu1RZ9OBEgqQ2/fiSAX+bDiKmbDD1QjOw3645dfN9zmzsD1lDA==","shasum":"258e595882e7237e8aa575dbe8149d8f7c4059f3","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-0.2.0.tgz","fileCount":6,"unpackedSize":22718,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcWgN1CRA9TVsSAnZWagAA8FoP/3No62tecuzl8z2lqfMY\nuy+6Lt1rTP1ut+r1Hu4Xm2XLXWdcfZp900hxXLUcVogtfrlwS2rN3B8W0IJ6\n0aisKkFn6mYXmiMpz6OoQAikbcDx03V0WBGhdpDtolEZs3hbUyzZmizy8mdk\nOcQ4ViazUHA0QIuPGIAAFhDiZwBOo4q+G5bohYyPqsNVLefOEiE5XkGu4KEL\nRtqC0S4Wg7Zj7hTJB0POH3KamMfOZjU72BEpR0b2Zlmrel8YuPpCl15zz70X\n4XnWEi8cZ+mVqcGTNSwqMqkj0neGu6FvczmIj8jMPIUjRSrybE2d8iMh2hRf\nQSYn9gQntSAEbTPKfLpuSJtCFs7Qd0eVUFoGDLv7EFI5RIaw8T9xwtS3p7+X\nasDZF+iiId6NWQhNIww6kn93EP64TctnZ46bonIB+aqq/T3a4RNJIHrK8ydA\nVNQF+2tXuO0tHWmdYt2DVa46bKdbS41zKTg7bmXSXVamACKMsQ8uXJeExdHS\nT5NGOCZmG7HAjjcVQ/isfXQQMQNlnINMKUiqmWbeCmDw3kYJTTcQoh8JUK7d\n7s3UCTZGNZ8P7fYvoRZNRyFLRuJL6e7Y5xSCwbLJp3ZTpjZss4e6jOJyfw5N\new3y05iqD/daII3ZnaGdIi1wsvbGF2S4wnij3navA/xqpFB/OPWlc9nWpYtO\ncdTQ\r\n=xxYO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID2wLYXoWybNfi1ugvHSQHX1/+dQvwj1Bs3kCvo+ATl5AiEA9q2VPrMHrB/0HlYOIGW5PQ5Ft/NSEUJ0ZHH9C5IvTcc="}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_0.2.0_1549402996671_0.8299181578110855"},"_hasShrinkwrap":false},"0.3.0":{"name":"anylogger","version":"0.3.0","description":"Get a logger. Any logger.","main":"any.js","scripts":{"build":"node build.js","prepublish":"npm run test && npm run build","test":"mocha any.spec.js"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","mocha":"^5.2.0","sinon":"^7.2.3","uglify-js":"^3.4.9"},"keywords":["anylogger","tiny","logging","logger","console","1kB"],"gitHead":"210493e9c9e306718260898cc55444eea0fdc1d7","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@0.3.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"dist":{"integrity":"sha512-l5zyy6a/StMQQINjEeG1kzqgF/3TowjiAmY5Cv4Kvu/9PwU1qascLLxgRKuGxEYRBkha9uzs4qSJqqTg0L2o9g==","shasum":"f48f6d59cddf49487412930f7064cb67876e8fef","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-0.3.0.tgz","fileCount":8,"unpackedSize":25315,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcWhxRCRA9TVsSAnZWagAAQcYP/RHrmaJkz1jrSgxkPCKY\nj2w8Pl9KRri/IVD3Dm1VUm9losXWyV+FQjRiN0na64SI8qP9pupAKo4d4Aaf\nkNkRxgEKph6i0Ui5va9gkklxYZEyroT3jUihehqBvpMqUp1vyBK8VGezyIoc\ni16/nqf0JHWyQHW3gSFpono+CsK4hcCGei1jZrSqR0yebjzI/KwV1QT1dkZu\nTneETfu76DJJcDgeADnenU1pikFw+w8MDgpWNlFgr0Cso3q96/CBOuz1scMI\ngmZ4nwVQldNW7opZp8NEzrCnjNEkgwPUdzdfKkdxiGHaj5jvvUYN+T+E4T6L\niSsapFl2Q5k7yG+xXTtw//gpXvYuPC7eC2WAbMvx91pE6E0LZlAFPPIbchL6\nEt0GJMhEwVkMut93NKpmREA71vusnKq5ef6AvTAfDJkfCDl7d19YJhpWNMHx\nHPyeztcJ3n6sE7IkBBmbcJJ5PknK3kkqoqReO/Zl4lvZwaFmq/yNFbGXAAzf\nDx/C7xagvUvaEEaoXck0qLGu6wAwP4KSt5LRS2N6psCnM0wtafmn7vjjRtQX\nELnQqworCPEeVTFqhV9l5QDB+ITL3RyerJkhz/pyM/aRvfDkWb8sOR5CfyRn\nT7zyzCjEZz6Ozvc17aRwmD5HwJoCSei0I/5d0xChHlNLSHl7YsXpqczDC6Wt\nlAGT\r\n=4Iwy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCYKh3iIe5HbkMsofubIUdoCfaBn2O03CMZxRgusablsAIhAL8WBM0DQTQuNxxcLMFW9FsZjT2d93q3DONZCJfIW67J"}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_0.3.0_1549409361152_0.7145632684101417"},"_hasShrinkwrap":false},"0.3.1":{"name":"anylogger","version":"0.3.1","description":"Get a logger. Any logger.","main":"any.js","scripts":{"build":"node build.js","prepare":"npm run test && npm run build","test":"mocha any.spec.js"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","mocha":"^5.2.0","sinon":"^7.2.3","uglify-js":"^3.4.9"},"keywords":["anylogger","tiny","logging","logger","console","1kB"],"gitHead":"edfc64692e9a0307fa4e111cf08e26bf49abee5a","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@0.3.1","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"dist":{"integrity":"sha512-fx1/IH5foFHevOvsWdSNZa0pqPCHSGs/r5n+6r813DMmDfnwZcQPV3ck5yjDRijkuZFWS5iny7twpZlfW8Mn/g==","shasum":"17f55a34d9750f827e6712ff12d3e30c4b07730e","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-0.3.1.tgz","fileCount":8,"unpackedSize":25045,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcWiK+CRA9TVsSAnZWagAAwocP/0KnoCO7GKPTi5vBPGly\nnM6ofXpfEiZppacDxwGvcV0sw0BuWeeL8//Omft5vufrnVPo9JBDwZQb3kC7\nRWA67W9D5TOfAl92LdkYyxmTzB7zuT598YpOMEuWxMOccTyIOMWtjGEnEdNd\nL8O9oeS760nNTU22W3RIoFpCcZdwU4NqY4HLttiy5lW2Tl8JfYWhtBMcunBw\nJhUCir/UVQCzd8wnvZPdx/9lEAreyeXcik031+QzzroNhcNvKgXxVdFswkCc\nS8Nju7lS+1JmWRQda0pokIvLGmvIeQSWrxoLrWx2SiwUXQMtxcfYJmRq29it\nM3VNJ624K2wJaLEcVHPOotf+N1e0riD4a7XDDeKlGFrNSiMPo4alOon2xCQX\naimvvLzKvqzhaml1p1oGtxuTjTaeMg5e4tdpKTa3bwgHKbN1Hj6vwowbFNkY\noDspjtFWQ4sbbJWmG3WXwblE3NL1n/chXBXP/M1vDPLto/LNCaHvK/9BtYmx\nnd2b6lyCTVP+VPRIQH3RKSqtHh2OcvhAxHIa8d/HvWML5vuklJm0Hi2Mahg6\noRGgsIQkbDvDBcslM4LqXZk3dDDizaCQj7pSk0yKH2rtyZ7HndzhUJipWBhy\nbq3t5J43CjnTKO/ruQs4eA1IRox+bnUI8m6K3kqfqTqdksKAaukTOqHR1UWG\n9X3N\r\n=0JpP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8cm1iVNoi+bie+IR7JPq/cpYlQqLAAVjiUFvOIBAQeAIgCmU929I4shHIfio6MF6Ep5Whd8m4X0e0ptcsO/TowHI="}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_0.3.1_1549411006190_0.5908003833068698"},"_hasShrinkwrap":false},"0.4.0":{"name":"anylogger","version":"0.4.0","description":"Get a logger. Any logger.","main":"any.js","scripts":{"build":"node build.js","prepare":"npm run test && npm run build","test":"mocha any.spec.js"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","mocha":"^5.2.0","sinon":"^7.2.3","uglify-js":"^3.4.9"},"keywords":["anylogger","tiny","logging","logger","console","1kB"],"gitHead":"4f4a8966e0f06f8c34dfa51b361a1f668e7628a3","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@0.4.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"dist":{"integrity":"sha512-XqYUnp7yI1fEBXwk7R9ZBARuxIbXC4wuLL7K1SZzoiE7zD4/BiOVtR3kum6jXboIfXTDSjiIqXyau19q78aqHg==","shasum":"6e3cddb5523f2411e74fe64ecb4c1b73e03a8ef3","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-0.4.0.tgz","fileCount":5,"unpackedSize":19569,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcWiXSCRA9TVsSAnZWagAA8Z8P/2TQz6w+0l+oxJt0EFFP\nz6qd7mai4XpVnbrrYg99MWvidbyPLP1zC7IrECxNJYnCdNYaywRtWmWLM4bb\nNi0HmoVt777h9dUZdMcOQ7afUfwJCGksM0cLUgXm4DV+gw+J04dYGmsxlpgV\nwu9cLmmeTHzh0HqhGfhVwrqg6SiX4NB+maC53iySM13g7a9ddDdfL8bCf7yo\nyEWOg/fw3ipo2IlF3Qfzkr/7F6kXODmm6vGlnA9vQVlXaZDqxBhVTglTWEJq\nUk+oGf86XeDcmPwJwRYuQ4GUxenUE0ytTjzTI9JmQLcsCVjwvNreufsZm32w\nyMaVCxG7lX/h2bwer+JSuN8yMrEW9GGouG37cKXa2ieIq4Ft4QCxf46o0til\nq/Hc3AEftAaoQ2ZiVuOnuIi7ZZNfP9qtnE3Uk1SIFWevEdOxr/xgVPRhn6ML\ncEjTVW5mA0G3cAYTEAvXUxb4X6AEAZwDVS+ONwUfkL5tTX2lhv1MOkvwaOF5\nhQMa/rFGJ/8ev+dOiIVqi3iz0EQYmv8O01RqmShMvIwhj+HESr2GdaiX1Apz\nMCUAYNCy0eF98e9vNWKYFtCimVhtRldo34skhB9+Ckht+sQBYXdlJimVk8y7\nh/W6LsRMwHkJn6dhZ+sbPo5Zg7RuM5sUqCinyDxd3P0YLQPIFlotD5ES7LTB\nWNCj\r\n=YwMU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDYT5lQm3TzPhWpArEVsiOoL4NfIgdeA7JpsK9Dd00tDwIhALCKD27axcODyc8OZmxkxQmvBJ+aaVNDAyYEgAat/oRv"}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_0.4.0_1549411794213_0.46383222003701374"},"_hasShrinkwrap":false},"0.5.0":{"name":"anylogger","version":"0.5.0","description":"Get a logger. Any logger.","main":"any.js","scripts":{"build":"node build.js","prepare":"npm run test && npm run build","test":"mocha any.spec.js"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","mocha":"^5.2.0","sinon":"^7.2.3","uglify-js":"^3.4.9"},"keywords":["anylogger","tiny","logging","logger","console","1kB"],"gitHead":"f21ebf34f707e2ab4380f0ec046857e4dd4d9380","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@0.5.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"dist":{"integrity":"sha512-2jnQ0MwgYckCSt1XGMgGX+gzIYnqim91ugucXM9KGO21VV5GgB50tgvZ5nRiGbu/xrvHI22ksALo+qjL35l0Xg==","shasum":"fc91ccbcec5a973878c5d1413099334b9f182979","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-0.5.0.tgz","fileCount":5,"unpackedSize":19643,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcWi5qCRA9TVsSAnZWagAArgUP+gOgWbAZTU2MFQHY5th8\nIdbPUUtjqYk2wMU+MhJbiiEdqSEyF67ViROfT2lnRxYqlxatwPYtssQF0/a4\nnxJ2/nEBGKo1V66205uCMmP4UHlAmG5Mhidy2+4JwSy+ASnm2XHqyPrvOsdM\n/9kaWksBUzAo23tMGP/FhBqmtEmRaRx57T9SC57R35CxZJd9XEIO8rgh3e7/\n4GlIX/kwni7QPXTxIlRKGy2W2CXxEeXsSEfNe+Qp0biscxoSnPzvT8Rlbj4F\nQra6Vyvry+JqvNfO7pOvWtdIg9nrsqUZKiyFZcSlPzvhhfc1P/GiqlffN3BT\nV+Wdg6TrdzeZWZOfjD2ca5peOcs5KI7KKZ8DZSEz/KlX3c10aFXaLE4DfkmP\n9W+escirqBmirB0wHAB0AiMb0xWthjRz3RKvDdd/14Zt1COWQQo/8mCw35bG\ncAmcLDeQvj32szQQKE0Uy71H3O1yQPNDtkT8s/9e/zoblTHaG7tjNZGizH5u\nVYoT5e6rfmuhzGWMqxwJtYvBoeNYTo0MHlhryRAu/2XxqqoOYZEh488c6wlT\nVUPhhWr8jY0NIq4/iCwCsYUGA1SuTYivh7eyLBUQDTzXx6oLQGl6uUK6icMQ\nLAlnYtbNIuRcluG7P7SKcg1kxzKuVearvEVJdeZ7IAWJIqHb/KLp9PoO9Sol\nwTpH\r\n=W5L4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCPxYW74IoQ5Xq0oX8dA0KTcPrpBKVEO74uy5T6m8HOaAIhAKb9zph4sFQLViLRCyIN3aPGWVElX2nvjXh2OLYS2VGs"}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_0.5.0_1549413993037_0.641924623608968"},"_hasShrinkwrap":false},"0.6.0":{"name":"anylogger","version":"0.6.0","description":"Get a logger. Any logger.","main":"any.js","scripts":{"build":"node build.js","prepare":"npm run test && npm run build","test":"mocha any.spec.js"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","mocha":"^5.2.0","sinon":"^7.2.3","uglify-js":"^3.4.9"},"keywords":["anylogger","tiny","logging","logger","console","1kB"],"gitHead":"f21ebf34f707e2ab4380f0ec046857e4dd4d9380","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@0.6.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"dist":{"integrity":"sha512-7frawSWWxgTt7FmpsaT+KtOlkyMjyR46pUt3rDdiHWN19h2gtHiaDBnPPEF2mqTZQo9cJB/Ji52fIhQmvMaJrg==","shasum":"c2f881a30fcdd1217a3f1e245db9de9c6d51bf8d","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-0.6.0.tgz","fileCount":5,"unpackedSize":23685,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcY1hoCRA9TVsSAnZWagAAwv0P/0ws4YyCp1Ff8jMllglH\nM3drPRuPwrJt+e2OKK5QVqumFoLDurRMxb723ySV33u3ovI2Vvwk37t2aHHZ\nS9PxT5d+Xk7x+qok4FGxDdloLbDnLcBRgc/qSDhZboOsS1orkwlhOcUslXcu\nIJ1lrrXsLmVDihgtQZEJVPSerOSFKOOWjqM6t2vwwSsacBPp+9dSpqYktpwZ\nfoiCzGzp2yqmSn5EiAoNwgMvMmSHb0kyhYVADtoODU7qnwtDNJRRvRAOx7GK\nEDDfCMhMrZ7cRjbBf/ZeKZiRnj4JYYcixhNIlWhmd4Xqrnp66JH9NzESNhnV\nYZxmKvB9Cqeb1iM/C6cOe1S75P4nC2Th9l8xdAgMUDiqFcTsUp46INsNgnTy\nb5F6D3scJ/iFoeXGBlIX842d/p9wWqugAanC60IkygISkXxu8AvsoiNzWaco\nhua+bXujOA9VjxKk2yrYB5Ry1cmyz/VTwQXMgjl9NW71tictXC1hf4AjMie1\naAZe/AMbjCmCcLL93pi5SDxgAfkcz6wh4LzpENoMSVJq+sdoD6H3hg1EBevU\nKft6Ydi3caB0njjvFF10hbd5TtjHcu1A5poPrMISikjA9vx/bk2VHESKJrSa\nno3F1WLEEn4+urf72CKv/NC89GBxDAo4XSEPsayy1X1JAh4RbV8hSpArCgIF\nfPdw\r\n=KCW3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFTN2zLgaAg5SfcTWY09s5oVDgK2eI+qIxM0cOa3eTRTAiEAqneULsN0wfWA8WsprbomS9LlyRGkGsOSU/W/slDv2WY="}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_0.6.0_1550014567361_0.5166427215712761"},"_hasShrinkwrap":false},"0.7.0":{"name":"anylogger","version":"0.7.0","description":"Get a logger. Any logger.","main":"any.js","scripts":{"build":"node build.js","prepare":"npm run test && npm run build","test":"mocha any.spec.js"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","gzip-size":"^5.0.0","mocha":"^5.2.0","sinon":"^7.2.3","uglify-js":"^3.4.9"},"keywords":["anylogger","tiny","logging","logger","console","1kB"],"gitHead":"41c665f54c6a881068c2feea902d6af670392ad7","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@0.7.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"dist":{"integrity":"sha512-2tNbdf0YjvNuDw49n+QKImPLF/njG9c77s0L7sVk3hNtviEEGC7xLSpAz62ja18pvmCsRROtnMUW8eRxI/o2sA==","shasum":"2245292a5c1851b4749aa7d6037de76418cb2b4f","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-0.7.0.tgz","fileCount":5,"unpackedSize":24005,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcdAY7CRA9TVsSAnZWagAAx9gP/Rng6qbMTpiBiyg2fcik\n8kupLGDCA9PZrhcOLy2Uf2PFWqErRQGmkFvcABaDr9KUYev67v9GKylfSRUz\nC8wbd02mTS0S6UN8SvpUKlsMQ358aKO9B1lMQnBl3RdIswHHOVmfJgW78rQK\nb/WFolo20YV/zWbmcL+FE6TggCMbYULY+3s4HtqIBH1nWe7RWEvhgkazHczx\n+ZojnWoPKBmmN3eFcXJJ/ztmlehj5WzcHMYLHZYnbo1jai1926+RDHN4Ymli\nrIPvZkXqW6x3nXSLs6aNUAF23plekJ4MDUfVqZzdDPZxvs9sIEDv0g4Uc1fH\n1610c+FogDg2y5ngVTpGF6eTyacze/zPJMitpvbobvq4L77zkHfj+RNuYfSi\n8ZDRCaLR1u05G4O2uL+RFWfedSDqMjqdtrcLH/VloFB6yO1gPsjuP4KfozvO\nPf3yVP0qxRLfRJ6naJlQMqDbcFlu8Y5L4U72C7XABc6DN1IBeVPJ+5J9UYgt\ntEcO7s42s3VQVXbfiioqLiFUbxJ+Zm5OX671aWAdKZsZLev5b9PPmj936iXM\nYz2opN4wVllQvFH7khTBEKMT+JFzlr2gWIJ0LaOqPenELbu8sza0QbK/ktau\nhG21TNgYaFYgtkJzDbTaHtvS0APXIqNCaMPtISRp7F9YuDGwusf2wxiuo4q/\n09Vr\r\n=7yYu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG3cCM/RUXewlMHlelrdqz0HAhj22UEPGyQJurSIfQdpAiAcL/16Y7bLs7jXcqsi+O9iwlWeinh2Xo8+Tl9BMdArIA=="}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_0.7.0_1551107635166_0.26804522240606876"},"_hasShrinkwrap":false},"0.8.0":{"name":"anylogger","version":"0.8.0","description":"Get a logger. Any logger.","main":"anylogger.js","scripts":{"build":"node build.js","prepare":"npm run test && npm run build","test":"mocha anylogger.spec.js"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","gzip-size":"^5.0.0","mocha":"^5.2.0","sinon":"^7.2.3","uglify-js":"^3.4.9"},"keywords":["anylogger","microscopically small","tiny","logging","logger","console","1kB","logging facade"],"gitHead":"07798d8909c617e4b4ba60f7ecfe60e5fa7b09f5","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@0.8.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"dist":{"integrity":"sha512-0ztgXvYWN7Cs6DqpKNLcj4CTZ/w2Qh7TzATDp4KEi1EVL6SWBLcQi45Dcauep2owtbaTta4Q1rV+Fbg/q/y/qQ==","shasum":"70734b542427600aed4a6c024ca35debb6060b10","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-0.8.0.tgz","fileCount":6,"unpackedSize":29505,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcd9C4CRA9TVsSAnZWagAAaIsP/jZMYurrP1OOzWyrSF8q\nFI8rkic18IeaafYzj/GRzTyV2/Fuf/Q4qJGBTthT6v6xZqkKxOrCe9eqC5O0\nXNoMJtj4YweJ1ktY3Ym/+otpmnX+959iVPXkOpDVsNwVSi7tMCLz7jrkhv8J\nN2gjIVTP0OSTv+2q7ly1mkSE4tTf63lCCEuA4nkMcPaoS0uKRJTW4HbSd7JW\n/Aeml9qXqhjGQ+4I20zmhAAo/jU2/4qSbhEHeGF1W25PvhkRWhhg7e3Z8rTa\nbhuQQpYDYcsD8GnQKvcMBbdT8cyycwN812L3xaMXOZwcG1kTCCy7+arAk13d\nejPdyxyK7VfMSCTzMNu4yToPSmdISsDQ1FRN4T91ZUdDMFJ3sHQTQvPUbtmO\npVdckRLMAbBqM4B+eTCfeQzfyUPBJQL5Hp6UcOZf3LkAeiCqxYhNzMXmoDCV\n5LTvdrpI9I6dj4bNsqh0iBHK260L4xkE5t85mYpIUdRe0+Q12c3KjDVMveJc\ny2xEAX9Gst1uwz7mYOQELcGHJ9oguHgmBiEHas+zu8KEB+TtgH09YpXOVJO7\nYpP2Xb24j5P4ftmhmFcRtWvigdQh/K5fdj+5VkuVa4byOk7XdFLp8fasmPkV\niwtWGHGoc0Wpt9dh5ydf3xATIlMNXFRJvcWMHVN32MUJMKNqxZ0z0bSLZBW3\nbqyv\r\n=v1+Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD010jy9WnanIaVxA8XNyP3gjfwk5DK2SPSQbAS4X9KtwIgWGBWAfjGiB4LaFTNhyQasvsMM/fnHCYK2nb14WttE6o="}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_0.8.0_1551356087350_0.31476538194695314"},"_hasShrinkwrap":false},"0.9.0":{"name":"anylogger","version":"0.9.0","description":"Get a logger. Any logger.","main":"anylogger.js","scripts":{"build":"node build.js","test":"mocha anylogger.spec.js","prepare":"npm run test && npm run build"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","gzip-size":"^5.0.0","mocha":"^5.2.0","sinon":"^7.2.3","uglify-js":"^3.4.9"},"keywords":["anylogger","microscopically small","tiny","logging","logger","console","1kB","logging facade"],"gitHead":"33ceb4c6434026c0df660584bc08ecb225d80505","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@0.9.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"dist":{"integrity":"sha512-2YkS1ycYzA2A8oY6VwQXchSLNDcP1Tc2QDo8yCzWxr8RI14w3c9l9RqMkhQI4LplQT6aMkZAHdTZgffvfo5TpA==","shasum":"12eec83e75e1bedf6ae67ecde3a376d5f46e43a5","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-0.9.0.tgz","fileCount":6,"unpackedSize":29671,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJchPGzCRA9TVsSAnZWagAAcgMP/2MBzeUKyrcpI1MLg0T9\njHy7860r5mwlc1utOPz1Wcg1+ICuZ7J27xSzwJ+o1gTw2ppPmBo4U8aL0Aj3\n+ClKCSY/+cU34X8WeB0ccwWNTz4Dk7r+0TAQaISRve/LzNj+lJEN0+jbEfWs\nexoZqTa7sS/jGd1oQJx1QvW+SsI8F+Lv8wH8xWmUHx/29P+tH7JTIKDdwus+\n19D839qRA0JLyXnmh1Q1NHWFJSfYL63OlYSbUpKcv4iqTFIWFgbhT0GtFLDF\nodf5m2VPrNm2/97hIeFQ0HGn3XZHHIoNXCWTPViufY3O46VyraMEkSSM2NdT\njyKKue7yVzE+A79lODPiQ93syLRyj7FWBkJ0btHpK8pcGy0szmg6uhScaLKr\nsd8oM2j7z83NT+Ewp91yq77fL+byoLZ5kwnJlbxptpSIQIf6hYDAEkRH73sr\n0CjRkjqYf03mFBTrKR/AAx0sbcGfctTUdNOubOLttfklgHfy5jf6CHqN+zr9\nhQDWlJztdPtHH63rMefFL0cjGMQ/gD9iZihbZHa6mlvbdibXwRQ7XN9Ps1v5\nqSkTPuJDJMPxHr+68ys4V49QbOxIQzeC+KJ+F1gGUBCqy+YuL9YIloQZ0x7u\nX61Fug5tJ9DuSe9waE3NdV/8WUZyUgtPTW7jMfBkfHWVT5boGKb9vk+N1uqw\nUfwC\r\n=l7sj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9bDzPmSGXIurKbX3aoQOztscIH3bfSb4VS2ok/d4G4gIgUiesrcn9awc6aq1DMTmt1wsbhBFc5+BbDFCyDcn44Ns="}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_0.9.0_1552216498710_0.3281623039885946"},"_hasShrinkwrap":false},"0.10.0":{"name":"anylogger","version":"0.10.0","description":"Get a logger. Any logger.","main":"anylogger.js","scripts":{"build":"node build.js","test":"mocha anylogger.spec.js","prepare":"npm run test && npm run build"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","gzip-size":"^5.0.0","mocha":"^5.2.0","sinon":"^7.2.3","uglify-js":"^3.4.9"},"keywords":["anylogger","microscopically small","tiny","logging","logger","console","1kB","logging facade"],"gitHead":"7e488a747e235e6c292ebfee7d0a121ba9f94a06","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@0.10.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"dist":{"integrity":"sha512-AGZeR3L3o6i3Z7sZZ5I9uN0ibM1z1N3D/pBNkLWpc1sewo/QmZ3E9Ju1Fhbsb813TgQVH7WBB9p2a/+W2DKj2Q==","shasum":"373a2b2e2fe891a48b229030f765cbd42d36f2f5","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-0.10.0.tgz","fileCount":6,"unpackedSize":29779,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc7+daCRA9TVsSAnZWagAAMEIP/Rh4bq5I/HF+iytzBPOz\nf1tSK8+2FBxznEH/0UwZPuuVE4oVTZUnMf+fxgPZU4+p3lqXCo4ec9AhV/iU\nu+zHv+ubjwEOBjhwVwk12ql4BFG71N+eQnLR1x9tWiYghoTw1xruzBv5hotQ\n+0WWbuFuf/q9PbPBm4b9FAsdXj9HbS49bzN8MxhvCaSQapU1o+jtABm4QW/4\nV401yNo2UogsiDCOZHbHOytmRfwjN7Un7aSYUE+u7GqblGgUdLB3YA1FKcDn\nPN0rL1gfKioxvhpEyBzvFpDTCo8BjVHx5KWaW7l3jp2WKJQPtPfnyyacvZCO\n/scnF2a3spSwAzXtkKOyGWRjD+tjzN4/U/5gOFo94QfH4xJtU9QgPi8F1fuV\nYlnsGaDRGMA4ppH/aou0nUnuawgKcYkYhbbnOW2ePYMLqzjlAVCO2wUluebK\nRdP/C8Swm48Xa8cmrMf0RgCJgewDY9PuyDq8qudsGhoMk2z+aM+z21LsgRob\ng4/sc9/8kZGgzJ7lvopc4xxFszCWarM+xNSIG3YFd029Zx10pFuMZba/oqOn\nvSI08w8OdOJ4MEbkL7RqOKag+Pv5BF09JMzwmtLBJ0yPg+Anfo3ukO4Regfd\nl+0ryykA/3yT2X2faBs5bu26bxJcXncT8JO9L+9Bi+Qbi9GBhk+bUkQ4TZV+\nbKnN\r\n=/G3e\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC29YMEBYbJVAX2mdz8kkTXsSgjXqM1IW2NVwVdcyAFCwIhAOTQPN5zj0CHf3o14u4Di93n+Tpg0s0r6+v+uZQGKeho"}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_0.10.0_1559226201985_0.8599083110172048"},"_hasShrinkwrap":false},"0.11.0":{"name":"anylogger","version":"0.11.0","description":"Get a logger. Any logger.","main":"anylogger.js","scripts":{"build":"node build.js","test":"mocha anylogger.spec.js","prepare":"npm run test && npm run build"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","gzip-size":"^5.1.1","mocha":"^6.1.4","sinon":"^7.3.2","uglify-js":"^3.6.0"},"keywords":["anylogger","anylogger-debug","anylogger-loglevel","anylogger-tutorial","microscopically small","tiny","logging","logger","console","1kB","logging facade"],"gitHead":"137cca7d243f946cdaa139d30d18fbafa248af96","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@0.11.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"dist":{"integrity":"sha512-jbkao5EtDyEpHRtUDEH27bG/69tOGATRpss8VQvaRYuEB99kmh3rrzKhzp4aKhqDuVzy3wSOKgZvUSPyYbOsYQ==","shasum":"b604af274b4baa803e8162551f4d5c8ae55ea32d","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-0.11.0.tgz","fileCount":6,"unpackedSize":29857,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc8CCmCRA9TVsSAnZWagAAMFsP/1jXj+COqbMM9CSfpvbo\nmeq5f2pFHGzEIwbb/tUzdfTb4IpInLVOiwlG0TMGFBLKEd3T+AXKpYHfVFDa\nVWi1v/0+AvwPMWHZiWkylKMkL5vstNlNQSrdI0/Fj3aOnI1IYOGKzFG/Yq23\nK3oFz5IhtqI7UohlihwIQ4b6rHfRg6ZLAHna7QNijynZ26zv4SsqHgkbIC8q\noTlxBYVsunc4s45dYzr3wC+yAJurt6zqu3RzVc9zqGtFog2QO392006epf+t\nbVAx0zOGjAOycxV2btRDWTGEq7BxByhrbbR3Lttxrn3hYhVjE93POnVHjcuq\n6cN+x0iOVeAlaAvFkodizKu+2xbLPdaK9m5nUObHF6Sh5lckHXDVVkSXbEx3\nFABfgucq45M4xgMOxyzHEam4A/Wt9I1kfxPZbdsEx9MGhUPohEexuBq9orjg\nUG0pv6DeRdS6iSTrFW7BwwdcS4qk+s1XQENbpKqsDD4vH+JNPBjqOLBnDSkF\nw38YAiLsRxq4/4icVsaVqs1dfB9ptzo3vVLlsSeeTD8MksACoCXNIipvksvX\nLrQZ0oi4RS8nxeITIyIlSao1hdlSvYpOy4YGrgeYImQBh9hwzLi1reRjxvQ0\nhlJbEBIUu+qwE0QjUJFYXSsMzi+lqFMqFYltNHMuKn5U0MiZhceRUhOvOuKt\nEgJ0\r\n=hEyu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDeVIKyw83BhvgCr6qT1gBRNOqFK6vqVpwbmRQNQPqlwgIhAJAIpJQ0pBM1i3nWUEuq9CUf94vRuTY+0cf+Dm9F9mrY"}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_0.11.0_1559240869275_0.2551671232632642"},"_hasShrinkwrap":false},"0.12.0":{"name":"anylogger","version":"0.12.0","description":"Get a logger. Any logger.","main":"anylogger.js","scripts":{"build":"node build.js","test":"mocha anylogger.spec.js","prepare":"npm run test && npm run build"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","gzip-size":"^5.1.1","mocha":"^6.1.4","sinon":"^7.3.2","uglify-js":"^3.6.0"},"keywords":["anylogger","anylogger-debug","anylogger-loglevel","anylogger-tutorial","microscopically small","tiny","logging","logger","console","1kB","logging facade"],"gitHead":"5e5f7ed8357479396e19d9de7b9a9166fcdbf519","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@0.12.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"dist":{"integrity":"sha512-/RXjcxZWoANFdkTrX2GCfejvCCrtZvsHWpnqwac/n18fL3xZQ61Bp2rIAZt26U3O1qQLh2uz14v+c+sAaV7dQA==","shasum":"ca251d604948256468fc190a7a4e7e7257a4e616","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-0.12.0.tgz","fileCount":6,"unpackedSize":28124,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc8ZzmCRA9TVsSAnZWagAAGhIP/jDhAFPOotrSnpYMQv1Y\nU9HnSF6NBT0kPS40CRklJOGCBF0TNgRINeCVQaBQMdgL3HzDtNh33O/N8LbD\n9X8zg0Hi38iFjxi34yYnnfHWHAS15XwWwF1bmYyapyrN3TvOeOXZpRGnqvyA\nWY04fjt1SCr5X4sD2YKTRONq2CmhQHAEXL/aydVMdSc+eFYuGJfszdm2TTgI\nW25SYT1a2YU/IjNJg7CbR3BT8fia+zpC5HCA9bsSBK9vqPryrLTRtufJMS4G\n9Zq9enDlgIdmHrWlSKAJQySmJS1dUsxelEqva8fn5q2ndmHZSeBfg8eXpvKX\nRv6uaodJr9+m5+4VMfIag+w298gaakg1hc7hZQvndVTAYhaTk3o2dv9PCBWD\nDte6YNuT41f56/VTa55lAmy3jcnEdYQEJmAmhS+/sPy0LpkwJE/6N1RFa0mO\nPipDPnYi32lzOpCYXGGSjKC49Yc/AtT+tltiu31yi8Ykdk24HWpkmE7km3Q1\nqPlrAPJqlv++3D3Pk6jBxwZKNu041CfYesSIbeXjVQUxWFD8tz0wfQGljr0q\ncoHDDJagROznwG5PupqrWSq7H+f5wa3qxDtD84A5IwW6w3ku8JbezgEP7eXM\nWtCWaFEJ4iuMlg64NQpdH6bbe86N7btCY6m+IA62hxFGs5zQ0zTcWmxn5Jba\n/4sL\r\n=tB4a\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDH+iFwVA+ZP/yCzsxuaQ0LDGZwBnyx2sFf1mAteRGCwwIhAIjCZ/MQQcUD8j1MTuBodZH6WTCdVKp7h/0eYzQvsher"}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_0.12.0_1559338213520_0.7638421880324786"},"_hasShrinkwrap":false},"0.13.0":{"name":"anylogger","version":"0.13.0","description":"Get a logger. Any logger.","main":"anylogger.js","scripts":{"build":"node build.js","test":"mocha anylogger.spec.js","prepare":"npm run test && npm run build"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","gzip-size":"^5.1.1","mocha":"^6.1.4","sinon":"^7.3.2","uglify-js":"^3.6.0"},"keywords":["anylogger","anylogger-debug","anylogger-loglevel","anylogger-tutorial","microscopically small","tiny","logging","logger","console","1kB","logging facade"],"gitHead":"bcfcb6c059bd3789692fb3a1b88dea294c592aad","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@0.13.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"dist":{"integrity":"sha512-fUzgNV3Efrp5J+SiwFk7lM5z30AXQpgdnHv82efUd1mPmAX2LWfNkztmiHDP0Yk0Gpop+1gg4VWWvwHExqm38w==","shasum":"35859cbd954555ef1a36cf8304bc38535c7394dc","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-0.13.0.tgz","fileCount":6,"unpackedSize":28075,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc8aA8CRA9TVsSAnZWagAAym0P/RZ75NReiXqJIfGZ7E4p\nGHHZ9tph3BBVhVCfuaw0E/H1erOxCvYQcnDYIiynzX6I74YvHSOY9AXsd4go\nAy4jDBeoNEcwhA5taxLGXA5gvaeskl0zkFZ0pyTxL044orBzIeqsyJu2BwsX\nJCQoj8o3ucya5csALMBtjTBDVpSotqCn07fE4LFpxzh73tvEXM8EvO6e1MXr\nA+lepkxZ4jSToZlQf7fLlwmic09GJTULlRtc/OX5rjIZmLA0kjpV2fdd99Ap\nVDaRdfCj9BoZ+I1GK935mhzYGfTz0sWBN6y2fHfuMuMlkoeUxqUVyAbcmToF\nF8ihD1V7+8/z5cd+JrxBnCMjXjy8qe4RIU9NOY1SSOtP7QfUZk1gq/FfGmcg\n92DGP6wWiDib4BCsjKM6oKuQN14M3/L9VVwbjKnEk/CC3sBWu55djOhKhZY4\no6myV2wlO1/R/9HrEV8KHCz+/8VCQ1zjngao/F//+Sa4/6q6gNlc6k39IGvS\nfNwm2xHWZ7P96d9qGJqf9cSiGmnJFNPUQmubuMuqELWj+JeMBWIpCeAw6rlx\n3GrwH5QAVlg6ReROt62Y5Fvm0IwA56CfH1fi3yM3rwbbMWn9QqVympW1lLTh\n5j9wr2owq1yXzHZHNBCTIxDY+YYD0GPb2uCBb5juLQEdLUtNT2wgvo8sgrmD\nNhzh\r\n=0pG9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHBwEP8J6f6KtIbNEputXSfu7MYUM7vO3HvdFMAha93AIgDZqFH7fxaoleC7l/pk7rBXcjyncfYvTQy4PpHAELtCQ="}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_0.13.0_1559339067738_0.7564762274674328"},"_hasShrinkwrap":false},"0.14.0":{"name":"anylogger","version":"0.14.0","description":"Get a logger. Any logger.","main":"anylogger.js","scripts":{"build":"node build.js","test":"mocha anylogger.spec.js","prepare":"npm run test && npm run build"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","gzip-size":"^5.1.1","mocha":"^6.1.4","sinon":"^7.3.2","uglify-js":"^3.6.0"},"keywords":["anylogger","anylogger-debug","anylogger-loglevel","anylogger-tutorial","microscopically small","tiny","logging","logger","console","1kB","logging facade"],"gitHead":"89c3d89e64afaa6afdc0c9164e7c5f8bfe950bac","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@0.14.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"dist":{"integrity":"sha512-9DqG1tlnsu1patZz6QUBjY+3m8yxVSUz+YNfPakSeYLtknuMNNns3QntoQwFeEDgH1k/i3QWI2nDwaaORKh3gg==","shasum":"2ef16847d09ffd36a76d2493109cc6a3e0165810","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-0.14.0.tgz","fileCount":6,"unpackedSize":28075,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc8aPeCRA9TVsSAnZWagAAXpYP/201G99jU95UQ0EjoDjB\nP3HbnV+hE5QitMjELdqxBE8cDhIc0MAKDTiIsh3AwGQKUGa8CF4XuPpIbDXD\nnIbmuX2+eh4ZArlb+Mr5Yu+Qb3GCMub5PF97XWP1GTpuk/XPRbkZ2En31jze\nmBIL90kN2FntXcY8Kz282Y+rxek+8yELsxnsdOArpFUMdAWptcznIiKJWQoE\ngfdX28IlGUIZlOm+1f/4kEMEhYhdLeO3BLfUgsBj3xrHKgWDfc/gtXxrb56r\nM77dGmMPq5W4hJffehUt1R1NGq+Ye7IeJ/8HUM60XeXY3wBsCjZo2zDxVg+z\nNCRONrnMK8D7OLaiBa2vNqOGq/LxSZWxa45JI485oyR5yhoxjodRIwlC6oD1\npOy50keRTRhYoradRGsy48jj2I2wlpFc58dw3zGUFiEkalNp/oU44FezrYsC\nJt/i5k2Bh6sTjRtZleqDqjD2cbTTDVd2sR0K+pQFcvobP+st0pJHqkhR+l03\ntOHDJ+juqkwYTCbTRw9jg9NaJ3HRJpFIK3FDCadyavMJnpe6/tuZu4Dk7JJY\nTW3MOwCS5edy84LSHy7N8KVCLhKB0+4axx8lwEVVeG3XAIe/G7DgBR3MR9QV\niBGTzuA/+W/G30p5vhAoyvb5CUTvO0BpyEvn/YElnYUT/2fBIxUfidwzIjMK\nGZp6\r\n=GBny\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHJroBDHKVP2DgnFSrww7kcWppfBGU5cx4NzHshIvWXvAiBnWlUUAqu3RYnhMegRBT1K4K3HEY1FDE2trhVMRpYuNg=="}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_0.14.0_1559339997212_0.44815010642856556"},"_hasShrinkwrap":false},"0.15.0":{"name":"anylogger","version":"0.15.0","description":"Get a logger. Any logger.","main":"anylogger.js","scripts":{"build":"node build.js","test":"mocha anylogger.spec.js","prepare":"npm run test && npm run build"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","gzip-size":"^5.1.1","mocha":"^6.1.4","sinon":"^7.3.2","uglify-js":"^3.6.0"},"keywords":["anylogger","anylogger-debug","anylogger-loglevel","anylogger-tutorial","microscopically small","tiny","logging","logger","console","1kB","logging facade"],"gitHead":"5d35462851ec8a1df26c64ae132f59fead3d837e","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@0.15.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"dist":{"integrity":"sha512-Ik0+huOGbHXuvzSlnaB0iKQXjMpp01cBMhenhTdgafG+WAsMcw0qsXfiBDoGd+H+r8KiEBLV5b/PyI7tN9akUw==","shasum":"6943de791611d24ecbe999b9369bbbb881c6dd39","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-0.15.0.tgz","fileCount":6,"unpackedSize":27755,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc9QP8CRA9TVsSAnZWagAAVfwP/Ah3GY6jOzeDjNzJLyKP\nsoSYkZUpzjOWf9ppUTF8xGcerbqjUPaOWZe3E/1caIdbfPj7XzlP2OkumeO9\n1id4wCV2tlSJS5Yd9c5Q4pawmzg+m1h+EYfujQP8dT2v9vadcuV/E5YZnd0G\nTk4qUZTfGwPC7QyYRYPfsMQ8nZjL8aupxEgaZrFAaMd8DNl/nDm0oy0qGXqS\nAoxxR7jQ2U6t9kX95eIvDatzwhU0CTI8auxBoFtdPUJuvHmTffJR6LHd40KK\nPsWBZo7mxdLDoqH6tz+tw8lw68okQQj7Fh7Ybi+ouDXNd6t+xODExNO8x2pL\nS21QpGLl4+Qkfqkxxmr7K6KrulCALskNQCD1qUXGQuiiBjvzeoHv9/PWIewP\nCp6ts1nK7ZLH2Cep2KtUeH+9bZ0ha62NEsn15Dtj/8owTL3yom0M95mLNw9p\nmAud0zI8984p9iNMNqxjLvREhRLSAorQWVkiVzrCBAuVF6s1NZ4Wz6NyebJR\nO19XI02zFiq+oojxGl5/i+JSDMl3sQJ+6IIJLxsFvNICXBzP2QE8nq4IyyCG\npDBcqTjXsGf9akp0rMp/8yxKByys+0+sFSjBK4WLJlABit4gDY0+3hVXZf6L\n00LjYTn4yFPel79T7hTXK3fGsMky1XRQDSCYcmE6pcBFN2jGkh3d9bJOn06f\nvoSb\r\n=NnEj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDh/EehS4lcTTAz/lAthCFuvAMqVt61neNc6pl3omdehwIhAPT5CgawMMNTQGVc/6Qtb9B0IUWYbNUHCxusgPE07FoS"}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_0.15.0_1559561211523_0.39510881093732175"},"_hasShrinkwrap":false},"0.16.0":{"name":"anylogger","version":"0.16.0","description":"Get a logger. Any logger.","main":"anylogger.js","scripts":{"build":"node build.js","test":"mocha anylogger.spec.js","prepare":"npm run test && npm run build"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","gzip-size":"^5.1.1","mocha":"^6.1.4","sinon":"^7.3.2","uglify-js":"^3.6.0"},"keywords":["anylogger","anylogger-debug","anylogger-loglevel","anylogger-tutorial","microscopically small","tiny","logging","logger","console","1kB","logging facade"],"gitHead":"8311ef137ae7793e66fb1cd37180bac9792de32c","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@0.16.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"dist":{"integrity":"sha512-Kg9gBdc5fhUEJA1n7x1PqAIZUjaERcFzYrxulYZDn8IZwT41a4tiC6CNQqfuHY09E03pHoG71zG/E/hEIAlwuQ==","shasum":"fa842f949a91df4514419197556f2203b5ac50fe","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-0.16.0.tgz","fileCount":6,"unpackedSize":27755,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc9jIECRA9TVsSAnZWagAADSIP/0kQ25WipjDiIcpKIB92\nLTkIj0oDTDfKabHXn6txCgUJ3d5SPI29NCRCO1Sk8GWBucOA4QEGyHBXKnsi\nEmdTiFVMU7F519uzrp9nM0QCUXVgCXZrqALeh+wNjoPfLDb755pKfroybiph\noAOvFKL9OlETKfVhEq9q46w7CYaMEAnFdPtOIcYmMyBPXqydy35L0juXslJc\nCpFxErMVXM8fglEZimTV+/w4flGXb0RZUqM9T12kP+kijzXajxUc+S+nyQmm\ngwCZiYpxu0N6V9YzxEnsMgmilQ6KZ1tsDQieMM0tyMUgTVDVRFiaMcTMptbg\nx7AZUmQ1jERwxC6LXDl5LjBMfawyMMpJ5mj9VnhpHHAE/+vuMcPv6u1ct/xr\nLk4mLgtM+pnpspUnb86W6gXRd4EaEv2R3ucH7+Hh3a9L0soRfM0mR3J0oBvA\nWIQXsliAfOx+DCU7TOVJaToMouv9O88TP4vmQjTT19dMZDI235v6gcHMJktw\nPZPhlZZZIl+m3NjO8M8DmNqqOa/eN4TolbeBHD3IaKkr5fEZn+/v0uxco+xj\nCl87zSGZ2b5MhdXcL+2j0TnD5SLv0Jot70P6mk6MUBGesHTzzrKwqPQS8zqg\nYdB+jhnGzewEOARb+3ShkNB8axkIw5/5E6YKbieuLCWQcuIieC77kzEhAi5z\n7/Zn\r\n=E6NF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA09TqFcXzsqKxtsYNP/dTZE6dODZu27jib/T+2aHDUeAiEA+NxUsp8VyYBan5Uyohjky5qNZ9N9yev/3cPHEHCInkI="}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_0.16.0_1559638531929_0.837006124563447"},"_hasShrinkwrap":false},"0.17.0":{"name":"anylogger","version":"0.17.0","description":"Get a logger. Any logger.","main":"anylogger.js","scripts":{"build":"node build.js","test":"mocha anylogger.spec.js","prepare":"npm run test && npm run build"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","gzip-size":"^5.1.1","mocha":"^6.1.4","sinon":"^7.3.2","uglify-js":"^3.6.0"},"keywords":["anylogger","anylogger-debug","anylogger-loglevel","anylogger-tutorial","microscopically small","tiny","logging","logger","console","1kB","logging facade"],"gitHead":"698d871259cced74e57779873830be9967f0975c","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@0.17.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"dist":{"integrity":"sha512-5nEfFEatt2X0u2gtd2y1RgCLeM/4JqTwD7P+ayOo7Jtw1hwnSIxux+wQZ6lDJC49g7nQ+rBBr+Tx5BGQv7A2DA==","shasum":"24655976d691672ba181e80aceae03726388faf1","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-0.17.0.tgz","fileCount":6,"unpackedSize":29499,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc9kETCRA9TVsSAnZWagAAiNwP/igtIlNDrkYAzBGhOkc6\nfyucbPk3YLCsKW5KXBXoIc1ZwXxujulTycEVmNdCFPrzuAesgZXPgG/+QxKV\n+S3ThiRUVZwoigfU/KKegZhmpVuQVwN8AkWgjBSS3fJRrNaTmOVz9QuKop17\nyrkOM/WF0Nratg0pCBTMo707ugCfQNOfEwQoPEgF6J1txFSvJD9FCZeWfKUx\nCbrxIaugFmfO+aAnFrCQsea8dLIGXoyMD8bUWWMFcpzCcgPHxr3Fa5jngA9C\nP6FcsxixydqtyXw79RrJt/9zZRyxhAPfnGWNtu6Q8BbafAkZoZRNuPWzBSc6\nqn1FbwnA3Oh+wpqhkhYEbJbLmq6qEtwIv/xvg9u7RBCqBsNUxMWINDrJtj6y\nMowdcjJhn7L2oWITWGfp+xOVhmeZoZ5BCLbpVIIbU8UWw0wu4A0glEjZ3r0d\nKhlTWjTPuWEz4g6ebmn7El/x6ltCX1mhOMAFE4IXv8h6vOOAPmfmvDrKUGgK\nn5q62LvLof0/jztoy8JudCKvTmGcx7GcI8PbOqVFyvMzLoKDNrQRaJ29iX/Q\n+9ziymruu81+6CNt/x9z1cq8P8/SBovANyOjiJDK+9FguiUtVdlQTlm3PgHu\nWcBB8VJuBDhvkPC8BzRyqNkQfBhOp1R9U6gFpdpJ51XI4oP14ThxZgSBeDYN\nOAOm\r\n=2+X3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHseI4KfNBcFxbmP2XwrqjWgEUr7Ox8K1NokuNc0FcjAIgZ0PaOgbEpxXCDcMQ7+Puph3AZBsyrSl5C+Em8W7rScY="}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_0.17.0_1559642386898_0.40734495099925394"},"_hasShrinkwrap":false},"0.18.0":{"name":"anylogger","version":"0.18.0","description":"Get a logger. Any logger.","main":"anylogger.js","scripts":{"build":"cross-env NODE_ENV=production node build.js","test":"mocha anylogger.spec.js","prepare":"npm run test && npm run build"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","cross-env":"^5.2.1","gzip-size":"^5.1.1","mocha":"^6.1.4","sinon":"^7.3.2","uglify-js":"^3.6.0"},"keywords":["anylogger","anylogger-debug","anylogger-loglevel","anylogger-tutorial","microscopically small","tiny","logging","logger","console","1kB","logging facade"],"gitHead":"4b55349b6468595bf7229c148d834c4bf2518e29","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@0.18.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"dist":{"integrity":"sha512-7djsLXudbvjH3chN2mYXy1Y/vXc0/cxOTeQFDvMyKSOL1sOMOSn6tqGcW9OONpF9J1Vn9pt6HpjPVlfmHH6bsg==","shasum":"528fb32afca80b648e7163ed09fa880af04703ad","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-0.18.0.tgz","fileCount":7,"unpackedSize":32524,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdbDK8CRA9TVsSAnZWagAAG2UP/jK68n9BQYH5TZRddo9n\nsL24Y3nvtVZpA/23ZqjxVRineUOPP94z5quP5w5UjClt6J1G4gJZQhYPTFyA\n8SeQGuzhfyzz2enMO8oCXKC40o2lHVpFVXHD1XbgN1dHMXibDmMIxAcGb+J7\neDifItDPzQlFM4eqNftsu+JdOqa8ezpGp0oaRmi1Fc0vdv99DriEfe4YOJ2U\nSrhuV8oUm53SooWQxxtqf7jEGQdxQsK2FjsseMJM/QNSkchK4M4RggiX2kpE\nq6S/8vYd46QFFvHv5ZdtyN8p7SqyNueKPogM4ql8xAuZ1CCkoIalPpbeitCZ\nUklYAcvAYzKXJwWgLBLeVIlAMZgb592acS4lPByEuyLOXVM0wqrldNWj/aRQ\n6xogy9aDj2e7smVIL56jL3lvUsTxyEyGK5N2NpxLEygtTTx75/g3VLJxjaDO\ndDG6kE2r9QbY1AiDMbYAmSZ0OiGHWQiBlIXrXfrrWF0GfSPEo0Nqt6XI1vKX\nYj42b2CiOw5UE63r71Bi30ORemcagkdfFaz1fs81BAw/IKonpINVgqdEMW9s\nEVrxRQdURxNooFDDVi3+qDpQ8vRlRrWpaKv35bVT4u/MXX5J5uXdgTgSdH8U\nxtWNNbP75l1D9fPlUC9+RI+3L0iM8351TTXLsMB8fUAd+/Ih2uxInrkiuVDz\nLVmf\r\n=lU9G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCZ+IpVvouzeW2EXMxknSZoykke7eseUZLdt7+noHyoEwIgWWAf9WAwe7cdG8UG8t0A4x1Dvmk92rJCKNvyms46fZ0="}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_0.18.0_1567371963908_0.6333352357520665"},"_hasShrinkwrap":false},"0.19.0":{"name":"anylogger","version":"0.19.0","description":"Get a logger. Any logger.","main":"anylogger.js","scripts":{"build":"cross-env NODE_ENV=production node build.js","test":"mocha anylogger.spec.js","prepare":"npm run test && npm run build"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","cross-env":"^6.0.0","gzip-size":"^5.1.1","mocha":"^6.2.2","sinon":"^8.0.1","uglify-js":"^3.7.2"},"keywords":["anylogger","anylogger-debug","anylogger-loglevel","anylogger-tutorial","microscopically small","tiny","logging","logger","console","1kB","logging facade"],"gitHead":"468d1a97dcbd2c065461b814ae4af50db379ab92","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@0.19.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-bLXo1wHtimZfQpnDN9+EUl9QqY9KqtA5j/NPg/wxg+sCvhtdjGMBGIV4dgCDM/UNR6rpjZctZB79BCcFKt93Gw==","shasum":"46d73557b5d2f8b8c1cce68ac16f71e27ed35b3e","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-0.19.0.tgz","fileCount":7,"unpackedSize":32619,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeCfdCCRA9TVsSAnZWagAADKEP/33bRnG7XOOsixhYECfZ\n9O1U96KFy8cjYEaicsaXP0KCszRrHBrSQDswOcTajoo/1JxhQwxrYaklkDUN\nhwuTX3pjvgwq5+2UflNeVm6A5eZIYjntWgzyZFeh06auwOb1wEKvJPjAAe18\n11Ln479OscZlbxUo8yiMoJp2TdlkxBmgkfEdTDdtsnQDHtvug3CrrUzwj5W6\nHfJnABBDXs1Ri0ZT3Ncx4UdBnOQCWsEZtbkjb91eUsMDmioPrnglzXKJOWi1\nih5OZu67n5rqyfIvQCupOux+PwbzNw+1DB0JKAgO1NDsdpmsE3UC4vteKOGn\n0LSCWkT14dMgm4KTBXqcdLHsYf770Mx76Ewcmku1zU38ZTFuWz8G6HUeHAlV\nR/22Y0UocdOFR1pL/AyN+MMEF+4bIp/4xbYe1vTPPklZoDHUwJIMXsMxjxgI\nmtZzLGT8UThgJHBrX/ipKUj88S6lnBMvRkN2FXOcmDij0tKBLl1bDTBfIEEK\nBgQZ/4QsqCv8v4fE4boo6gXcDfwTmh4Aiiwn1g08T4ywuYgHyyVB4F2XkmXN\nctZ+TJ6sx+p10u+2SLTXVa+o9GREhyLS/vrQf4i6Ii/NJ3XfzSqW4y9z4iOv\nGtD7rFpNZfrK284Isf4/TzjSKomRs60L2yG0EMhrnuavFE0+aQRCtiUBsFtc\nSXRx\r\n=rnuv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDtwLEUglUroPIwYvRs0BD0D3UfjZ1FcDL886NRMJFU8gIgQs+rUfLrr161z1D2po7wU3V9GakXqehmxibOHdhwOuk="}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_0.19.0_1577711425423_0.9220888080597578"},"_hasShrinkwrap":false},"0.20.0":{"name":"anylogger","version":"0.20.0","description":"Get a logger. Any logger.","main":"anylogger.js","scripts":{"build":"cross-env NODE_ENV=production node build.js","test":"mocha anylogger.spec.js","prepare":"npm run test && npm run build"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","cross-env":"^6.0.0","gzip-size":"^5.1.1","mocha":"^6.2.2","sinon":"^8.0.1","uglify-js":"^3.7.2"},"keywords":["anylogger","anylogger-debug","anylogger-loglevel","anylogger-tutorial","microscopically small","tiny","logging","logger","console","1kB","logging facade"],"gitHead":"f28b572e833090e18fe5f9dcdec7557a173fe2dd","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@0.20.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-HDQrUYEv69Yh6oB1lKNyXl8vQdtDQi9m/3bO4Q9PbPpVeyE303SlB3MT2Cc8t2cnG3khbfuEWMl8Yo6oPeXz2g==","shasum":"b2acf9dbb101af054e3fc5055dda3dad2aef8aef","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-0.20.0.tgz","fileCount":7,"unpackedSize":32543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeChtzCRA9TVsSAnZWagAAkokP/AiEW6UGRDEhVxPOHgAC\nWkpsV6n2L4wuLJ7PGtuIwK81vhSJWOZys4EQY1sS5lHXVK9kk4hsdK8MzHrQ\nm0NAZv80m6PSvATXTd0zI4mr2tPhr0AQUuIiRlnUjOYwwGFySQlhZgSvnCuk\nQH3EEjPGxhqUqzCit4v8X9yMNDvyExPyJm2P3sRTq3XXq18VaNas4DE2YVuv\nNWUVgXcTUQO4/O3qrOuewWVdFEjvjLStUWLFfzBs+pRTSKIrOal6WbFnRda2\nMvRV436XY4xyO8HKe7jzjaEI911l9zFp4DfQaY1qcoK+QeWG23UNOd+ZKzrS\nquK2sfuMbZyvkkuPCYS3c5i3QWkZrFjzp/4bpJal7QlgwUPACFvCfte/Ma2H\nO5QYnbXjgntsyjRYTR8/enO4x9DLsjqV+HXp6QKGbnud0B3AkqtNl8Fytcx/\nB1X/30I5L2Je/Ld3V+i98Yk3SFF2pifvyIWyI4IBBrOOblOm2yCnTwsBsK72\nhqRYnkPcKClIBB942ToMuz5TdToVmP7C6KVk4T+9/US9EU5W5VwcCflJw0Bg\nrYwNo/Po3rhkTcAPFrWFRYtWu2veJF6npFDVZ1kOskf2fVDhcdmztfYadnLc\nsvwvbgu/4YVRYp7j2pIAeD9uIT1+hqicLbFLF11yECgFdRODD87W12E+gp2g\n25H5\r\n=wARY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAmVoXSJARcZ33Vb+/Vq91MldNojB8qq1XEyf7ndavG9AiEAyqTg85RUR8S53+XlsEb0QBgdw7P4Zkukkp8SXhT220Y="}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_0.20.0_1577720691247_0.3497591650421352"},"_hasShrinkwrap":false},"0.21.0":{"name":"anylogger","version":"0.21.0","description":"Get a logger. Any logger.","main":"anylogger.js","scripts":{"build":"cross-env NODE_ENV=production node build.js","test":"mocha anylogger.spec.js","prepare":"npm run test && npm run build"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","cross-env":"^6.0.0","gzip-size":"^5.1.1","mocha":"^6.2.2","sinon":"^8.0.1","uglify-js":"^3.7.2"},"keywords":["anylogger","anylogger-debug","anylogger-loglevel","anylogger-tutorial","microscopically small","tiny","logging","logger","console","1kB","logging facade"],"gitHead":"63939e9ebeb64c2904c59147b0c0040763f6810d","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@0.21.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-XJVplwflEff43l7aE48lW9gNoS0fpb1Ha4WttzjfTFlN3uJUIKALZ5oNWtwgRXPm/Q2dbp1EIddMbQ/AGHVX1A==","shasum":"b6cbea631cd5e1c884e5c0fa007d80bde1b22bd4","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-0.21.0.tgz","fileCount":7,"unpackedSize":32970,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeDfHqCRA9TVsSAnZWagAA56wQAJwbOr0yapVRCmTLMg24\nqhPpDMDTguRLqnfs6RQ6inp9JZuLbx3Vm78v2e07L5uKnI7K4loGZ1qcxYGI\nnggCUu9wKTjADBzt+qzMSxChim6oU6VKJgBBPm5q7v23WsLc1GAi0S8XQq0L\nAsLJJlb7m2KgTciPl3RhbkPRBcoSxWoX9+UjvphUIPXNX7JdUdVVKLEiySl8\nSjizJGzWEXHWUckyYT34sXs/A0rsnx7rylfm8ajzlcUBA3MvUn52/QqMMlK4\nMUwfUhk5ZwC30IokGrrxLM1RleFZMuZNfCwFJqJumwD1ItMZof7EtWcx4I71\niHuGsM70vL2FGQTtfJthonDsonkTObxvQvyrFCDYqZC31SilWHrKvYuF7lsP\nfFgqVmyJC0a2OY8UmL58NTh7yCPkW1/kT44rPDtnxKb/SBbMd1Q53tfTMOvJ\nt7Mfnxl8ax0Mf+IEiUt4xOPXxeS3W0nKn36vF3rd05bnUipddQoQs/dCIoSo\nsC4+oeaokaYbv+bYRwUJBB4OdmSlWKQcdl/lt6mfu8VVuUXQBwjpkeH9ez+H\nAwIMBvNCfzio20UjnM1bTU6d0/LPf9E6eLRrm5DCPZ1r5G2u/NrurS6Q1aNd\nmb86X/mSwyZd0w0oTOjrODBjiaY8pegLzoGTwyHfcjVViTPWUKnMZwfSQKCR\njeGF\r\n=Thdh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA1JI5rvqeoaBpYMENuBmJnKFLPuOZtKawOUYYoKcVUEAiEAgeH23LkrnBIAmP2MW5/xNfVPuXmkwGzkUkWETNgVBs8="}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_0.21.0_1577972202265_0.1662021207606612"},"_hasShrinkwrap":false},"1.0.0":{"name":"anylogger","version":"1.0.0","description":"Get a logger. Any logger.","main":"anylogger.js","module":"anylogger.esm.js","types":"anylogger.d.ts","scripts":{"build":"npm run package -s && npm run minify -s && npm run docs -s","docs":"cross-env NODE_ENV=production node build.js docs","minify":"cross-env NODE_ENV=production node build.js minify","package":"cross-env NODE_ENV=production rollup -c","prepare":"npm run test && npm run build","test":"mocha anylogger.spec.js"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","cross-env":"^7.0.2","gzip-size":"^5.1.1","mocha":"^8.0.1","rollup":"^2.17.1","sinon":"^9.0.2","uglify-js":"^3.9.4"},"keywords":["anylogger","anylogger-debug","anylogger-loglevel","anylogger-log4js","anylogger-tutorial","console","logger","logging","logging facade","microscopically small","tiny","ulog","1kB"],"gitHead":"a322bb70f961fea3a14d7356174b8323c8ce02ca","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@1.0.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ShOHFQ3dQEZRDUcK64qbEZzk0U/kSnK6i/wzLwfmqdSewd/5TcHmRHRInno3ZVSoo9KIWhahQ4ARuY4kEQgBYw==","shasum":"61eb615b2c32ad20fae2ef1b2d84d2f0c5aa8e40","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-1.0.0.tgz","fileCount":9,"unpackedSize":43893,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe7iT4CRA9TVsSAnZWagAAwAoP/jZYiixkTjhhNDBrypSs\nAHR9CLgIZDNQEdEGtje6O9+vmI7mkvsRhfu+amK8Ki8AGsRuzsBJvDJ5ouCU\nw6FL/qxeANw8djo0QHGbLftpcfUrDiaAozUKlf5wyRqnECP7YHGSW3Y3WkqA\nFagjCVPEbfMG3yUbxI5hzKfVL7Zc2h7ItPxfbb7xqX2hAfKpjzSwMxAgPpoO\n1x5fVaLaVn/MwgH5/A49iMVtIvRzBcH2t9zKjTe9EtK9WUnaqkwmLEFpfif/\nkbqdQ0dM9q8F5JdX/hBsPdN+zbyetdptp37IuVvMcdbCUs/VRrmfZVk7e9Xv\nqMUOV5PQ+hXzTVuzbgcQ0cV1kvfzES09+nndS854Xbq0c7d/6GhFq7PBUES2\nTSPQH0SXlUw9MPkExzlRpMuluYX0KKx/u17fdYAtLm4umpNoQN9FrwE4WWnI\n8wuPpAYJQfo2lMyvR/MSSFRlzBUl4qF0kAE4DQRGRq6nHdUgrhyNHlepRyKL\naYReGmXsS0SMyZoVVaDmRXpDMs4kiiHu/wKRq407HTCdlqqGrNJ2tI7Y72wi\nSlQlpE3TpFN9Y5ArnQKNvxOUOCLNwcizSDqdJeYh6zWlkG9qRkiwq+e3JNAX\nTrRN9nqayLPl4oFHZptpTLm8CazH4fPUlwjibJ9r9Npx9gtolq5R/XgsEKgP\nbVcI\r\n=Duwb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGSiI3yPvLsMAVIPrUcZC/7R+Cfq1B5ttcgEdmH5Hk9SAiEAxSv5U0CfYnvBw1U19i1ozeZ7j5LEy8YHEDg8N0+dzwA="}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_1.0.0_1592665335344_0.6744725324170504"},"_hasShrinkwrap":false},"1.0.1":{"name":"anylogger","version":"1.0.1","description":"Get a logger. Any logger.","src":"./anylogger.js","main":"./anylogger.cjs.js","module":"./anylogger.esm.js","iife":"./anylogger.iife.js","min":"./anylogger.min.js","types":"./anylogger.d.ts","spec":"./anylogger.spec.js","scripts":{"build":"npm run test -s && npm run minify -s && npm run docs -s","docs":"cross-env NODE_ENV=production node build.js docs","minify":"cross-env NODE_ENV=production node build.js minify","package":"cross-env NODE_ENV=production rollup -c","prepare":"npm run build","test":"npm run package -s && mocha anylogger.spec.js"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","cross-env":"^7.0.2","gzip-size":"^5.1.1","mocha":"^8.0.1","rollup":"^2.18.0","sinon":"^9.0.2","uglify-js":"^3.10.0"},"keywords":["anylogger","anylogger-debug","anylogger-loglevel","anylogger-log4js","anylogger-tutorial","console","logger","logging","logging facade","microscopically small","tiny","ulog","1kB"],"gitHead":"6ba38429fd765be45becf2a53850e616d4f48fd7","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@1.0.1","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-M3W4ufLHn2e9PWwnOz+NYQx86ZLx23czYwVeidDXUbakJI0xKmNCmS7Z0gVYhlhkn4oILseLXj2m2I3eRPj74Q==","shasum":"c21cbdcf888c9179618ff08b6e2d2f71e5c44a1d","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-1.0.1.tgz","fileCount":3,"unpackedSize":20720,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe8hQ1CRA9TVsSAnZWagAAbeoQAKELmvIDg2rxsgCBgM1T\nlFfcBaMLEbif4ZoJPIXppnoi22lJrwfcP8P/qavBJTX10rAtNaGmFapxqD2G\nNbaVZ3blYO8MmoIBVu3WNInls/5KO1+g5QXFYIYXYNv8vQq7Y1a5+N9hvJnf\n8WecyjpvDxSA2NwJKjVa+MmVyG9thgNtUD+NkYb+cdG6VkqCBF2SYMZ07SeA\ns7ijiFmYkm4HFlS+3KGOxwRF4DCSI+i43eEW/nc96erFOFtNTb6g3f/Pz1Xr\n70rEKMH6+xvauz6tLEcQPWcuTkoJ5TVJ5gMQyoZpHI7OydvoAc5sudoKXZle\nmzohXq3n0OdJMwF2KNSzANArUVheUFSxA302YN5yyJpHcfRPuqeB5bWXArHE\nSazbKfm4zDFyQEd4rgWEihvz4gusLA6/MvYpKsSVbykHFm8t0B4TYK7/9zEj\nUuTqXomtn//iqGh3WWc5Ka1GxVORDL+Hn9cz2/ue8cJ9/CmXpIlapUGs4BaB\n9L/C6UDuV6oddKZLx+n5anfy7op8Ha+bsFATblSSIWyqRdW8j4Z/UpUb0zzD\nmGrquomTAUjSyjrnO8H+Wi7VNE2s/HyKEEWu7eSRxgDtIiu/g8On5axTcpun\n3cIrhfHCS0uRdLKdwv8QcKpHWmtwUnSFq6vjvPOKw8t8Js4vYqsUaU6sg8IH\nPYxM\r\n=1h4L\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbfQIv/zLyeMlOZBeMihKVXF6i2b/Zi3v2XAK4StH6RwIgV50ERhy1ytW0Nhbu1mDTuEn0HjMCqjxEIWt70dZqX+w="}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_1.0.1_1592923189371_0.5904588495510039"},"_hasShrinkwrap":false},"1.0.2":{"name":"anylogger","version":"1.0.2","description":"Get a logger. Any logger.","src":"./anylogger.js","main":"./anylogger.cjs.js","module":"./anylogger.esm.js","iife":"./anylogger.iife.js","min":"./anylogger.min.js","types":"./anylogger.d.ts","spec":"./anylogger.spec.js","scripts":{"build":"npm run test -s && npm run minify -s && npm run docs -s","docs":"cross-env NODE_ENV=production node build.js docs","minify":"cross-env NODE_ENV=production node build.js minify","package":"cross-env NODE_ENV=production rollup -c","prepare":"npm run build","test":"npm run package -s && mocha anylogger.spec.js"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","cross-env":"^7.0.2","gzip-size":"^5.1.1","mocha":"^8.0.1","rollup":"^2.18.0","sinon":"^9.0.2","uglify-js":"^3.10.0"},"keywords":["anylogger","anylogger-debug","anylogger-loglevel","anylogger-log4js","anylogger-tutorial","console","logger","logging","logging facade","microscopically small","tiny","ulog","1kB"],"gitHead":"c1f0a4a2ce8b8bf38b0675d76519d1dbf2e31191","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@1.0.2","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-0CTIwPOZBPPYRluR0LOvchyeq8+qYfRsTohcexuq7W0kqyut3pQwnu5zjCxK6syvOeLo67pqjoNcHkKkgIiwag==","shasum":"d13541ffa5711bfab278703553c513a0d844bbf1","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-1.0.2.tgz","fileCount":11,"unpackedSize":48868,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe8meOCRA9TVsSAnZWagAALxsP/15PPoYI545ee3jXjS1G\npVS5Qa75Lps36N4p8orga7FyoPOHGKpC+mSnSEixcFJw1YEsaSZPjey/4iDG\ndXtFdk2gdZ4i8o5W5HXgnjYqRd8wzKCKdVS27ZXmt7rQZCo5/U2y/27qBTby\nYciJKzoMuYIitrNbIeEA5xipo5qEGfnfFvjhVMUM1H5vmRHJvl5VrXMBcPRk\nLkJ2CXL3hptA2JBgVABPrjjKEII3MxoZUn81ri+DadguK8Ax/jeAIbgiFkTQ\n7EXGO/zCEChTdn0P/u1UlvYLy+gPfaAga/wmHzac0+n2zH1ymNu5JvxDP7VK\nYiSXXtRNAguntb5chOSf7WbCWdb2rDRkWTXqjGl5VJGEog/9HUKJC6r791BM\nw05LvJ1r2tGy2uBBhmqHeYkEM7iRjkwB2frk3sWnBigNH97+UwSkm2jQWTyJ\nZxXErzbjKUsMcC63eUcTIIpguJG6g2TCDRej1TAhdPqoCXTpq4uH5oqUe6TF\n4x7zufGK+NJI9216BwS0Nu9TCdukhYPp5sh/nYOnrZmh5KW6UQXq0a6kOL4v\ny014inyyWAz8o21Kp3Tg6NkaKGz5gtPPQBzlSMJo1O31fxEm6ty8nxhPDZ1E\nRYvQLuTPhKSpZjhJswG2nyG6JDIb6I/TVbJjM/4L/oGU2PGrql9UT3F2SkC6\n++Kq\r\n=Kd9B\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4+fVNF0MzVTDQYqeAkWcqgvy6AZF7t5mMzYNRcAXoHwIgRnEFb8dCwDdUz8vgP5LCxhu1MpA7PXSbsAHk3PRgOls="}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_1.0.2_1592944526148_0.6214526022231344"},"_hasShrinkwrap":false},"1.0.3":{"name":"anylogger","version":"1.0.3","description":"Get a logger. Any logger.","src":"./anylogger.js","main":"./anylogger.cjs.js","module":"./anylogger.esm.js","iife":"./anylogger.iife.js","min":"./anylogger.min.js","types":"./anylogger.d.ts","spec":"./anylogger.spec.js","scripts":{"build":"npm run test -s && npm run minify -s && npm run docs -s","docs":"cross-env NODE_ENV=production node build.js docs","minify":"cross-env NODE_ENV=production node build.js minify","package":"cross-env NODE_ENV=production rollup -c","prepare":"npm run build","test":"npm run package -s && mocha anylogger.spec.js"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","cross-env":"^7.0.2","gzip-size":"^5.1.1","mocha":"^8.0.1","rollup":"^2.18.0","sinon":"^9.0.2","uglify-js":"^3.10.0"},"keywords":["anylogger","anylogger-debug","anylogger-loglevel","anylogger-log4js","anylogger-tutorial","console","logger","logging","logging facade","microscopically small","tiny","ulog","1kB"],"gitHead":"16bd4f955695c2cc9dc9f5b0b2b98b2ec8e156c2","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@1.0.3","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-0D/O2Lw8Uh8Z2P+tIHyD6iNlZN1i1aABRM+X2gdjSyk1IcCgShkOeR8mkP4MAPVbX0dA9XPCLfHeP92mnlwwWA==","shasum":"e8d25b06ba3542d73bd6358fc1409cd144281804","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-1.0.3.tgz","fileCount":11,"unpackedSize":48894,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe8xlOCRA9TVsSAnZWagAAdy4P/jkJbIuGXlioEg/EVndr\nEsDZCNWAtDzILA9eFzwXNSU47I9D/rEruO7pwdDhL0pNikSpFDIpdGSxLP+v\npQmZCgWPzfusFWmkoPVzrCX3Ui0do6j5uN38YYWWE/5jfePuGFILEHP7HSib\n69JSXxCLn+embVs0lb1xvuNVxltd1SeKD7VYQeMfNt5qotqDu8VMYYLQ9fEw\n9rA2M2Ir71rCy6PeulOATSRNOY/0jP5WLq2Jf50QvxKfj0HBPiiL23GJ7btC\nfknoI0xu34LeHiCGlfgXcdrwDloXk0SVUlMm3jRhd9MgdlJpu9S3p+JwqyEs\nH9nk4vKhG7CLWmZbW7tqk9S4GQqzap+V0DxQzLHV4cfiAQZwClrDwkDgDYOJ\njLMmOmo7rQ88MOJ+/oGksprj2cvdXpWfujFNWABm45DRYNoOkhEoEj4tYM5o\nM1wzX9afX8wcMqZx7osHF3EOdRZunaI8aR3oVGes37UzW9mdWcCnQoPuUfJn\nXLjJhGHq2+qGj39Nnrci/A/VRqbt/L+CUq9gfpaUlSOmaKvhYTG9CXcJdJxS\nZkxI6582H/WmwKYgril7qSmMne5F+Wm8fddYC6nNjxvwf6ubWnljjuvDIZeF\niu/db15zDy9bPaflgQ2S8TiY4TV8Dr6Xb4/GEOnnH2O9sOmsqUmAmYNnZ2Iy\nuGfw\r\n=NCGX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDuV3KXeYWbnQB8diOMGapsr9nJUMhWyeTJZvCoPxgp7gIgH0E5Wx36il+/v/6Ic+JU/4eI2G6W0Z0fuiiZrEU+O40="}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_1.0.3_1592990030434_0.06361013644545488"},"_hasShrinkwrap":false},"1.0.4":{"name":"anylogger","version":"1.0.4","description":"Get a logger. Any logger.","src":"./anylogger.js","main":"./anylogger.cjs.js","module":"./anylogger.esm.js","iife":"./anylogger.iife.js","min":"./anylogger.min.js","types":"./anylogger.d.ts","spec":"./anylogger.spec.js","scripts":{"build":"npm run test -s && npm run minify -s && npm run docs -s","docs":"cross-env NODE_ENV=production node build.js docs","minify":"cross-env NODE_ENV=production node build.js minify","package":"cross-env NODE_ENV=production rollup -c","prepare":"npm run build","test":"npm run package -s && mocha anylogger.spec.js"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","cross-env":"^7.0.2","gzip-size":"^5.1.1","lodash":"^4.17.19","mocha":"^8.0.1","rollup":"^2.21.0","sinon":"^9.0.2","uglify-js":"^3.10.0"},"keywords":["anylogger","anylogger-debug","anylogger-loglevel","anylogger-log4js","anylogger-tutorial","console","logger","logging","logging facade","microscopically small","tiny","ulog","1kB"],"gitHead":"3e11862e0b83f3ca67c5ba40a24da8a694a35db2","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@1.0.4","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-6rzrHTpx+ik1wIK9eNiWbMEDMFt+rDnBmh4mjijEuyJ2Bxe6xZrgOk2GjVsUb19OhjWbqDgnbRnJ7Co+evM0Cg==","shasum":"dc0f34a8969a7784dd2439b99f4d383865decc64","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-1.0.4.tgz","fileCount":11,"unpackedSize":48590,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDXvsCRA9TVsSAnZWagAAymkQAI/s1LDKKDPeG2kt4BLi\nK0MVv+pAPk4u8rK2ORlW7/+/8Z9bF41PrmWfkRE2gLkTeZz/zLe4rgDrNNtO\nHIb8YgMpmuaVO6wEB5c1d1lPlp5VFypA76nNuBwkCIouqvVkx0z/ABbVaKec\nyH+tcc+m5wXl3ahC8qCwKAJZZLXCvNxBbvnLipKALLZQbGJRaeS9IrvnYlEg\n2Nof7QrSD1lWcPQVv+qK1rxpF8CssT49Ww5cy8sbB6vumC0OpBSS2v6kya/E\nbjyR55gkrk8Y8qg4xOYlVDMjyJKdpgL4cWoQ2husU1MTtu2dqOhjZ/MIDdxo\n0O+fMCk9fZYYM8BJazbM2cD0lLDa5kYN6fSOYzsnt+DOrC7Kw0wq7+b2gEsX\nd610QoiCDNQF8OyIV9Ku8vQNmlvPiJFhAGh0fHJztLJQQsxE8EZVEwefQUR8\n70YjDh6JU5dr88+qqFxl7yvWWBmcF+Fh34rjhNaasdjLXifQJRynW7tfZWxP\nYvB66bw4fP0tJHAL6WgwEO9VRZw1NG9Cda3/r82SYcSqqMvKbvObGf2NKiCH\nfT9IKZKZOkvsPwdRznqaYBFA8INL/ygIbLC5aRChppBXzFL85Uf3ZiNmDPWx\nTJINXJgLW9O7kN3tVlaWgS1bwAic8pTEhMG/E3Ti3UB1TXm8pG+FJ2y0NGwL\nfXtW\r\n=TV4f\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF6yRPtbhQVzlaMmSoPoHONgoGEwNsP1t7vr7zfdYkp8AiAK61aDxvOOR808LAzkAiMnhWA+1DakM6FoB78jXpgWdg=="}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_1.0.4_1594719211739_0.6326023799565044"},"_hasShrinkwrap":false},"1.0.5":{"name":"anylogger","version":"1.0.5","description":"Get a logger. Any logger.","src":"./anylogger.js","main":"./anylogger.cjs.js","iife":"./anylogger.iife.js","min":"./anylogger.min.js","types":"./anylogger.d.ts","spec":"./anylogger.spec.js","scripts":{"build":"npm run test -s && npm run minify -s && npm run docs -s","docs":"cross-env NODE_ENV=production node build.js docs","minify":"cross-env NODE_ENV=production node build.js minify","package":"cross-env NODE_ENV=production rollup -c","prepare":"npm run build","test":"npm run package -s && mocha anylogger.spec.js"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","cross-env":"^7.0.2","gzip-size":"^5.1.1","lodash":"^4.17.19","mocha":"^8.0.1","rollup":"^2.21.0","sinon":"^9.0.2","uglify-js":"^3.10.0"},"keywords":["anylogger","anylogger-debug","anylogger-loglevel","anylogger-log4js","anylogger-tutorial","console","logger","logging","logging facade","microscopically small","tiny","ulog","1kB"],"gitHead":"167413f789fdd4be3fce28f9e88562d6cb9f7b76","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@1.0.5","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-F1RYSnHuygFx7/0R5qmJFyaV7/E37Z51Zo7wtcGuLUkMZoFEdYMfJEF8VCfIF/hQg9N4SXZK+7dL4ZpzydEffw==","shasum":"847d0db70ac2c77421adeb61f8d9251b44b199dc","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-1.0.5.tgz","fileCount":10,"unpackedSize":43733,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfJaSTCRA9TVsSAnZWagAAnZIQAJV4uucCcanEtmc+D2Hg\n+lkN5toYYL/nsaIbjaqBQlwv06Yj/YV6lHDo8cyg6ghNEScwZgFspUpD4lON\n6OCfOOqOPd4RUHiIjOzSNmJmVFlLOmygz27ScWa/iLtqGNE1jiY7gaDPohr8\nrnf6ZpKEurRsVruovtsHBo6Gnccboep1kLyvjkjSANCwP1luYj+AXa7VqCkx\n8c7Fh8xWDDDbnPklZmmiJdswE6+BJRjfRzRqH1jC4/O2S9uz5ZmZtS2tiPI3\nwEc0sUifAhyGSK7lYyGcgBcZBSYEatdResXJDc1PcBXM6j/CCPLVINNzBGkg\n6VYom2OVSIvhuIZawX8r2VhC7GUPa/lp9ArLDGFySQgOp9hwbcoTiJT7CudR\nsq9oGg9rPXMWORcTw5jw7F0Y5H46vy+vERDx9sK5wTSrw2NaVEIfL0IG3N9H\nCIbtr78BBx3eD2L2lOHGHukRrwyxLQjDAnS7GEadKcOivUA1w4b/9tYHMXQh\nRfoJF67ERVBh/3Kb+DJYDq/5o3ZV6ZkmfbGB8LGBD7LPw4daTxXh7cn11HPo\nQnI8KglJwF2RlzyS9R7ULDo+w9yzE9RXaDmjxF95+eY73j4eCJIhtITQmQNv\ncXqHjydoWI+kGvYnj3grTOgy/vMunpyglrquCg//OP8j19tISHVlrgiYqUEw\n0y8O\r\n=BfkM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE7FlZC0vN0YdStBapKu7+MFJoPQe7JxDYA1QmVQFEIVAiEAqTORQlx9gZaxIM2Uu+AQxWl3fumsHGR+iRbhUy+dMu8="}]},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_1.0.5_1596302483436_0.755645864288107"},"_hasShrinkwrap":false},"1.0.6":{"name":"anylogger","version":"1.0.6","description":"Get a logger. Any logger.","src":"./anylogger.js","main":"./anylogger.cjs.js","iife":"./anylogger.iife.js","min":"./anylogger.min.js","types":"./anylogger.d.ts","spec":"./anylogger.spec.js","scripts":{"build":"npm run test -s && npm run minify -s && npm run docs -s","docs":"cross-env NODE_ENV=production node build.js docs","minify":"cross-env NODE_ENV=production node build.js minify","package":"cross-env NODE_ENV=production rollup -c","prepare":"npm run build","test":"npm run package -s && mocha anylogger.spec.js"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","cross-env":"^7.0.2","gzip-size":"^6.0.0","lodash":"^4.17.20","mocha":"^8.2.1","rollup":"^2.33.3","sinon":"^9.2.1","uglify-js":"^3.11.6"},"keywords":["anylogger","anylogger-console","anylogger-debug","anylogger-loglevel","anylogger-log4js","anylogger-tutorial","console","logger","logging","logging facade","microscopically small","tiny","ulog","1kB"],"gitHead":"167413f789fdd4be3fce28f9e88562d6cb9f7b76","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@1.0.6","_nodeVersion":"10.16.3","_npmVersion":"6.14.8","dist":{"integrity":"sha512-qclUYWU650ErEXoQjGg8iOxnZBKfpPQuD49hPPJFd/FcYdeCu4PAZLHHQFLwxiQXTWdEPs84zJtjCROL+uTC9g==","shasum":"efad49cb19069183f4bbf83ffa295f01bd7617d4","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-1.0.6.tgz","fileCount":10,"unpackedSize":46611,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfuSwPCRA9TVsSAnZWagAALRcP/j/bUZ0FqgTdyGp9zSqP\nVA0XfhnZStQPoPxg0vI++XrOG3UzKLSS4H/lwx5UGevp1FllFfkHt0YbqxjU\nMDx/6N2ksYLCm1DgUt5k31wkS9v58k1rXr4h+jbVkUZl0wy5PUUbh9ErDw0R\nFIofVDM1/aOtr4os+hzLCoxAy9Xk/lqEz6RDnW1KJjLz7at5TaTTsJYU5u1b\nZ0NnJ4u2UBaQhpERKcHdoiSa46ZlrsSxZHsHix4nNbl3L+cg/GBN+7XCr4Pb\n3rXjRXghnbGCeUKb3G62qr7FN8tGgRvXHvIwpo632LP4TMJ729Jv2h+d9iDm\n/ZMbW+ZJ44ZKInCQ6jhASzzEl3sPI0YGqFBFrxDDzEkTygUqtykVDCDOzNah\ntUeIJ3QQ7ca3JYzxK4LDMS7BuNu3WaYSrfE/txxfur+dQKzs/U8/zGtqWWMO\nskiMmzT9hVse708jw6lmEhtXeakehQx+6t/240kHn0VMgTaI0ey+Ku6jHRvv\n3myfY7kiFNouK3jU6nbSHeFNP5/tLRQdqF2ShNS/1fQWLdWCqF7Z5befzhml\n/yGveoHagsx0+PwXUdQvoYyydwZnNCJaIxUgjQeW46qHAgxeyLYsb/4JEFAG\nJdm61w4qm/47c2QQjpptc+KZn9CcE7szBHe+dNVYUY5SHIx/ZH2y57A5ccLf\nhYqR\r\n=Vq8G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEhFFmHX6hhv1DGpRQrdlMO2C9DGQHfZZeGpOXX57xqtAiAgvDbl3UBz7JL9brm0dwn6evjhXmpDJM+QQ0+ozmzyjg=="}]},"_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"directories":{},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_1.0.6_1605970958884_0.6417258164632111"},"_hasShrinkwrap":false},"1.0.7":{"name":"anylogger","version":"1.0.7","description":"Get a logger. Any logger.","src":"./anylogger.js","main":"./anylogger.cjs.js","iife":"./anylogger.iife.js","min":"./anylogger.min.js","types":"./anylogger.d.ts","spec":"./anylogger.spec.js","scripts":{"build":"npm run test -s && npm run minify -s && npm run docs -s","docs":"cross-env NODE_ENV=production node build.js docs","minify":"cross-env NODE_ENV=production node build.js minify","package":"cross-env NODE_ENV=production rollup -c","prepare":"npm run build","test":"npm run package -s && mocha anylogger.spec.js"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","cross-env":"^7.0.2","gzip-size":"^6.0.0","lodash":"^4.17.20","mocha":"^8.2.1","rollup":"^2.33.3","sinon":"^9.2.1","uglify-js":"^3.11.6"},"keywords":["anylogger","anylogger-console","anylogger-debug","anylogger-loglevel","anylogger-log4js","anylogger-tutorial","console","logger","logging","logging facade","microscopically small","tiny","ulog","1kB"],"gitHead":"0dc78bc1a928a613e66809b5eb4933fbf30f8810","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@1.0.7","_nodeVersion":"10.16.3","_npmVersion":"6.14.8","dist":{"integrity":"sha512-SV2Pm/6vVWgkHyrD1wRhrEd807A5aujm5lsSgKlKFjnrF18OE27PwUxkHmciTUwc31/Ok4uQBVKhqxDrVCg+0g==","shasum":"068049330169fcfbb740630b9e14af33a1d824f2","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-1.0.7.tgz","fileCount":10,"unpackedSize":46547,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfuV45CRA9TVsSAnZWagAA6EcP/2Fhv5O/lH2ypN5+BhAY\naR8gDp/1NE3mkM17gJ3p4O/OxWLm3zhL1sRcUO2C+wOJj+Tfm6HDn7CpKYN7\nFrXkuxn6t4Yo8vzUVIG7VaojMI37Sf+dqVqAwXVZlLR99ymjl64Whl710JNN\ndvnAa1QZiiTnzO1Hx/j8CMnj4khuvd5+63zNKUHSUrpNrAeAEQbgL2kuzLe0\nDNUyuFu46rtHbuc6YL3aJ5qkmjzuuZGqZVPyr1G4RCg4HPCU8xCP/BK4CF/i\nYfIV0CgxByGBXm6VMHLda9SNTQMQvzGlvWsV34QlM49iKa+8cQNifi3Y7WQ4\nVVPZIZBDPJAiknvOyenyyoIOjDNxC8vVawjITv+YmaOLATtLFFw2Htan5p25\n2rFJUSEmi0kLzKrAl7EyY91+kiQeUW+fHJaq7urv0n65r8XRlwWKpzM9xmVP\nRsQiU6xxfke6DZKZHPT/itf3lbTrGIUmn7oaFinl1FUwhZAZptmmFqwYSwag\ncRJYGtDmQMjVk5DrN1lSAqH2kGbnft8fHAGrnh5w/Yef5rlQR7LolKdliwCw\n0d+202u1zIYxd29JiejntoZmxP7HiKrqek8dYBE+RXHHImxPRrovnke2a8Ij\nZnK2weMUZK5Z2PG/BOaMOYN8pWFvTzu2di4U04aFym1R04eSI669knCu31em\nmoHK\r\n=cb1G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFAgJvMXz7fHPogWV/9/EVvoXQcVXmXaLbzG8AdJbQizAiEA++iccyFN1rI/jTsjN0dFUDIY0r4jk46dSVG9LNi8LiM="}]},"_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"directories":{},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_1.0.7_1605983801067_0.6510069290832865"},"_hasShrinkwrap":false},"1.0.8":{"name":"anylogger","version":"1.0.8","description":"Get a logger. Any logger.","src":"./anylogger.js","main":"./anylogger.cjs.js","iife":"./anylogger.iife.js","min":"./anylogger.min.js","types":"./anylogger.d.ts","spec":"./anylogger.spec.js","unpkg":"./anylogger.min.js","scripts":{"build":"npm run test -s && npm run minify -s && npm run docs -s","docs":"cross-env NODE_ENV=production node build.js docs","minify":"cross-env NODE_ENV=production node build.js minify","package":"cross-env NODE_ENV=production rollup -c","prepare":"npm run build","test":"npm run package -s && mocha anylogger.spec.js"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","cross-env":"^7.0.2","gzip-size":"^6.0.0","lodash":"^4.17.20","mocha":"^8.2.1","rollup":"^2.33.3","sinon":"^9.2.1","uglify-js":"^3.11.6"},"keywords":["anylogger","anylogger-console","anylogger-debug","anylogger-loglevel","anylogger-log4js","anylogger-tutorial","console","logger","logging","logging facade","microscopically small","tiny","ulog","1kB"],"gitHead":"7d31b444567bc52ece16ae97c223d23abfae74d1","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@1.0.8","_nodeVersion":"10.16.3","_npmVersion":"6.14.9","dist":{"integrity":"sha512-UvoI+Fv3ZbITikaPrc+ZfRyRz2mEoZiHE/1YZbjcHSrXdI7NgpWW8V2RKoj5C5jDAQiSPZTDY5JipI4v5PRTGA==","shasum":"919600c5d1358e30001eec71483f9c895a31ed9a","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-1.0.8.tgz","fileCount":10,"unpackedSize":46084,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfy7lTCRA9TVsSAnZWagAAL9AP/REPFcMGVmMznq2hvlOn\nFcAhn2fv1MTUPwBu99dboqQLCeZRDv0N6BpuZwKV+SDadJURf/Q9r6U6xm3N\n/q6Z8wMHgbTiG1nA1gcXvKbMDjeFU85e7ajJ8DOIMv02zWGm9qmkn+nBkJMS\nQ6y5WBpddUaoSRB638zF512Sdrke8AVoooCcvTEEPFPk2Ao73GAqh237yttc\nH8XA5o02+d6SPlXh6gdjGMMNubZRH2vP4KhcdBlLowqknme3wwl3ZTW6Wa+t\nQ7J1PDmPXsbYma4/Qb0D6sEHC1GQHbJHGheY2rQff5nvg901IYLZ2eOo9ZPb\nwE8KbXDszCtrCUFzqizYz/oiMPUU4a6aRE4YL8dOMdAtGaCHu2c+asR+tc7W\ndgeuv886lut8hsN4HxVPAvQEpuavEDXUAIwQJqAlvNuYqcnDj6DI/+jzhlxI\nxF6/emOm5YFsXCIuFvw9LgOcxNngYru1UvpRD+c29g+Frzn7mEWohojtL1kQ\n5o4Hlt6v5wBodQw5bHauWb9DhNuuIscZPA6y4z9+rTl/NsB/iu7wRnfakw5V\n5rk1OQLSvjNIVLqhz77F8Dfgs3HkdNTRnF4baiaFwX99n6TcSUsrzitWMt8L\n5/85kKREQ/iBH59BmOoGGiQUBZ+p2cgJr40LEWkBZ+i1DOF7uIpKwlJ0OlKl\nK9uY\r\n=JX9z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEBR8eH6o0HUMpAHWt/wrnMeiu7SniEI93C0NE1hRiGKAiEAsJxyyA2SwOlH7SQY53K0icusX63eAIQcM/JuSWWXfGk="}]},"_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"directories":{},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_1.0.8_1607186771067_0.7646426075794737"},"_hasShrinkwrap":false},"1.0.9":{"name":"anylogger","version":"1.0.9","description":"Get a logger. Any logger.","src":"./anylogger.js","main":"./anylogger.cjs.js","iife":"./anylogger.iife.js","min":"./anylogger.min.js","types":"./anylogger.d.ts","spec":"./anylogger.spec.js","unpkg":"./anylogger.min.js","scripts":{"build":"npm run test -s && npm run minify -s && npm run docs -s","docs":"cross-env NODE_ENV=production node build.js docs","minify":"cross-env NODE_ENV=production node build.js minify","package":"cross-env NODE_ENV=production rollup -c","prepare":"npm run build","test":"npm run package -s && mocha anylogger.spec.js"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","cross-env":"^7.0.2","gzip-size":"^6.0.0","lodash":"^4.17.20","mocha":"^8.2.1","rollup":"^2.33.3","sinon":"^9.2.1","uglify-js":"^3.11.6"},"keywords":["anylogger","anylogger-console","anylogger-debug","anylogger-loglevel","anylogger-log4js","anylogger-tutorial","console","logger","logging","logging facade","microscopically small","tiny","ulog","1kB"],"gitHead":"9b05b502af08c25107f55c6af61ceeda66a0a32e","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@1.0.9","_nodeVersion":"10.16.3","_npmVersion":"6.14.9","dist":{"integrity":"sha512-0dBWCjGzCbptcdKwGd2vHE5AGi44wIPSOWULwfqeUaoxs/YKQoMrpOeMBw5mh5fbmoXnTIxWhtGSclTdnC2VYQ==","shasum":"94e8cdd0fca8d976f005d46b4a0490da8344e3da","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-1.0.9.tgz","fileCount":10,"unpackedSize":46066,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfy7sJCRA9TVsSAnZWagAAwekP/1O88JwHCefkIiMCZYjW\nLrTUSotBIq6c6xQ45m/9P1qEvRlCLhkrl1G5j+CpQ/DdNgWSW35k3Q9P1qIE\nVyewXkNbPk2WjFJvNQdFbiLC6dlNrPcDqpmuRwvx/7Jpk4LZ+Ckot8qTDGq7\nBctKbSiYH5EmSvrh/1rD7oQJOfQhRcqsv/kgAlnvwd7lfHSToeDJH0BjrtZb\n+NsCcjBR98zD5oCIuiEMpvE0G3xBdLtnPVAAm1OZY5/hvYHABugv2fEqJMua\nVVPVX5zz3vLSYD7kGV+eXSPGKG4MtszTb9j6GSuywVjgqczt/OfQJ4MR6I1n\nhzngCT6j4LdZMytBuONq6JTFkTS/ccxL11WapFy8AMdyCTG/BmzEOACI4GeV\n0GaCUREbVpZFl7tpBsI/un5/HtHKubHmjIlSFOr/ExeddMxgX66XFhVaHaIx\n7iT3xy7dZbmaKl/4LCTSdpm2LeRZTphTXbvmgEZn2dxEGH7hUXyZiHUGC9+A\nkf1GT7xJPFjWnmL+CO7/73zCJxBR3xgKyy4xT0AeACwkodkx5Tbuj/a4mZ7j\ndeh/J5uxZEsJBYPrEY+4pfPPFRvBAOv1XmtWt26cpOXGPEVOXuVaIa+1AxaM\nsVbMEsnpnBTTEa3vZgbRm+TT1KPWmNaxdJFuxDQXoRwBHoSCN8vpyUxoYNQU\n787n\r\n=yNPN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDB1RABe4e66sv6+88az2QRoxXRlkOIPCt4iSaHjCbZIAiAp6Z9WNtdNmAtv9+rIWGpHpGMRTRijEj1jOjHR0YCKfg=="}]},"_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"directories":{},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_1.0.9_1607187208899_0.1927584368153663"},"_hasShrinkwrap":false},"1.0.10":{"name":"anylogger","version":"1.0.10","description":"Get a logger. Any logger.","src":"./anylogger.js","main":"./anylogger.cjs.js","iife":"./anylogger.iife.js","min":"./anylogger.min.js","types":"./anylogger.d.ts","spec":"./anylogger.spec.js","unpkg":"./anylogger.min.js","scripts":{"build":"npm run test -s && npm run minify -s && npm run docs -s","docs":"cross-env NODE_ENV=production node build.js docs","minify":"cross-env NODE_ENV=production node build.js minify","package":"cross-env NODE_ENV=production rollup -c","prepare":"npm run build","test":"npm run package -s && mocha anylogger.spec.js"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","cross-env":"^7.0.3","gzip-size":"^6.0.0","lodash":"^4.17.20","mocha":"^8.2.1","rollup":"^2.35.1","sinon":"^9.2.2","uglify-js":"^3.12.3"},"keywords":["anylogger","anylogger-console","anylogger-debug","anylogger-loglevel","anylogger-log4js","anylogger-tutorial","console","logger","logging","logging facade","microscopically small","tiny","ulog","1kB"],"gitHead":"20cbf943e9e296c3131aac00a29b903764f38f0c","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@1.0.10","_nodeVersion":"10.16.3","_npmVersion":"6.14.9","dist":{"integrity":"sha512-iZsA9nnDpeS6A19W6LcOKqAxk2pbc93rOl4KnfOItmqdvVktv1rNqqOsY7I2j8wjt0slmGnInapKnfmKAifFDw==","shasum":"0a2df51403ecf76d58aec80579ce3e7514cae164","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-1.0.10.tgz","fileCount":10,"unpackedSize":45230,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf63maCRA9TVsSAnZWagAArzcQAKLZ1+/Z6Sa+emK+lG4X\nKUXFIcRMu/Q6luVf736PcakOu5Ig476qVXjhKrioodLa0Z0CW34FPM+yRA8U\nq7qhSqw9k+R4CFDRX/s7gfZcArgtmFb+A+YJZpGvE9ntyjDeiweNbQb2/Btx\n5jvbGWttQI/QWwLHEX91J2L1b6ZqnDi/PQFSl+aR+FDosAyiKwp+cwnrJXR2\nClqFBxJMAv0xArP5LmA7wgNBzMEMzkvP2ohbwFkXO9j5jqxl0NVw5UPOkqCF\niTCTLSmB9I+WfWjKvhU2cze/ZHyd2IyYhJ4Mwt8XWJav8FRmbTlL2sGeOWk5\nia0XYWEzO54bV1Ew94krjvqt0AAOfqWqN2eCdNPHk6f2BJGyjmnNbvoMeCm7\nQsJ6tiP5pJQKVyZO9cKbxs+H/SrxVxG3FjglNch8A7q1HhemQsq7MKfLnOj+\nYZCMTbXaKdi2+2WcSf2v493g8mQ8qsRT9/xbin9yyubvSS7gmJfrTLnPkgAY\nWzBK8iWtLpSb1O4hJDt7ZxprlGRymVxQ/9Nc57gv0R+HhpCrp2mEAOIMvoQm\n8aT0PQ8IQ3asfqVswxCcqyQdychDUfAYIUF17FLaE9Ua6/eEvkfOtXBFjSDl\nbjUd1xqLEJ4S+4dTCXK0ovUI4X7kyxxwK1p1yUK/tKEobU7vcYj5dDFXaIKx\nl9o0\r\n=X5dN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkJGHqBfCwx7Roc2quraTu+VOw1marXUsTlMtkWpI/gAIgNgtke2yilo1E0Wajnxz/JZvga0/STLu54wKAOFi5e0U="}]},"_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"directories":{},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_1.0.10_1609267610089_0.4600480966412519"},"_hasShrinkwrap":false},"1.0.11":{"name":"anylogger","version":"1.0.11","description":"Get a logger. Any logger.","src":"./anylogger.js","main":"./anylogger.cjs.js","iife":"./anylogger.iife.js","min":"./anylogger.min.js","types":"./anylogger.d.ts","spec":"./anylogger.spec.js","unpkg":"./anylogger.min.js","scripts":{"build":"npm run test -s && npm run minify -s && npm run docs -s","docs":"cross-env NODE_ENV=production node build.js docs","minify":"cross-env NODE_ENV=production node build.js minify","package":"cross-env NODE_ENV=production rollup -c","prepare":"npm run build","test":"npm run package -s && tsc && node ./test.js && mocha anylogger.spec.js"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"dependencies":{},"devDependencies":{"chai":"^4.3.4","cross-env":"^7.0.3","gzip-size":"^6.0.0","mocha":"^8.3.2","rollup":"^2.44.0","sinon":"^10.0.0","typescript":"^4.2.3","uglify-js":"^3.13.3"},"keywords":["anylogger","anylogger-console","anylogger-debug","anylogger-loglevel","anylogger-log4js","anylogger-tutorial","console","logger","logging","logging facade","microscopically small","tiny","ulog","1kB"],"gitHead":"8621f57bd755a4173539128bd7f6ec2850fe066f","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_id":"anylogger@1.0.11","_nodeVersion":"10.16.3","_npmVersion":"6.14.11","dist":{"integrity":"sha512-sKTWPTG2/d71kLGVmymMJQQslUppxvCz6DN/eODL3/ckmfygZzD0t4P5tRXE3qpM62jI98F/YTHHzFhM12jiJQ==","shasum":"0ee55f294c6b921070dc29acd2ac9f1f35200625","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-1.0.11.tgz","fileCount":10,"unpackedSize":44900,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgahmXCRA9TVsSAnZWagAAU08QAJD1XytHSvBZHW1+KG+O\ndIaynB7yvYVVhrECpl1Nn059fpQHad3nJI45Bl0+8yDIalZ4hWkEsST20++C\nSdtzsswuhCKiwXz+tusywlgyA8hgeetKt3hsz4d0RVMC3HtjoI2LYnlPvPzh\naY7sLzbJXnlHQceVsAE9HHvc4M5I5FevYXOiUlqfLAYP2UUze7iSyxI2yClP\nwAqakJMP0AcpVY7Zhsyd21wVp2pG/Zte3mW3jovXwqowYO7I8rr8AeALK7zV\nBTSVH4Y3rYYJ6OozlNNdXalTSbD5OhOeKAfGkvlGWJaqfWz7J8KtVLwylNK7\n30XKBzYd0GWKuAALY+KuUamI1D0p0NyzJLerTHv7aUYzvXzfVJdqKKCvSLt+\nkmLnvC/QUGjA1O5CRRKtGfbjZIiCFj/2/j3dJWZHSX3qnO7XEvG2DUE3VvDK\necvylmdq+2JRndQ8nwWBoK8FZc21a0QBOcFC6XTR3KosKLgSJhEuDBISlnvX\nqmIxZzreoi4tL1EUyIIg59GmcA4ZikD7jHUAUCX88k3Wh1cVGT0uL1gnqCkr\n5IS5p/ze+nQWb7lMFmpYj2utBt6i1iRbDoxoqqIUUgnN+HVllZt2oLUJcAF7\nZFPbo4P74kqRovgOwHsvb29WBmvG9R9F1Eyw/2FpTYq65lIIq8H/9FEnQV4n\nx4Q9\r\n=nMZK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHnvhpHz+T+o4BJBIpWoEhn0K3vtkHjviGy1G6W1PGZjAiA6z025kqrFFQSjk/HVrX6IvTLZ2ecbChwL9cCdQtHqdA=="}]},"_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"directories":{},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_1.0.11_1617566102654_0.7408431777793414"},"_hasShrinkwrap":false},"1.1.0-beta.0":{"name":"anylogger","version":"1.1.0-beta.0","type":"module","description":"Get a logger. Any logger.","src":"./anylogger.js","main":"./anylogger.js","cjs":"./anylogger.cjs","iife":"./anylogger.iife.js","min":"./anylogger.min.js","types":"./anylogger.d.ts","spec":"./anylogger.spec.js","unpkg":"./anylogger.min.js","exports":{".":{"import":"./anylogger.js","require":"./anylogger.cjs"}},"scripts":{"build":"tsc && npm run test -s && npm run minify -s && npm run docs -s","clean":"rimraf anylogger.cjs anylogger.d.ts anylogger.d.ts.map anylogger.iife.js anylogger.js anylogger.js.map anylogger.min.js","docs":"cross-env NODE_ENV=production node build.js docs","minify":"cross-env NODE_ENV=production node build.js minify","package":"cross-env NODE_ENV=production rollup -c","prepare":"npm run build","test":"npm run package -s && mocha anylogger.spec.js"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"devDependencies":{"@types/node":"^20.11.19","chai":"^5.1.0","cross-env":"^7.0.3","gzip-size":"^7.0.0","mocha":"^10.3.0","rimraf":"^5.0.5","rollup":"^4.12.0","sinon":"^17.0.1","typescript":"^5.3.3","uglify-js":"^3.17.4"},"keywords":["anylogger","anylogger-console","anylogger-debug","anylogger-loglevel","anylogger-log4js","anylogger-tutorial","console","logger","logging","logging facade","microscopically small","tiny","ulog","1kB"],"_id":"anylogger@1.1.0-beta.0","readme":"# anylogger <sub><sup>1.0.11</sup></sub>\n### Get a logger. Any logger.\n\n[![npm](https://img.shields.io/npm/v/anylogger.svg)](https://npmjs.com/package/anylogger)\n[![license](https://img.shields.io/npm/l/anylogger.svg)](https://opensource.org/licenses/MIT)\n![mind BLOWN](https://img.shields.io/badge/mind-BLOWN-ff69b4.svg)\n\n\n## The logger for libraries\n\nWhen we want to do logging from a library, we don't want to force the choice of\nlogging framework on the application developer. Instead, we want to use whatever\nlogging framework the application developer selected. `anylogger` let's you do\njust that.\n\n\n## Quickstart\n\n<table>\n  <tr>\n    <th><h3>Library</h3></th>\n    <th><h3>App with <a href=\"https://npmjs.com/package/anylogger-debug\"\n    ><tt>debug</tt></a></h3></th>\n    <th><h3>App with <a href=\"https://npmjs.com/package/anylogger-loglevel\"\n    ><tt>loglevel</tt></a></h3></th>\n    <th><h3>App with <a href=\"https://npmjs.com/package/ulog\"\n    ><tt>ulog</tt></a></h3></th>\n    <th><h3>App with <a href=\"https://npmjs.com/package/anylogger-log4js\"\n    ><tt>log4js</tt></a></h3></th>\n  </tr>\n  <tr>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-library')\nlog('Anylogger is easy!')</pre>\n      <p>Install your preferred logger\n      and it's adapter as <a href=\"#install-dev-dependencies-in-a-library-project\">dev dependencies</a>.</p>\n    </td>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger\n debug anylogger-debug</pre>\n      <h5>Add to entry point</h5>\n      <i>index.js</i>\n      <pre>import \"anylogger-debug\"</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-app')\nlog('Anylogger is easy!')</pre>\n    </td>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger\n loglevel anylogger-loglevel</pre>\n      <h5>Add to entry point</h5>\n      <i>index.js</i>\n      <pre>import \"anylogger-loglevel\"</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-app')\nlog('Anylogger is easy!')</pre>\n    </td>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger\n ulog</pre>\n      <h5>Add to entry point</h5>\n      <i>index.js</i>\n      <pre>import \"ulog\"</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-app')\nlog('Anylogger is easy!')</pre>\n    </td>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger\n log4js anylogger-log4js</pre>\n      <h5>Add to entry point</h5>\n      <i>index.js</i>\n      <pre>import \"anylogger-log4js\"</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-app')\nlog('Anylogger is easy!')</pre>\n    </td>\n  </tr>\n</table>\n\n\n## What is this?\n\n### A logging facade\n\nWe, the Javascript community, really need a logging facade. There are dozens\nof logging libraries around and we library authors face a challenge. Which logger\ndo we pick? Should we make this configurable? Should we just not log? Use the\nconsole directly? How do we deal with this complexity?\n\nIn software architecture, a\n[facade](https://en.wikipedia.org/wiki/Facade_pattern) hides a complex system\nbehind a simple interface. In the context of our logging problem, we can have\nour library log to a simple facade object. In our application we back the\nfacade object by the actual logging framework with an\n[adapter](https://en.wikipedia.org/wiki/Adapter_pattern).\n\nSo what we need is a simple and small logging facade and a bunch of adapters\nfor popular loggers.\n\n### Introducing `anylogger`\n\nA tiny ~[264](#gzip-size) bytes logging facade that you can include in your\nlibrary to support logging, while at the same time allowing application\ndevelopers to plug in any logging framework they choose.\n\nInstead of building in your own library specific configuration mechanism,\nor forcing the choice for a certain logging framework on your users,\nor just abandoning logging altogether, choose `anylogger` and for just\n~[264](#gzip-size) bytes shared between all libraries doing this, we can\nplug in any framework of our choice and all libraries will automatically\nstart to use that framework. Wouldn't it be much better and easier?\n\n\n## Download\n\n* [anylogger.ts](https://unpkg.com/anylogger@1.1.0-beta.0/anylogger.ts)\n  (fully commented source ~6kB)\n* [anylogger.d.ts](https://unpkg.com/anylogger@1.1.0-beta.0/anylogger.d.ts)\n  (typescript type definitions ~5kB)\n* [anylogger.js](https://unpkg.com/anylogger@1.1.0-beta.0/anylogger.js)\n  (transpiled es6 ecmascript module ~1kB)\n* [anylogger.cjs](https://unpkg.com/anylogger@1.1.0-beta.0/anylogger.cjs)\n  (transpiled es6 commonjs module ~1kB)\n* [anylogger.min.js](https://unpkg.com/anylogger@1.1.0-beta.0/anylogger.min.js)\n  (minified 361 bytes, gzipped ~[264](#gzip-size) bytes)\n\n\n## CDN\n\n*index.html*\n```html\n<script src=\"https://unpkg.com/anylogger@1.1.0-beta.0\"></script>\n<script>(function(){ // IIFE\n  var log = anylogger('index.html')\n  log.info('Logging is simple!')\n})()</script>\n```\n\nNote that anylogger by default does nothing. You need an adapter to see output.\nFor example, to send all logging to the console, you can use\n[`anylogger-console`](https://npmjs.com/package/anylogger-console).\n\n\n## Install\n\nDepending on your project type, install anylogger, your logging framework of\nchoice and an anylogger adapter if needed.\n\n### Install in a library project\n\nIf you are building a library, install anylogger as a dependency:\n\n```sh\nnpm install --save anylogger\n```\n\nThis will add `anylogger` as a dependency to your `package.json`.\n\n### Install dev dependencies in a library project\n\nIf you are building a library, you can use the logging framework\nyou prefer without tightly coupling your library to it by installing\nthat library and the adapter for it if needed as development dependencies:\n\n**For [anylogger-console](https://npmjs.com/package/anylogger-console)**:\n\n```sh\nnpm install --save-dev anylogger-console\n```\n\n**For [debug](https://npmjs.com/package/debug)**:\n\n```sh\nnpm install --save-dev debug anylogger-debug\n```\n> See [anylogger-debug](https://npmjs.com/package/anylogger-debug)\n\n**For [loglevel](https://npmjs.com/package/loglevel)**:\n\n```sh\nnpm install --save-dev loglevel anylogger-loglevel\n```\n> See [anylogger-loglevel](https://npmjs.com/package/anylogger-loglevel)\n\n**For [ulog](https://npmjs.com/package/ulog)**:\n\n```sh\nnpm install --save-dev ulog\n```\n> No adapter is needed for `ulog`\n\n**For [log4js](https://npmjs.com/package/log4js)**:\n\n```sh\nnpm install --save-dev log4js anylogger-log4js\n```\n> See [anylogger-log4js](https://npmjs.com/package/anylogger-log4js)\n\n### Install in an application project\n\nIf you are building an application project and have selected a logging\nframework, install anylogger, the selected logging framework and the\nadapter for that logging framework if needed.\n\n**For [anylogger-console](https://npmjs.com/package/anylogger-console)**:\n\n```sh\nnpm install --save anylogger anylogger-console\n```\n\n**For [debug](https://npmjs.com/package/debug)**:\n\n```sh\nnpm install --save anylogger debug anylogger-debug\n```\n> See [anylogger-debug](https://npmjs.com/package/anylogger-debug)\n\n**For [loglevel](https://npmjs.com/package/loglevel)**:\n\n```sh\nnpm install --save anylogger loglevel anylogger-loglevel\n```\n> See [anylogger-loglevel](https://npmjs.com/package/anylogger-loglevel)\n\n**For [ulog](https://npmjs.com/package/ulog)**\n\n```sh\nnpm install --save anylogger ulog\n```\n> No adapter is needed for `ulog`\n\n**For [log4js](https://npmjs.com/package/log4js)**:\n\n```sh\nnpm install --save anylogger log4js anylogger-log4js\n```\n> See [anylogger-log4js](https://npmjs.com/package/anylogger-log4js)\n\nCheck out all\n[available adapters](https://www.npmjs.com/search?q=keywords:anylogger).\n\n\n## Include\n\nDepending on the type of project, either just use anylogger, or also include the adapter.\n\n### Include in a library\n\nIn your library code, only use anylogger and restrict yourself to the\n[Anylogger API](#anylogger-api) to stay framework-independent:\n\n#### require\n*my-library.js*\n```js\nvar log = require('anylogger')('my-library')\n```\n\n#### import\n*my-library.js*\n```js\nimport anylogger from 'anylogger'\nconst log = anylogger('my-library')\n```\n\n> This way, your library does not get tightly coupled to any specific logger\n\n### Include in tests for your library\n\nIn the tests for your library code, you can include an adapter and make your\nlibrary use the logging framework of your choice without having to add it as a\ndependency for your library. You can add them as\n[development dependencies](#install-dev-dependencies-in-a-library-project).\n\n#### require\n*my-library.test.js*\n```js\n// e.g. for ulog\nrequire('ulog')\n// all anylogger loggers will use ulog\nvar log = require('anylogger')('my-lbrary:test')\n```\n\n#### import\n*my-library.test.js*\n```js\n// e.g. for ulog\nimport 'ulog'\n// all anylogger loggers will use ulog\nimport anylogger from 'anylogger'\nconst log = anylogger('my-lbrary:test')\n```\n\n### Include in an application project\n\nIn your main entry point, include your adapter or library with native support\nso it extends anylogger:\n\n#### require\n*main.js*\n```js\n// e.g. for debug\nrequire('anylogger-debug')\n// all anylogger loggers will use debug\n```\n\n#### import\n*main.js*\n```js\n// e.g. for debug\nimport 'anylogger-debug'\n// all anylogger loggers will use debug\n```\n\nIn your other modules, use only anylogger and restrict yourself to the\n[Anylogger API](#anylogger-api) to stay framework-independent:\n\n#### require\n*my-module.js*\n```js\nvar log = require('anylogger')('my-module')\n```\n\n#### import\n*my-module.js*\n```js\nimport anylogger from 'anylogger'\nconst log = anylogger('my-module')\n```\n\n\n## Using anylogger\n\nAnylogger is very natural to use:\n\n```js\nvar log = require('anylogger')('my-module')\n\nlog('A log message')\nlog('debug', 'A debug message')\nlog('warn', 'A warning message')\nlog.info(log.name + ' starting...')\nlog.error('Something went wrong', new Error('Oh no!'))\nif (log.enabledFor('warn')) {\n  log.warn(expensiveArguments())\n}\n```\n\nIf you are able to restrict yourself to the [Anylogger API](#anylogger-api),\nyour code will be framework independent and will work with any supported\nlogging library.\n\n```js\nlog.info('Logging is easy!')\n```\n\n\n## Anylogger API\n\nSo what does this API look like?\n\n### anylogger\n\n```js\nfunction anylogger(name, options) => logger\n```\n\nThe main function to call to get a logger.\nAccepts two arguments.\n\n#### name\nThe name of the logger. String. Optional. Defaults to `undefined`.\nThe recommended format is `<package-name>[:<sub>[:<sub> [..]]]`,\nas this is the [convention](https://www.npmjs.com/package/debug#conventions)\nused by the highly popular `debug` module. But you are free to pick any name\nyou want. You only get a logger if you supply a name. If the name is\nnot given `anylogger()` will return an object containing all loggers,\nkeyed by name.\n\n#### options\nAn optional options object. Object. Optional. Defaults to `undefined`.\nThe use of such options objects varies wildly amongst implementations so\nit is recommended to avoid using it where possible. However in case of\nimplementations that require it, anylogger passes any options object it\nis given on to [`anylogger.new`](#anyloggernew) to allow it to be used\nwhere needed.\n\n**When no arguments are given** anylogger returns an object containing\nall loggers created so far, keyed by name.\n\n**When a name is given** anylogger returns the existing logger with that\nname, or creates a new one by calling [`anylogger.new`](#anyloggernew).\n\nThe returned logger adheres to the Logging API described below.\n\n\n## Logging API\n\nThe logger returned by [`anylogger`](#anylogger) is a function that can\ndo logging on it's own:\n\n```js\nlog('message')          // logs a message at `log` level\nlog('info', 'message')  // logs a message at `info` level\n```\n\nIn addition, the logger looks like a simple console object:\n\n```js\nlog.debug('message')\nlog.info('message')\n```\n\nBecause of this, the logger created by anylogger is compatible with most\nlogging frameworks out there, which mostly use one or both of these approaches.\n\nThe main API looks like this (in pseudo code):\n\n```js\nlog: function([level='log'], ...args)\nlog.error: function(...args)\nlog.warn: function(...args)\nlog.info: function(...args)\nlog.log: function(...args)\nlog.debug: function(...args)\nlog.trace: function(...args)\nlog.enabledFor: function(level) => truthy or falsey\n```\n\nAnd that's about it. However this covers the basic logging needs.\n\n> Note that all logging methods here are part of the upcoming\n> [Console standard](https://console.spec.whatwg.org/), but not all platforms\n> and frameworks support all of them. In particular the `debug` method is not\n> available everywhere. Anylogger will make sure that the `debug` function is\n> polyfilled if needed.\n\nIs your logging framework not supported? No fear, just...\n\n\n## Write an anylogger adapter\n\nTo write an anylogger adapter, you need to make a project that includes both\nanylogger and the logging framework the adapter is for as peer dependencies.\n\nYou then need to modify one or more of the\n[anylogger extension points](#anylogger-extension-points)\nso the created loggers will be compliant with both the anylogger\n[Logging API](#logging-api) as well as with the logging framework's own API.\n\nIt is recommended you call your library `anylogger-[adapter]`, where\n`[adapter]` should be replaced with the name of the logging framework\nthe adapter is for. For example, the adapter for `debug` is called\n`anylogger-debug`.\n\nIn addition, it is recommended you add the keyword `\"anylogger\"` to the\n*package.json* file of your adapter project, so it will show up in the list of\n[available adapters](https://www.npmjs.com/search?q=keywords:anylogger).\n\n### anylogger extension points\n\nThe process of logger creation and invocation is split up in such a way\nas to optimize possible extension points allowing extensions to re-use\nanylogger functionality and avoid having to duplicate code. The extension\npoints are:\n\n#### anylogger.levels\n```js\nanylogger.levels = {error:1, warn:2, info:3, log:4, debug:5, trace:6}\n```\nAn object containing a mapping of level names to level values.\n\nTo be compliant with the anylogger API, loggers should support at least\nthe log methods corresponding to the default levels, but they may define\nadditional levels and they may choose to use different numeric values\nfor all the levels.\n\nThe guarantees the Anylogger API makes are:\n* there is a logging method corresponding to each level listed in `anylogger.levels`\n* the levels `error`, `warn`, `info`, `log`, `debug` and `trace` are always there\n* each level corresponds to a numeric value\n\nNote that the Anylogger API explicitly does not guarantee that all levels\nhave distinct values or that the numeric values will follow any pattern\nor have any specific order. For this reason it is best to think of levels\nas separate log channels, possibly going to different output locations.\n\nYou can replace or change this object to include levels corresponding with\nthose available in the framework you are writing an adapter for. Please\nmake sure to always include the default levels as well so all code can\nrely on the 6 console methods `error`, `warn`, `info`, `log`, `debug` and\n`trace` to always be there.\n\n#### anylogger.new\n```js\nanylogger.new(name, options) => logger\n```\nCreates a new logger function that calls `anylogger.log` when invoked.\n\nUses `new Function(..)` to create a named function so that function.name\ncorresponds to the module name given. Polyfills function.name on platforms\nwhere it is not natively available.\n\n##### name\nThe name of the new logger. String. Required.\n\n##### options\nAn optional options object. Object. Optional.\n\nIf the logging framework you are writing an adapter for uses an options\nobject, you should override `anylogger.new` and do something useful with\nthe options object here (set it as a property on the logger for example),\nbecause the default implementation just ignores it.\n\nInstead of completely trying to replace the original method, I recommend you\nchain it to include your one-time customizations like this:\n\n```js\nimport anylogger from 'anylogger'\n\n// save the original function\nconst make = anylogger.new\n\n// override anylogger.new\nanylogger.new = (name, options) => {\n  // call the original function to chain it\n  var logger = make(name, options)\n  // do something useful with the options object\n  logger.options = options\n  // return the customized logger\n  return logger\n}\n```\n\n> All anylogger methods are independent of `this` so they can all be easily chained\n\nIf you need to re-apply customizations any time relevant config changes (such\nas active log level changing), override `anylogger.ext`.\n\n#### anylogger.ext\n```js\nanylogger.ext(logger) => logger\n```\n\nCalled when a logger needs to be extended, either because it was newly\ncreated, or because it's configuration or settings changed in some way.\n\nThis method must ensure that a log method is available on the logger for\neach level in `anylogger.levels`.\n\nWhen overriding `anylogger.ext`, please ensure the function can safely\nbe called multiple times on the same object\n\n##### logger\nThe logger that should be (re-)extended. Function. Required.\n\nThe default implementation loops over the\n[`anylogger.levels`](#anyloggerlevels) and creates noop methods for each level.\nAdditionally it creates a noop `enabledFor` that always returns `undefined`.\n\nYou can override or chain this method to change the way the log methods are\n(re-)created. In a library that supports log levels, all methods corresponding\nto log levels equal to or higher than the currently active level might be\nreplaced with console methods instead. Or maybe the destination of the log\nmessages might change dynamically based on configuration. Apply such changes\nin `anylogger.ext` as it will be called again whenever relevant config changes.\nThis allows adapters to (re-)extend the logger so that the new configuration\ntakes effect.\n\n> You may need to ensure in your adapter that `anylogger.ext` is called\n> whenever relevant config changes. By hooking into setters for example.\n\n#### anylogger.log\n```js\nanylogger.log([level='log'], ...args)\n```\nThe log function returned by anylogger calls `anylogger.log`, which determines\nthe log level and invokes the appropriate log method.\n\nPlease have a look at the\n[source](https://unpkg.com/anylogger@1.1.0-beta.0/anylogger.js)\nit should make it more clear how to write an adapter. Also consider studying\nthe [available adapters](https://www.npmjs.com/search?q=keywords:anylogger)\nand learn by example.\n\n\n## Give something back\n\nIf you wrote an `anylogger` adapter, make sure to share it back with the\ncommunity. Publish it to NPM for all to use!\n\n\n## Credits\n\nCredits go to these people, who helped with this project:\n\n* [Jakub Jirutka](https://github.com/jirutka) who [contributed](https://github.com/Download/anylogger/pull/2) TypeScript type declarations.\n* [TJ Holowaychuk](https://github.com/tj) for writing [debug](https://npmjs.com/package/debug)\n* [Tim Perry](https://github.com/pimterry) for writing [loglevel](https://npmjs.com/package/loglevel)\n* The authors of log4js, log4js-node, morgan, bunyan, pino and all other log libraries out there\n\n\n## Issues\n\nAdd an issue in this project's\n[issue tracker](https://github.com/download/anylogger/issues)\nto let me know of any problems you find, or questions you may have.\n\n\n## Copyright\n\n© 2020 by [Stijn de Witt](https://stijndewitt.com). Some rights reserved.\nContributions by [Jakub Jirutka](https://github.com/jirutka).\n\n\n## License\n\nLicensed under the [MIT Open Source license](https://opensource.org/licenses/MIT).\n\n\n## gzip-size\n\nThe GZIP algorithm is available in different flavours and with different\npossible compression settings. The sizes quoted in this README have been\nmeasured using [gzip-size](https://npmjs.com/package/gzip-size)\nby [Sindre Sorhus](https://github.com/sindresorhus), your mileage may vary.\n","readmeFilename":"README.md","gitHead":"7133f8eca403b98b582bab68e2300066c54ed8af","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_nodeVersion":"18.19.0","_npmVersion":"10.2.4","dist":{"integrity":"sha512-pExx8spejAC+owU83Or7GiZ+rqe/yPhC9tpR9qDqFl1mTIL5z3ja4sdY/j95/tcu6/E7QQDknJ8rPU+8/Sy+XA==","shasum":"5207a0209d4357fb3c6a47b29e5fa5645f7d3426","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-1.1.0-beta.0.tgz","fileCount":11,"unpackedSize":46242,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDIpISbVMG9sEc3yVu5xUlwA5z1XGkohzo9gpg7jW+b5AIgByW7yeCp4pvCrnFj0Z3FgavfdFfWlop2aD6fiwyagUg="}]},"_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"directories":{},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_1.1.0-beta.0_1708183117924_0.0287170512038053"},"_hasShrinkwrap":false},"1.1.0-beta.1":{"name":"anylogger","version":"1.1.0-beta.1","description":"Get a logger. Any logger.","type":"module","exports":{".":{"import":"./anylogger.js","require":"./anylogger.cjs"}},"src":"./anylogger.js","main":"./anylogger.js","cjs":"./anylogger.cjs","iife":"./anylogger.iife.js","min":"./anylogger.min.js","types":"./anylogger.d.ts","spec":"./anylogger.spec.js","unpkg":"./anylogger.min.js","scripts":{"build":"tsc && npm run test -s && npm run minify -s && npm run docs -s","clean":"rimraf anylogger.cjs anylogger.d.ts anylogger.d.ts.map anylogger.iife.js anylogger.js anylogger.js.map anylogger.min.js","docs":"cross-env NODE_ENV=production node build.js docs","minify":"cross-env NODE_ENV=production node build.js minify","package":"cross-env NODE_ENV=production rollup -c","prepare":"npm run build","test":"npm run package -s && mocha anylogger.spec.js"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"devDependencies":{"@types/node":"^20.11.19","chai":"^5.1.0","cross-env":"^7.0.3","gzip-size":"^7.0.0","mocha":"^10.3.0","rimraf":"^5.0.5","rollup":"^4.12.0","sinon":"^17.0.1","typescript":"^5.3.3","uglify-js":"^3.17.4"},"keywords":["anylogger","anylogger-console","anylogger-debug","anylogger-loglevel","anylogger-log4js","anylogger-tutorial","console","logger","logging","logging facade","microscopically small","tiny","ulog","1kB"],"_id":"anylogger@1.1.0-beta.1","readme":"# anylogger <sub><sup>1.1.0-beta.1</sup></sub>\n### Get a logger. Any logger.\n\n[![npm](https://img.shields.io/npm/v/anylogger.svg)](https://npmjs.com/package/anylogger)\n[![license](https://img.shields.io/npm/l/anylogger.svg)](https://opensource.org/licenses/MIT)\n![mind BLOWN](https://img.shields.io/badge/mind-BLOWN-ff69b4.svg)\n\n\n## The logger for libraries\n\nWhen we want to do logging from a library, we don't want to force the choice of\nlogging framework on the application developer. Instead, we want to use whatever\nlogging framework the application developer selected. `anylogger` let's you do\njust that.\n\n\n## Quickstart\n\n<table>\n  <tr>\n    <th><h3>Library</h3></th>\n    <th><h3>App with <a href=\"https://npmjs.com/package/anylogger-debug\"\n    ><tt>debug</tt></a></h3></th>\n    <th><h3>App with <a href=\"https://npmjs.com/package/anylogger-loglevel\"\n    ><tt>loglevel</tt></a></h3></th>\n    <th><h3>App with <a href=\"https://npmjs.com/package/ulog\"\n    ><tt>ulog</tt></a></h3></th>\n    <th><h3>App with <a href=\"https://npmjs.com/package/anylogger-log4js\"\n    ><tt>log4js</tt></a></h3></th>\n  </tr>\n  <tr>\n    <td><h5>Install</h5>\n      <pre>npm i -D anylogger</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-library')\nlog('Anylogger is easy!')</pre>\n      <p>Add to peerDependencies and install\n      an adapter as <a href=\"#install-dev-dependencies-in-a-library-project\"\n      >dev dependencies</a>.</p>\n    </td>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger\n debug anylogger-debug</pre>\n      <h5>Add to entry point</h5>\n      <i>index.js</i>\n      <pre>import adapter from \"anylogger-debug\"\nimport anylogger from 'anylogger'\nadapter(anylogger)</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-app')\nlog('Anylogger is easy!')</pre>\n    </td>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger\n loglevel anylogger-loglevel</pre>\n      <h5>Add to entry point</h5>\n      <i>index.js</i>\n      <pre>import adapter from \"anylogger-loglevel\"\nimport anylogger from 'anylogger'\nadapter(anylogger)</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-app')\nlog('Anylogger is easy!')</pre>\n    </td>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger\n ulog</pre>\n      <h5>Add to entry point</h5>\n      <i>index.js</i>\n      <pre>import adapter from \"ulog\"\nimport anylogger from 'anylogger'\nadapter(anylogger)</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-app')\nlog('Anylogger is easy!')</pre>\n    </td>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger\n log4js anylogger-log4js</pre>\n      <h5>Add to entry point</h5>\n      <i>index.js</i>\n      <pre>import adapter from \"anylogger-log4js\"\nimport anylogger from 'anylogger'\nadapter(anylogger)</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-app')\nlog('Anylogger is easy!')</pre>\n    </td>\n  </tr>\n</table>\n\n\n## What is this?\n\n### A logging facade\n\nWe, the Javascript community, really need a logging facade. There are dozens\nof logging libraries around and we library authors face a challenge. Which logger\ndo we pick? Should we make this configurable? Should we just not log? Use the\nconsole directly? How do we deal with this complexity?\n\nIn software architecture, a\n[facade](https://en.wikipedia.org/wiki/Facade_pattern) hides a complex system\nbehind a simple interface. In the context of our logging problem, we can have\nour library log to a simple facade object. In our application we back the\nfacade object by the actual logging framework with an\n[adapter](https://en.wikipedia.org/wiki/Adapter_pattern).\n\nSo what we need is a simple and small logging facade and a bunch of adapters\nfor popular loggers.\n\n### Introducing `anylogger`\n\nA tiny ~[259](#gzip-size) bytes logging facade that you can include in your\nlibrary to support logging, while at the same time allowing application\ndevelopers to plug in any logging framework they choose.\n\nInstead of building in your own library specific configuration mechanism,\nor forcing the choice for a certain logging framework on your users,\nor just abandoning logging altogether, choose `anylogger` and for just\n~[259](#gzip-size) bytes shared between all libraries doing this, we can\nplug in any framework of our choice and all libraries will automatically\nstart to use that framework. Wouldn't it be much better and easier?\n\n\n## Download\n\n* [anylogger.ts](https://unpkg.com/anylogger@1.1.0-beta.1/anylogger.ts)\n  (fully commented source ~7kB)\n* [anylogger.d.ts](https://unpkg.com/anylogger@1.1.0-beta.1/anylogger.d.ts)\n  (typescript type definitions ~6kB)\n* [anylogger.js](https://unpkg.com/anylogger@1.1.0-beta.1/anylogger.js)\n  (javascript esm module ~2kB)\n* [anylogger.cjs](https://unpkg.com/anylogger@1.1.0-beta.1/anylogger.cjs)\n  (javascript commonjs module ~2kB)\n* [anylogger.min.js](https://unpkg.com/anylogger@1.1.0-beta.1/anylogger.min.js)\n  (minified 355 bytes, gzipped ~[259](#gzip-size) bytes)\n\n\n## CDN\n\n*index.html*\n```html\n<script src=\"https://unpkg.com/anylogger@1.1.0-beta.1\"></script>\n<script>(function(){ // IIFE\n  var log = anylogger('index.html')\n  log.info('Logging is simple!')\n})()</script>\n```\n\nNote that anylogger by default does nothing. You need an adapter to see output.\nFor example, to send all logging to the console, you can use\n[`anylogger-console`](https://npmjs.com/package/anylogger-console).\n\n\n## Install\n\nAlways only install anylogger in application projects. In library projects,\ninstall anylogger as a dev dependency and make it a peer dependency.\n\n### Install in an application project\n\nIf you are building an application project and have selected a logging\nframework, install anylogger, the selected logging framework and the\nadapter for that logging framework if needed.\n\n**For [anylogger-console](https://npmjs.com/package/anylogger-console)**:\n\n```sh\nnpm install --save anylogger anylogger-console\n```\n\n**For [debug](https://npmjs.com/package/debug)**:\n\n```sh\nnpm install --save anylogger debug anylogger-debug\n```\n> See [anylogger-debug](https://npmjs.com/package/anylogger-debug)\n\n**For [loglevel](https://npmjs.com/package/loglevel)**:\n\n```sh\nnpm install --save anylogger loglevel anylogger-loglevel\n```\n> See [anylogger-loglevel](https://npmjs.com/package/anylogger-loglevel)\n\n**For [ulog](https://npmjs.com/package/ulog)**\n\n```sh\nnpm install --save anylogger ulog\n```\n> No adapter is needed for `ulog`\n\n**For [log4js](https://npmjs.com/package/log4js)**:\n\n```sh\nnpm install --save anylogger log4js anylogger-log4js\n```\n> See [anylogger-log4js](https://npmjs.com/package/anylogger-log4js)\n\nCheck out all\n[available adapters](https://www.npmjs.com/search?q=keywords:anylogger).\n\n\n### Install in a library project\n\nIf you are building a library, install anylogger as a dev-dependency:\n\n```sh\nnpm install --save-dev anylogger\n```\n\nThis will add `anylogger` as a dev-dependency to your `package.json`.\n\nTo ensure that application projects using your library also install\n`anylogger`, make it a peer dependency. Add this to *package.json*:\n\n```json\n\"peerDependencies\": {\n  \"anylogger\": \"1.x || >=1.1.0-beta || >=1.2.0-beta || >=1.3.0-beta || >=1.4.0-beta || >=1.5.0-beta || >=1.6.0-beta || >=1.7.0-beta || >=1.8.0-beta || >=1.9.0-beta\"\n}\n```\n\n>\n> The list of (future) betas is an annoyance in the way NPM deals with beta\n> tags unfortunately. IMHO it is clear that `1.1.0-beta` matches `1.x` and\n> should thus be covered by it, but alas, NPM thinks otherwise.\n>\n> If you want your library to also work with possible future betas of\n> anylogger, then include this list of betas (recommended).\n>\n\nAdd anylogger to your install instructions in your project README.md:\n\n>\n> ### Install\n>\n> `npm install --save my-library anylogger`\n>\n\n### Install dev dependencies in a library project\n\nIf you are building a library, you can use the logging framework\nyou prefer without tightly coupling your library to it by installing\nthat library and the adapter for it if needed as development dependencies:\n\n**For [anylogger-console](https://npmjs.com/package/anylogger-console)**:\n\n```sh\nnpm install --save-dev anylogger-console\n```\n\n**For [debug](https://npmjs.com/package/debug)**:\n\n```sh\nnpm install --save-dev debug anylogger-debug\n```\n> See [anylogger-debug](https://npmjs.com/package/anylogger-debug)\n\n**For [loglevel](https://npmjs.com/package/loglevel)**:\n\n```sh\nnpm install --save-dev loglevel anylogger-loglevel\n```\n> See [anylogger-loglevel](https://npmjs.com/package/anylogger-loglevel)\n\n**For [ulog](https://npmjs.com/package/ulog)**:\n\n```sh\nnpm install --save-dev ulog\n```\n> No adapter is needed for `ulog`\n\n**For [log4js](https://npmjs.com/package/log4js)**:\n\n```sh\nnpm install --save-dev log4js anylogger-log4js\n```\n> See [anylogger-log4js](https://npmjs.com/package/anylogger-log4js)\n\n\n## Use\n\nDepending on the type of project, either just use anylogger,\nor also include the adapter.\n\n### Use in a library\n\nIn your library code, only use anylogger and restrict yourself to the\n[Anylogger API](#anylogger-api) to stay framework-independent:\n\n#### import\n*my-library.js*\n```js\nimport anylogger from 'anylogger'\nconst log = anylogger('my-library')\nlog.info('Logging is easy!')\n```\n\n#### require\n*my-library.js*\n```js\nconst anylogger = require('anylogger')\nconst log = anylogger('my-library')\nlog.info('Logging is easy!')\n```\n\n> This way, your library does not get tightly coupled to any specific logger\n\n### Use in tests for your library\n\nIf you have installed an adapter as a dev dependency, you can use that adapter\nin your tests so you get the logging the way you like it in your tests.\n\n#### import\n*my-library.test.js*\n```js\n// e.g. for anylogger-console\nimport 'anylogger-console'\n// all loggers will now use the console\nimport anylogger from 'anylogger'\nconst log = anylogger('my-lbrary:test')\nlog.info('Logging is easy!')\n```\n\n#### require\n*my-library.test.js*\n```js\n// e.g. for anylogger-console\nrequire('anylogger-console')\n// all loggers will now use the console\nconst anylogger = require('anylogger')\nconst log = anylogger('my-lbrary:test')\nlog.info('Logging is easy!')\n```\n\n### Use in an application project\n\nInstall anylogger, your logging framework of choice and an adapter\nif needed as regular dependencies. Then, in your main entry point,\ninclude the adapter along with anylogger:\n\n#### import\n*main.js*\n```js\n// e.g. for anylogger-console\nimport adapter from 'anylogger-console'\nimport anylogger from 'anylogger'\nadapter(anylogger)\n// all loggers will now use the console\nconst log = anylogger('my-app')\nlog.info('Logging is easy!')\n```\n\n#### require\n*main.js*\n```js\n// e.g. for anylogger-console\nconst adapter = require('anylogger-console')\nconst anylogger = require('anylogger')\nadapter(anylogger)\n// all loggers will now use the console\nconst log = anylogger('my-app')\nlog.info('Logging is easy!')\n```\n\nIn your other application modules, use only anylogger and restrict yourself to\nthe [Anylogger API](#anylogger-api) to stay framework-independent:\n\n#### import\n*my-module.js*\n```js\nimport anylogger from 'anylogger'\nconst log = anylogger('my-module')\nlog.info('Logging is easy!')\n```\n\n#### require\n*my-module.js*\n```js\nconst anylogger = require('anylogger')\nconst log = anylogger('my-module')\nlog.info('Logging is easy!')\n```\n\nBy limiting yourself to the anylogger API, you ensure that even the code in\nyour aplication modules remains logging framework independent. That way,\nyou can easily turn an application module into a library later should the\nneed arise. Or should you want to switch logging libraries, you will be able\nto do that by only changing that one single line that imports the adapter\nin the entrypoint in *main.js* or whatever your main file is called.\n\n## Using anylogger for logging\n\nAnylogger is very natural to use:\n\n```js\nimport anylogger from 'anylogger'\nconst log = anylogger('my-module')\n\n// the log object is itself a function\n// this increases interop with `debug`\nlog('A log message')\nlog('debug', 'A debug message')\nlog('warn', 'A warning message')\n\n// the log object also has methods,\n// increasing interop with the console\nlog.info('Starting...')\nlog.warn('Watch out!')\nlog.error('Oh no!! Something went wrong')\n\n// the log API supports the concept of levels\nObject.keys(anylogger.levels)\n// > ['error', 'warn', 'info', 'log', 'debug', 'trace']\nif (log.enabledFor('warn')) {\n  log.warn(expensiveArguments())\n}\n```\n\n\n## Anylogger API\n\nSo what does this API look like?\n\n### anylogger\n\n```js\nfunction anylogger(name: string) => Logger\n```\n\nThe main function to call to get a logger.\nAccepts the logger name as argument.\n\n#### name\nThe name of the logger. String.\nThe recommended format is `<package-name>[:<sub>[:<sub> [..]]]`,\nas this is the [convention](https://www.npmjs.com/package/debug#conventions)\nused by the highly popular `debug` module. But you are free to pick\nany name you want as long as you steer clear of the characters `'*'`,\n`'='` and `';'` in the logger name.\n\n#### returns\nThe existing logger with that name, or a newly created one.\n\nThe returned logger adheres to the `Logger` type:\n\n```ts\n\n```\n\n This means it is a\n`LogFunction` and a `LogObject` all at once. The `LogFunction` aspect makes\nanylogger loggers compatible with `debug` out of the box, whereas the\n`LogObject` aspect makes them compatible with the console and most other\nlogging libraries. I call that a Win-Win!\n\n\n## Logging API\n\nThe logger returned by [`anylogger`](#anylogger) is a function that can\ndo logging on it's own:\n\n```js\nlog('message')          // logs a message at `log` level\nlog('info', 'message')  // logs a message at `info` level\n```\n\nIn addition, the logger looks like a simple console object:\n\n```js\nlog.debug('message')\nlog.info('message')\n```\n\nBecause of this, the logger created by anylogger is compatible with most\nlogging frameworks out there, which mostly use one or both of these approaches.\n\nThe main API looks like this (in pseudo code):\n\n```js\nlog: function([level='log'], ...args)\nlog.error: function(...args)\nlog.warn: function(...args)\nlog.info: function(...args)\nlog.log: function(...args)\nlog.debug: function(...args)\nlog.trace: function(...args)\nlog.enabledFor: function(level) => truthy or falsey\n```\n\nAnd that's about it. However this covers the basic logging needs.\n\n> Note that all logging methods here are part of the upcoming\n> [Console standard](https://console.spec.whatwg.org/), but not all platforms\n> and frameworks support all of them. In particular the `debug` method is not\n> available everywhere. Anylogger will make sure that the `debug` function is\n> polyfilled if needed.\n\nIs your logging framework not supported? No fear, just...\n\n\n## Write an anylogger adapter\n\nTo write an anylogger adapter, you need to make a project that includes both\nanylogger and the logging framework the adapter is for as peer dependencies.\n\nYou then need to modify one or more of the\n[anylogger extension points](#anylogger-extension-points)\nso the created loggers will be compliant with both the anylogger\n[Logging API](#logging-api) as well as with the logging framework's own API.\n\nIt is recommended you call your library `anylogger-[adapter]`, where\n`[adapter]` should be replaced with the name of the logging framework\nthe adapter is for. For example, the adapter for `debug` is called\n`anylogger-debug`.\n\nIn addition, it is recommended you add the keyword `\"anylogger\"` to the\n*package.json* file of your adapter project, so it will show up in the list of\n[available adapters](https://www.npmjs.com/search?q=keywords:anylogger).\n\n### anylogger extension points\n\nThe process of logger creation and invocation is split up in such a way\nas to optimize possible extension points allowing extensions to re-use\nanylogger functionality and avoid having to duplicate code. The extension\npoints are:\n\n#### anylogger.levels\n```js\nanylogger.levels = {error:1, warn:2, info:3, log:4, debug:5, trace:6}\n```\nAn object containing a mapping of level names to level values.\n\nTo be compliant with the anylogger API, loggers should support at least\nthe log methods corresponding to the default levels, but they may define\nadditional levels and they may choose to use different numeric values\nfor all the levels.\n\nThe guarantees the Anylogger API makes are:\n* there is a logging method corresponding to each level listed in `anylogger.levels`\n* the levels `error`, `warn`, `info`, `log`, `debug` and `trace` are always there\n* each level corresponds to a numeric value\n\nNote that the Anylogger API explicitly does not guarantee that all levels\nhave distinct values or that the numeric values will follow any pattern\nor have any specific order. For this reason it is best to think of levels\nas separate log channels, possibly going to different output locations.\n\nYou can replace or change this object to include levels corresponding with\nthose available in the framework you are writing an adapter for. Please\nmake sure to always include the default levels as well so all code can\nrely on the 6 console methods `error`, `warn`, `info`, `log`, `debug` and\n`trace` to always be there.\n\n#### anylogger.new\n```js\nanylogger.new(name, options) => logger\n```\nCreates a new logger function that calls `anylogger.log` when invoked.\n\nUses `new Function(..)` to create a named function so that function.name\ncorresponds to the module name given. Polyfills function.name on platforms\nwhere it is not natively available.\n\n##### name\nThe name of the new logger. String. Required.\n\n##### options\nAn optional options object. Object. Optional.\n\nIf the logging framework you are writing an adapter for uses an options\nobject, you should override `anylogger.new` and do something useful with\nthe options object here (set it as a property on the logger for example),\nbecause the default implementation just ignores it.\n\nInstead of completely trying to replace the original method, I recommend you\nchain it to include your one-time customizations like this:\n\n```js\nimport anylogger from 'anylogger'\n\n// save the original function\nconst make = anylogger.new\n\n// override anylogger.new\nanylogger.new = (name, options) => {\n  // call the original function to chain it\n  var logger = make(name, options)\n  // do something useful with the options object\n  logger.options = options\n  // return the customized logger\n  return logger\n}\n```\n\n> All anylogger methods are independent of `this` so they can all be easily chained\n\nIf you need to re-apply customizations any time relevant config changes (such\nas active log level changing), override `anylogger.ext`.\n\n#### anylogger.ext\n```js\nanylogger.ext(logger) => logger\n```\n\nCalled when a logger needs to be extended, either because it was newly\ncreated, or because it's configuration or settings changed in some way.\n\nThis method must ensure that a log method is available on the logger for\neach level in `anylogger.levels`.\n\nWhen overriding `anylogger.ext`, please ensure the function can safely\nbe called multiple times on the same object\n\n##### logger\nThe logger that should be (re-)extended. Function. Required.\n\nThe default implementation loops over the\n[`anylogger.levels`](#anyloggerlevels) and creates noop methods for each level.\nAdditionally it creates a noop `enabledFor` that always returns `undefined`.\n\nYou can override or chain this method to change the way the log methods are\n(re-)created. In a library that supports log levels, all methods corresponding\nto log levels equal to or higher than the currently active level might be\nreplaced with console methods instead. Or maybe the destination of the log\nmessages might change dynamically based on configuration. Apply such changes\nin `anylogger.ext` as it will be called again whenever relevant config changes.\nThis allows adapters to (re-)extend the logger so that the new configuration\ntakes effect.\n\n> You may need to ensure in your adapter that `anylogger.ext` is called\n> whenever relevant config changes. By hooking into setters for example.\n\n#### anylogger.log\n```js\nanylogger.log([level='log'], ...args)\n```\nThe log function returned by anylogger calls `anylogger.log`, which determines\nthe log level and invokes the appropriate log method.\n\nPlease have a look at the\n[source](https://unpkg.com/anylogger@1.1.0-beta.1/anylogger.js)\nit should make it more clear how to write an adapter. Also consider studying\nthe [available adapters](https://www.npmjs.com/search?q=keywords:anylogger)\nand learn by example.\n\n\n## Give something back\n\nIf you wrote an `anylogger` adapter, make sure to share it back with the\ncommunity. Publish it to NPM for all to use!\n\n\n## Credits\n\nCredits go to these people, who helped with this project:\n\n* [Jakub Jirutka](https://github.com/jirutka) who [contributed](https://github.com/Download/anylogger/pull/2) TypeScript type declarations.\n* [TJ Holowaychuk](https://github.com/tj) for writing [debug](https://npmjs.com/package/debug)\n* [Tim Perry](https://github.com/pimterry) for writing [loglevel](https://npmjs.com/package/loglevel)\n* The authors of log4js, log4js-node, morgan, bunyan, pino and all other log libraries out there\n\n\n## Issues\n\nAdd an issue in this project's\n[issue tracker](https://github.com/download/anylogger/issues)\nto let me know of any problems you find, or questions you may have.\n\n\n## Copyright\n\n© 2020 by [Stijn de Witt](https://stijndewitt.com). Some rights reserved.\nContributions by [Jakub Jirutka](https://github.com/jirutka).\n\n\n## License\n\nLicensed under the [MIT Open Source license](https://opensource.org/licenses/MIT).\n\n\n## gzip-size\n\nThe GZIP algorithm is available in different flavours and with different\npossible compression settings. The sizes quoted in this README have been\nmeasured using [gzip-size](https://npmjs.com/package/gzip-size)\nby [Sindre Sorhus](https://github.com/sindresorhus), your mileage may vary.\n","readmeFilename":"README.md","gitHead":"35f0d008544a88df88ed1e3a3f39cf7a16cccca7","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_nodeVersion":"18.19.0","_npmVersion":"10.2.4","dist":{"integrity":"sha512-gOgR0PSuWuWEsZ/QCPeLpmISnqUoXOpRDsGXHzZotWuLULscPGS34YktXAZquXZumuwgF/OHOd+OY9/R97D3Zg==","shasum":"b005aae0e8889b78069d53c13a00fa0bb33ba6b0","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-1.1.0-beta.1.tgz","fileCount":11,"unpackedSize":52600,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCMpMTI9UYkmLQhreMxc5jytiBgL7oa2iwK/m7BduoowwIgVkdD8yMOBbwpNI61XpSf+uAE0Liisd21BTxLh0Ya/a0="}]},"_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"directories":{},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_1.1.0-beta.1_1708708262403_0.7703946449386763"},"_hasShrinkwrap":false},"1.1.0-beta.2":{"name":"anylogger","version":"1.1.0-beta.2","description":"Get a logger. Any logger.","type":"module","exports":{".":{"import":"./anylogger.js","require":"./anylogger.cjs"}},"src":"./anylogger.js","main":"./anylogger.js","cjs":"./anylogger.cjs","iife":"./anylogger.iife.js","min":"./anylogger.min.js","types":"./anylogger.d.ts","spec":"./anylogger.spec.js","unpkg":"./anylogger.min.js","scripts":{"build":"tsc && npm run test -s && npm run minify -s && npm run docs -s","clean":"rimraf anylogger.cjs anylogger.d.ts anylogger.d.ts.map anylogger.iife.js anylogger.js anylogger.js.map anylogger.min.js","docs":"cross-env NODE_ENV=production node build.js docs","minify":"cross-env NODE_ENV=production node build.js minify","package":"cross-env NODE_ENV=production rollup -c","prepare":"npm run build","test":"npm run package -s && mocha anylogger.spec.js"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"devDependencies":{"@types/node":"^20.11.19","anylogger-console":"^1.1.0-beta.5","chai":"^5.1.0","cross-env":"^7.0.3","gzip-size":"^7.0.0","mocha":"^10.3.0","rimraf":"^5.0.5","rollup":"^4.12.0","sinon":"^17.0.1","typescript":"^5.3.3","uglify-js":"^3.17.4"},"keywords":["anylogger","anylogger-console","anylogger-debug","anylogger-loglevel","anylogger-log4js","anylogger-tutorial","console","logger","logging","logging facade","microscopically small","tiny","ulog","1kB"],"_id":"anylogger@1.1.0-beta.2","readme":"# anylogger <sub><sup>1.1.0-beta.2</sup></sub>\n### Get a logger. Any logger.\n\n[![npm](https://img.shields.io/npm/v/anylogger.svg)](https://npmjs.com/package/anylogger)\n[![license](https://img.shields.io/npm/l/anylogger.svg)](https://opensource.org/licenses/MIT)\n![mind BLOWN](https://img.shields.io/badge/mind-BLOWN-ff69b4.svg)\n\n\n## The logger for libraries\n\nWhen we want to do logging from a library, we don't want to force the choice of\nlogging framework on the application developer. Instead, we want to use whatever\nlogging framework the application developer selected. `anylogger` let's you do\njust that.\n\n\n## Quickstart\n\n<table>\n  <tr>\n    <th><h3>Library</h3></th>\n    <th><h3>App with <a href=\"https://npmjs.com/package/anylogger-debug\"\n    ><tt>debug</tt></a></h3></th>\n    <th><h3>App with <a href=\"https://npmjs.com/package/anylogger-loglevel\"\n    ><tt>loglevel</tt></a></h3></th>\n    <th><h3>App with <a href=\"https://npmjs.com/package/ulog\"\n    ><tt>ulog</tt></a></h3></th>\n    <th><h3>App with <a href=\"https://npmjs.com/package/anylogger-log4js\"\n    ><tt>log4js</tt></a></h3></th>\n  </tr>\n  <tr>\n    <td><h5>Install</h5>\n      <pre>npm i -D anylogger</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-library')\nlog('Anylogger is easy!')</pre>\n      <p>Add to peerDependencies and install\n      an adapter as <a href=\"#install-dev-dependencies-in-a-library-project\"\n      >dev dependencies</a>.</p>\n    </td>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger\n debug anylogger-debug</pre>\n      <h5>Add to entry point</h5>\n      <i>index.js</i>\n      <pre>import adapter from \"anylogger-debug\"\nimport anylogger from 'anylogger'\nadapter(anylogger)</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-app')\nlog('Anylogger is easy!')</pre>\n    </td>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger\n loglevel anylogger-loglevel</pre>\n      <h5>Add to entry point</h5>\n      <i>index.js</i>\n      <pre>import adapter from \"anylogger-loglevel\"\nimport anylogger from 'anylogger'\nadapter(anylogger)</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-app')\nlog('Anylogger is easy!')</pre>\n    </td>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger\n ulog</pre>\n      <h5>Add to entry point</h5>\n      <i>index.js</i>\n      <pre>import adapter from \"ulog\"\nimport anylogger from 'anylogger'\nadapter(anylogger)</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-app')\nlog('Anylogger is easy!')</pre>\n    </td>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger\n log4js anylogger-log4js</pre>\n      <h5>Add to entry point</h5>\n      <i>index.js</i>\n      <pre>import adapter from \"anylogger-log4js\"\nimport anylogger from 'anylogger'\nadapter(anylogger)</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-app')\nlog('Anylogger is easy!')</pre>\n    </td>\n  </tr>\n</table>\n\n\n## What is this?\n\n### A logging facade\n\nWe, the Javascript community, really need a logging facade. There are dozens\nof logging libraries around and we library authors face a challenge. Which logger\ndo we pick? Should we make this configurable? Should we just not log? Use the\nconsole directly? How do we deal with this complexity?\n\nIn software architecture, a\n[facade](https://en.wikipedia.org/wiki/Facade_pattern) hides a complex system\nbehind a simple interface. In the context of our logging problem, we can have\nour library log to a simple facade object. In our application we back the\nfacade object by the actual logging framework with an\n[adapter](https://en.wikipedia.org/wiki/Adapter_pattern).\n\nSo what we need is a simple and small logging facade and a bunch of adapters\nfor popular loggers.\n\n### Introducing `anylogger`\n\nA tiny ~[259](#gzip-size) bytes logging facade that you can include in your\nlibrary to support logging, while at the same time allowing application\ndevelopers to plug in any logging framework they choose.\n\nInstead of building in your own library specific configuration mechanism,\nor forcing the choice for a certain logging framework on your users,\nor just abandoning logging altogether, choose `anylogger` and for just\n~[259](#gzip-size) bytes shared between all libraries doing this, we can\nplug in any framework of our choice and all libraries will automatically\nstart to use that framework. Wouldn't it be much better and easier?\n\n\n## Download\n\n* [anylogger.ts](https://unpkg.com/anylogger@1.1.0-beta.2/anylogger.ts)\n  (fully commented source ~7kB)\n* [anylogger.d.ts](https://unpkg.com/anylogger@1.1.0-beta.2/anylogger.d.ts)\n  (typescript type definitions ~6kB)\n* [anylogger.js](https://unpkg.com/anylogger@1.1.0-beta.2/anylogger.js)\n  (javascript esm module ~2kB)\n* [anylogger.cjs](https://unpkg.com/anylogger@1.1.0-beta.2/anylogger.cjs)\n  (javascript commonjs module ~2kB)\n* [anylogger.min.js](https://unpkg.com/anylogger@1.1.0-beta.2/anylogger.min.js)\n  (minified 355 bytes, gzipped ~[259](#gzip-size) bytes)\n\n\n## CDN\n\n*index.html*\n```html\n<script src=\"https://unpkg.com/anylogger@1.1.0-beta.2\"></script>\n<script>(function(){ // IIFE\n  var log = anylogger('index.html')\n  log.info('Logging is simple!')\n})()</script>\n```\n\nNote that anylogger by default does nothing. You need an adapter to see output.\nFor example, to send all logging to the console, you can use\n[`anylogger-console`](https://npmjs.com/package/anylogger-console).\n\n\n## Install\n\nAlways only install anylogger in application projects. In library projects,\ninstall anylogger as a dev dependency and make it a peer dependency.\n\n### Install in an application project\n\nIf you are building an application project and have selected a logging\nframework, install anylogger, the selected logging framework and the\nadapter for that logging framework if needed.\n\n**For [anylogger-console](https://npmjs.com/package/anylogger-console)**:\n\n```sh\nnpm install --save anylogger anylogger-console\n```\n\n**For [debug](https://npmjs.com/package/debug)**:\n\n```sh\nnpm install --save anylogger debug anylogger-debug\n```\n> See [anylogger-debug](https://npmjs.com/package/anylogger-debug)\n\n**For [loglevel](https://npmjs.com/package/loglevel)**:\n\n```sh\nnpm install --save anylogger loglevel anylogger-loglevel\n```\n> See [anylogger-loglevel](https://npmjs.com/package/anylogger-loglevel)\n\n**For [ulog](https://npmjs.com/package/ulog)**\n\n```sh\nnpm install --save anylogger ulog\n```\n> No adapter is needed for `ulog`\n\n**For [log4js](https://npmjs.com/package/log4js)**:\n\n```sh\nnpm install --save anylogger log4js anylogger-log4js\n```\n> See [anylogger-log4js](https://npmjs.com/package/anylogger-log4js)\n\nCheck out all\n[available adapters](https://www.npmjs.com/search?q=keywords:anylogger).\n\n\n### Install in a library project\n\nIf you are building a library, install anylogger as a dev-dependency:\n\n```sh\nnpm install --save-dev anylogger\n```\n\nThis will add `anylogger` as a dev-dependency to your `package.json`.\n\nTo ensure that application projects using your library also install\n`anylogger`, make it a peer dependency. Add this to *package.json*:\n\n```json\n\"peerDependencies\": {\n  \"anylogger\": \"1.x || >=1.1.0-beta || >=1.2.0-beta || >=1.3.0-beta || >=1.4.0-beta || >=1.5.0-beta || >=1.6.0-beta || >=1.7.0-beta || >=1.8.0-beta || >=1.9.0-beta\"\n}\n```\n\n>\n> The list of (future) betas is an annoyance in the way NPM deals with beta\n> tags unfortunately. IMHO it is clear that `1.1.0-beta` matches `1.x` and\n> should thus be covered by it, but alas, NPM thinks otherwise.\n>\n> If you want your library to also work with possible future betas of\n> anylogger, then include this list of betas (recommended).\n>\n\nAdd anylogger to your install instructions in your project README.md:\n\n>\n> ### Install\n>\n> `npm install --save my-library anylogger`\n>\n\n### Install dev dependencies in a library project\n\nIf you are building a library, you can use the logging framework\nyou prefer without tightly coupling your library to it by installing\nthat library and the adapter for it if needed as development dependencies:\n\n**For [anylogger-console](https://npmjs.com/package/anylogger-console)**:\n\n```sh\nnpm install --save-dev anylogger-console\n```\n\n**For [debug](https://npmjs.com/package/debug)**:\n\n```sh\nnpm install --save-dev debug anylogger-debug\n```\n> See [anylogger-debug](https://npmjs.com/package/anylogger-debug)\n\n**For [loglevel](https://npmjs.com/package/loglevel)**:\n\n```sh\nnpm install --save-dev loglevel anylogger-loglevel\n```\n> See [anylogger-loglevel](https://npmjs.com/package/anylogger-loglevel)\n\n**For [ulog](https://npmjs.com/package/ulog)**:\n\n```sh\nnpm install --save-dev ulog\n```\n> No adapter is needed for `ulog`\n\n**For [log4js](https://npmjs.com/package/log4js)**:\n\n```sh\nnpm install --save-dev log4js anylogger-log4js\n```\n> See [anylogger-log4js](https://npmjs.com/package/anylogger-log4js)\n\n\n## Use\n\nDepending on the type of project, either just use anylogger,\nor also include the adapter.\n\n### Use in a library\n\nIn your library code, only use anylogger and restrict yourself to the\n[Anylogger API](#anylogger-api) to stay framework-independent:\n\n#### import\n*my-library.js*\n```js\nimport anylogger from 'anylogger'\nconst log = anylogger('my-library')\nlog.info('Logging is easy!')\n```\n\n#### require\n*my-library.js*\n```js\nconst anylogger = require('anylogger')\nconst log = anylogger('my-library')\nlog.info('Logging is easy!')\n```\n\n> This way, your library does not get tightly coupled to any specific logger\n\n### Use in tests for your library\n\nIf you have installed an adapter as a dev dependency, you can use that adapter\nin your tests so you get the logging the way you like it in your tests.\n\n#### import\n*my-library.test.js*\n```js\n// e.g. for anylogger-console\nimport 'anylogger-console'\n// all loggers will now use the console\nimport anylogger from 'anylogger'\nconst log = anylogger('my-lbrary:test')\nlog.info('Logging is easy!')\n```\n\n#### require\n*my-library.test.js*\n```js\n// e.g. for anylogger-console\nrequire('anylogger-console')\n// all loggers will now use the console\nconst anylogger = require('anylogger')\nconst log = anylogger('my-lbrary:test')\nlog.info('Logging is easy!')\n```\n\n### Use in an application project\n\nInstall anylogger, your logging framework of choice and an adapter\nif needed as regular dependencies. Then, in your main entry point,\ninclude the adapter along with anylogger:\n\n#### import\n*main.js*\n```js\n// e.g. for anylogger-console\nimport adapter from 'anylogger-console'\nimport anylogger from 'anylogger'\nadapter(anylogger)\n// all loggers will now use the console\nconst log = anylogger('my-app')\nlog.info('Logging is easy!')\n```\n\n#### require\n*main.js*\n```js\n// e.g. for anylogger-console\nconst adapter = require('anylogger-console')\nconst anylogger = require('anylogger')\nadapter(anylogger)\n// all loggers will now use the console\nconst log = anylogger('my-app')\nlog.info('Logging is easy!')\n```\n\nIn your other application modules, use only anylogger and restrict yourself to\nthe [Anylogger API](#anylogger-api) to stay framework-independent:\n\n#### import\n*my-module.js*\n```js\nimport anylogger from 'anylogger'\nconst log = anylogger('my-module')\nlog.info('Logging is easy!')\n```\n\n#### require\n*my-module.js*\n```js\nconst anylogger = require('anylogger')\nconst log = anylogger('my-module')\nlog.info('Logging is easy!')\n```\n\nBy limiting yourself to the anylogger API, you ensure that even the code in\nyour aplication modules remains logging framework independent. That way,\nyou can easily turn an application module into a library later should the\nneed arise. Or should you want to switch logging libraries, you will be able\nto do that by only changing that one single line that imports the adapter\nin the entrypoint in *main.js* or whatever your main file is called.\n\n## Using anylogger for logging\n\nAnylogger is very natural to use:\n\n```js\nimport anylogger from 'anylogger'\nconst log = anylogger('my-module')\n\n// the log object is itself a function\n// this increases interop with `debug`\nlog('A log message')\nlog('debug', 'A debug message')\nlog('warn', 'A warning message')\n\n// the log object also has methods,\n// increasing interop with the console\nlog.info('Starting...')\nlog.warn('Watch out!')\nlog.error('Oh no!! Something went wrong')\n\n// the log API supports the concept of levels\nObject.keys(anylogger.levels)\n// > ['error', 'warn', 'info', 'log', 'debug', 'trace']\nif (log.enabledFor('warn')) {\n  log.warn(expensiveArguments())\n}\n```\n\n\n## Anylogger API\n\nSo what does this API look like?\n\n### anylogger\n\n```js\nfunction anylogger(name: string) => Logger\n```\n\nThe main function to call to get a logger.\nAccepts the logger name as argument.\n\n#### name\nThe name of the logger. String.\nThe recommended format is `<package-name>[:<sub>[:<sub> [..]]]`,\nas this is the [convention](https://www.npmjs.com/package/debug#conventions)\nused by the highly popular `debug` module. But you are free to pick\nany name you want as long as you steer clear of the characters `'*'`,\n`'='` and `';'` in the logger name.\n\n#### returns\nThe existing logger with that name, or a newly created one.\n\nThe returned logger adheres to the `Logger` type:\n\n```ts\n\n```\n\n This means it is a\n`LogFunction` and a `LogObject` all at once. The `LogFunction` aspect makes\nanylogger loggers compatible with `debug` out of the box, whereas the\n`LogObject` aspect makes them compatible with the console and most other\nlogging libraries. I call that a Win-Win!\n\n\n## Logging API\n\nThe logger returned by [`anylogger`](#anylogger) is a function that can\ndo logging on it's own:\n\n```js\nlog('message')          // logs a message at `log` level\nlog('info', 'message')  // logs a message at `info` level\n```\n\nIn addition, the logger looks like a simple console object:\n\n```js\nlog.debug('message')\nlog.info('message')\n```\n\nBecause of this, the logger created by anylogger is compatible with most\nlogging frameworks out there, which mostly use one or both of these approaches.\n\nThe main API looks like this (in pseudo code):\n\n```js\nlog: function([level='log'], ...args)\nlog.error: function(...args)\nlog.warn: function(...args)\nlog.info: function(...args)\nlog.log: function(...args)\nlog.debug: function(...args)\nlog.trace: function(...args)\nlog.enabledFor: function(level) => truthy or falsey\n```\n\nAnd that's about it. However this covers the basic logging needs.\n\n> Note that all logging methods here are part of the upcoming\n> [Console standard](https://console.spec.whatwg.org/), but not all platforms\n> and frameworks support all of them. In particular the `debug` method is not\n> available everywhere. Anylogger will make sure that the `debug` function is\n> polyfilled if needed.\n\nIs your logging framework not supported? No fear, just...\n\n\n## Write an anylogger adapter\n\nTo write an anylogger adapter, you need to make a project that includes both\nanylogger and the logging framework the adapter is for as peer dependencies.\n\nYou then need to modify one or more of the\n[anylogger extension points](#anylogger-extension-points)\nso the created loggers will be compliant with both the anylogger\n[Logging API](#logging-api) as well as with the logging framework's own API.\n\nIt is recommended you call your library `anylogger-[adapter]`, where\n`[adapter]` should be replaced with the name of the logging framework\nthe adapter is for. For example, the adapter for `debug` is called\n`anylogger-debug`.\n\nIn addition, it is recommended you add the keyword `\"anylogger\"` to the\n*package.json* file of your adapter project, so it will show up in the list of\n[available adapters](https://www.npmjs.com/search?q=keywords:anylogger).\n\n### anylogger extension points\n\nThe process of logger creation and invocation is split up in such a way\nas to optimize possible extension points allowing extensions to re-use\nanylogger functionality and avoid having to duplicate code. The extension\npoints are:\n\n#### anylogger.levels\n```js\nanylogger.levels = {error:1, warn:2, info:3, log:4, debug:5, trace:6}\n```\nAn object containing a mapping of level names to level values.\n\nTo be compliant with the anylogger API, loggers should support at least\nthe log methods corresponding to the default levels, but they may define\nadditional levels and they may choose to use different numeric values\nfor all the levels.\n\nThe guarantees the Anylogger API makes are:\n* there is a logging method corresponding to each level listed in `anylogger.levels`\n* the levels `error`, `warn`, `info`, `log`, `debug` and `trace` are always there\n* each level corresponds to a numeric value\n\nNote that the Anylogger API explicitly does not guarantee that all levels\nhave distinct values or that the numeric values will follow any pattern\nor have any specific order. For this reason it is best to think of levels\nas separate log channels, possibly going to different output locations.\n\nYou can replace or change this object to include levels corresponding with\nthose available in the framework you are writing an adapter for. Please\nmake sure to always include the default levels as well so all code can\nrely on the 6 console methods `error`, `warn`, `info`, `log`, `debug` and\n`trace` to always be there.\n\n#### anylogger.new\n```js\nanylogger.new(name, options) => logger\n```\nCreates a new logger function that calls `anylogger.log` when invoked.\n\nUses `new Function(..)` to create a named function so that function.name\ncorresponds to the module name given. Polyfills function.name on platforms\nwhere it is not natively available.\n\n##### name\nThe name of the new logger. String. Required.\n\n##### options\nAn optional options object. Object. Optional.\n\nIf the logging framework you are writing an adapter for uses an options\nobject, you should override `anylogger.new` and do something useful with\nthe options object here (set it as a property on the logger for example),\nbecause the default implementation just ignores it.\n\nInstead of completely trying to replace the original method, I recommend you\nchain it to include your one-time customizations like this:\n\n```js\nimport anylogger from 'anylogger'\n\n// save the original function\nconst make = anylogger.new\n\n// override anylogger.new\nanylogger.new = (name, options) => {\n  // call the original function to chain it\n  var logger = make(name, options)\n  // do something useful with the options object\n  logger.options = options\n  // return the customized logger\n  return logger\n}\n```\n\n> All anylogger methods are independent of `this` so they can all be easily chained\n\nIf you need to re-apply customizations any time relevant config changes (such\nas active log level changing), override `anylogger.ext`.\n\n#### anylogger.ext\n```js\nanylogger.ext(logger) => logger\n```\n\nCalled when a logger needs to be extended, either because it was newly\ncreated, or because it's configuration or settings changed in some way.\n\nThis method must ensure that a log method is available on the logger for\neach level in `anylogger.levels`.\n\nWhen overriding `anylogger.ext`, please ensure the function can safely\nbe called multiple times on the same object\n\n##### logger\nThe logger that should be (re-)extended. Function. Required.\n\nThe default implementation loops over the\n[`anylogger.levels`](#anyloggerlevels) and creates noop methods for each level.\nAdditionally it creates a noop `enabledFor` that always returns `undefined`.\n\nYou can override or chain this method to change the way the log methods are\n(re-)created. In a library that supports log levels, all methods corresponding\nto log levels equal to or higher than the currently active level might be\nreplaced with console methods instead. Or maybe the destination of the log\nmessages might change dynamically based on configuration. Apply such changes\nin `anylogger.ext` as it will be called again whenever relevant config changes.\nThis allows adapters to (re-)extend the logger so that the new configuration\ntakes effect.\n\n> You may need to ensure in your adapter that `anylogger.ext` is called\n> whenever relevant config changes. By hooking into setters for example.\n\n#### anylogger.log\n```js\nanylogger.log([level='log'], ...args)\n```\nThe log function returned by anylogger calls `anylogger.log`, which determines\nthe log level and invokes the appropriate log method.\n\nPlease have a look at the\n[source](https://unpkg.com/anylogger@1.1.0-beta.2/anylogger.js)\nit should make it more clear how to write an adapter. Also consider studying\nthe [available adapters](https://www.npmjs.com/search?q=keywords:anylogger)\nand learn by example.\n\n\n## Give something back\n\nIf you wrote an `anylogger` adapter, make sure to share it back with the\ncommunity. Publish it to NPM for all to use!\n\n\n## Credits\n\nCredits go to these people, who helped with this project:\n\n* [Jakub Jirutka](https://github.com/jirutka) who [contributed](https://github.com/Download/anylogger/pull/2) TypeScript type declarations.\n* [TJ Holowaychuk](https://github.com/tj) for writing [debug](https://npmjs.com/package/debug)\n* [Tim Perry](https://github.com/pimterry) for writing [loglevel](https://npmjs.com/package/loglevel)\n* The authors of log4js, log4js-node, morgan, bunyan, pino and all other log libraries out there\n\n\n## Issues\n\nAdd an issue in this project's\n[issue tracker](https://github.com/download/anylogger/issues)\nto let me know of any problems you find, or questions you may have.\n\n\n## Copyright\n\n© 2020 by [Stijn de Witt](https://stijndewitt.com). Some rights reserved.\nContributions by [Jakub Jirutka](https://github.com/jirutka).\n\n\n## License\n\nLicensed under the [MIT Open Source license](https://opensource.org/licenses/MIT).\n\n\n## gzip-size\n\nThe GZIP algorithm is available in different flavours and with different\npossible compression settings. The sizes quoted in this README have been\nmeasured using [gzip-size](https://npmjs.com/package/gzip-size)\nby [Sindre Sorhus](https://github.com/sindresorhus), your mileage may vary.\n","readmeFilename":"README.md","gitHead":"0164c59db54f83421de0660f294265ae174606e9","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_nodeVersion":"18.19.0","_npmVersion":"10.2.4","dist":{"integrity":"sha512-hQonRn6Fa1V62n1imGvqTx4bJGNIrMC84+OK3GCAnDUJInqaP8DTsSwmZdtuIIbP+j40Gc+SteAKdja6uC2xlA==","shasum":"72b29d1b9bdfd922f36ef7db7c4e24a8b1b4ccc8","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-1.1.0-beta.2.tgz","fileCount":11,"unpackedSize":52642,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCPMGJLQG/xWz65b3sBOP5KhH7j4ZUSSBYbWGUP3x5QMAIhALg0lOl+KY72iKqBZXDmVf2ogZRmEo2dTUsZQguF2WP9"}]},"_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"directories":{},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_1.1.0-beta.2_1708713496572_0.6757335872007022"},"_hasShrinkwrap":false},"1.1.0-beta.3":{"name":"anylogger","version":"1.1.0-beta.3","description":"Get a logger. Any logger.","type":"module","exports":{".":{"import":"./anylogger.js","require":"./anylogger.cjs"}},"src":"./anylogger.ts","main":"./anylogger.js","cjs":"./anylogger.cjs","iife":"./anylogger.iife.js","min":"./anylogger.min.js","types":"./anylogger.d.ts","spec":"./anylogger.spec.js","unpkg":"./anylogger.min.js","scripts":{"build":"tsc && npm run test -s && npm run minify -s && npm run docs -s","clean":"rimraf anylogger.cjs anylogger.d.ts anylogger.d.ts.map anylogger.iife.js anylogger.js anylogger.js.map anylogger.min.js","docs":"cross-env NODE_ENV=production node build.js docs","minify":"cross-env NODE_ENV=production node build.js minify","package":"cross-env NODE_ENV=production rollup -c","prepare":"npm run build","test":"npm run package -s && mocha anylogger.spec.js"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"devDependencies":{"@types/node":"^20.11.19","anylogger-console":"^1.1.0-beta.5","chai":"^5.1.0","cross-env":"^7.0.3","gzip-size":"^7.0.0","mocha":"^10.3.0","rimraf":"^5.0.5","rollup":"^4.12.0","sinon":"^17.0.1","typescript":"^5.3.3","uglify-js":"^3.17.4"},"keywords":["anylogger","anylogger-console","anylogger-debug","anylogger-loglevel","anylogger-log4js","anylogger-tutorial","console","logger","logging","logging facade","microscopically small","tiny","ulog","1kB"],"_id":"anylogger@1.1.0-beta.3","readme":"# anylogger <sub><sup>1.1.0-beta.3</sup></sub>\n### Get a logger. Any logger.\n\n[![npm](https://img.shields.io/npm/v/anylogger.svg)](https://npmjs.com/package/anylogger)\n[![license](https://img.shields.io/npm/l/anylogger.svg)](https://opensource.org/licenses/MIT)\n![mind BLOWN](https://img.shields.io/badge/mind-BLOWN-ff69b4.svg)\n\n\n## The logger for libraries\n\nWhen we want to do logging from a library, we don't want to force the choice of\nlogging framework on the application developer. Instead, we want to use whatever\nlogging framework the application developer selected. `anylogger` let's you do\njust that.\n\n\n## Quickstart\n\n<table>\n  <tr>\n    <th><h3>Library</h3></th>\n    <th><h3>App with <a href=\"https://npmjs.com/package/anylogger-debug\"\n    ><tt>debug</tt></a></h3></th>\n    <th><h3>App with <a href=\"https://npmjs.com/package/anylogger-loglevel\"\n    ><tt>loglevel</tt></a></h3></th>\n    <th><h3>App with <a href=\"https://npmjs.com/package/ulog\"\n    ><tt>ulog</tt></a></h3></th>\n    <th><h3>App with <a href=\"https://npmjs.com/package/anylogger-log4js\"\n    ><tt>log4js</tt></a></h3></th>\n  </tr>\n  <tr>\n    <td><h5>Install</h5>\n      <pre>npm i -D anylogger</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-library')\nlog('Anylogger is easy!')</pre>\n      <p>Add to peerDependencies and install\n      an adapter as <a href=\"#install-dev-dependencies-in-a-library-project\"\n      >dev dependencies</a>.</p>\n    </td>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger\n debug anylogger-debug</pre>\n      <h5>Add to entry point</h5>\n      <i>index.js</i>\n      <pre>import adapter from \"anylogger-debug\"\nimport anylogger from 'anylogger'\nadapter(anylogger)</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-app')\nlog('Anylogger is easy!')</pre>\n    </td>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger\n loglevel anylogger-loglevel</pre>\n      <h5>Add to entry point</h5>\n      <i>index.js</i>\n      <pre>import adapter from \"anylogger-loglevel\"\nimport anylogger from 'anylogger'\nadapter(anylogger)</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-app')\nlog('Anylogger is easy!')</pre>\n    </td>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger\n ulog</pre>\n      <h5>Add to entry point</h5>\n      <i>index.js</i>\n      <pre>import adapter from \"ulog\"\nimport anylogger from 'anylogger'\nadapter(anylogger)</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-app')\nlog('Anylogger is easy!')</pre>\n    </td>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger\n log4js anylogger-log4js</pre>\n      <h5>Add to entry point</h5>\n      <i>index.js</i>\n      <pre>import adapter from \"anylogger-log4js\"\nimport anylogger from 'anylogger'\nadapter(anylogger)</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-app')\nlog('Anylogger is easy!')</pre>\n    </td>\n  </tr>\n</table>\n\n\n## What is this?\n\n### A logging facade\n\nWe, the Javascript community, really need a logging facade. There are dozens\nof logging libraries around and we library authors face a challenge. Which logger\ndo we pick? Should we make this configurable? Should we just not log? Use the\nconsole directly? How do we deal with this complexity?\n\nIn software architecture, a\n[facade](https://en.wikipedia.org/wiki/Facade_pattern) hides a complex system\nbehind a simple interface. In the context of our logging problem, we can have\nour library log to a simple facade object. In our application we back the\nfacade object by the actual logging framework with an\n[adapter](https://en.wikipedia.org/wiki/Adapter_pattern).\n\nSo what we need is a simple and small logging facade and a bunch of adapters\nfor popular loggers.\n\n### Introducing `anylogger`\n\nA tiny ~[259](#gzip-size) bytes logging facade that you can include in your\nlibrary to support logging, while at the same time allowing application\ndevelopers to plug in any logging framework they choose.\n\nInstead of building in your own library specific configuration mechanism,\nor forcing the choice for a certain logging framework on your users,\nor just abandoning logging altogether, choose `anylogger` and for just\n~[259](#gzip-size) bytes shared between all libraries doing this, we can\nplug in any framework of our choice and all libraries will automatically\nstart to use that framework. Wouldn't it be much better and easier?\n\n\n## Download\n\n* [anylogger.ts](https://unpkg.com/anylogger@1.1.0-beta.3/anylogger.ts)\n  (fully commented source ~7kB)\n* [anylogger.d.ts](https://unpkg.com/anylogger@1.1.0-beta.3/anylogger.d.ts)\n  (typescript type definitions ~6kB)\n* [anylogger.js](https://unpkg.com/anylogger@1.1.0-beta.3/anylogger.js)\n  (javascript esm module ~2kB)\n* [anylogger.cjs](https://unpkg.com/anylogger@1.1.0-beta.3/anylogger.cjs)\n  (javascript commonjs module ~2kB)\n* [anylogger.min.js](https://unpkg.com/anylogger@1.1.0-beta.3/anylogger.min.js)\n  (minified 355 bytes, gzipped ~[259](#gzip-size) bytes)\n\n\n## CDN\n\n*index.html*\n```html\n<script src=\"https://unpkg.com/anylogger@1.1.0-beta.3\"></script>\n<script>(function(){ // IIFE\n  var log = anylogger('index.html')\n  log.info('Logging is simple!')\n})()</script>\n```\n\nNote that anylogger by default does nothing. You need an adapter to see output.\nFor example, to send all logging to the console, you can use\n[`anylogger-console`](https://npmjs.com/package/anylogger-console).\n\n\n## Install\n\nAlways only install anylogger in application projects. In library projects,\ninstall anylogger as a dev dependency and make it a peer dependency.\n\n### Install in an application project\n\nIf you are building an application project and have selected a logging\nframework, install anylogger, the selected logging framework and the\nadapter for that logging framework if needed.\n\n**For [anylogger-console](https://npmjs.com/package/anylogger-console)**:\n\n```sh\nnpm install --save anylogger anylogger-console\n```\n\n**For [debug](https://npmjs.com/package/debug)**:\n\n```sh\nnpm install --save anylogger debug anylogger-debug\n```\n> See [anylogger-debug](https://npmjs.com/package/anylogger-debug)\n\n**For [loglevel](https://npmjs.com/package/loglevel)**:\n\n```sh\nnpm install --save anylogger loglevel anylogger-loglevel\n```\n> See [anylogger-loglevel](https://npmjs.com/package/anylogger-loglevel)\n\n**For [ulog](https://npmjs.com/package/ulog)**\n\n```sh\nnpm install --save anylogger ulog\n```\n> No adapter is needed for `ulog`\n\n**For [log4js](https://npmjs.com/package/log4js)**:\n\n```sh\nnpm install --save anylogger log4js anylogger-log4js\n```\n> See [anylogger-log4js](https://npmjs.com/package/anylogger-log4js)\n\nCheck out all\n[available adapters](https://www.npmjs.com/search?q=keywords:anylogger).\n\n\n### Install in a library project\n\nIf you are building a library, install anylogger as a dev-dependency:\n\n```sh\nnpm install --save-dev anylogger\n```\n\nThis will add `anylogger` as a dev-dependency to your `package.json`.\n\nTo ensure that application projects using your library also install\n`anylogger`, make it a peer dependency. Add this to *package.json*:\n\n```json\n\"peerDependencies\": {\n  \"anylogger\": \"1.x || >=1.1.0-beta || >=1.2.0-beta || >=1.3.0-beta || >=1.4.0-beta || >=1.5.0-beta || >=1.6.0-beta || >=1.7.0-beta || >=1.8.0-beta || >=1.9.0-beta\"\n}\n```\n\n>\n> The list of (future) betas is an annoyance in the way NPM deals with beta\n> tags unfortunately. IMHO it is clear that `1.1.0-beta` matches `1.x` and\n> should thus be covered by it, but alas, NPM thinks otherwise.\n>\n> If you want your library to also work with possible future betas of\n> anylogger, then include this list of betas (recommended).\n>\n\nAdd anylogger to your install instructions in your project README.md:\n\n>\n> ### Install\n>\n> `npm install --save my-library anylogger`\n>\n\n### Install dev dependencies in a library project\n\nIf you are building a library, you can use the logging framework\nyou prefer without tightly coupling your library to it by installing\nthat library and the adapter for it if needed as development dependencies:\n\n**For [anylogger-console](https://npmjs.com/package/anylogger-console)**:\n\n```sh\nnpm install --save-dev anylogger-console\n```\n\n**For [debug](https://npmjs.com/package/debug)**:\n\n```sh\nnpm install --save-dev debug anylogger-debug\n```\n> See [anylogger-debug](https://npmjs.com/package/anylogger-debug)\n\n**For [loglevel](https://npmjs.com/package/loglevel)**:\n\n```sh\nnpm install --save-dev loglevel anylogger-loglevel\n```\n> See [anylogger-loglevel](https://npmjs.com/package/anylogger-loglevel)\n\n**For [ulog](https://npmjs.com/package/ulog)**:\n\n```sh\nnpm install --save-dev ulog\n```\n> No adapter is needed for `ulog`\n\n**For [log4js](https://npmjs.com/package/log4js)**:\n\n```sh\nnpm install --save-dev log4js anylogger-log4js\n```\n> See [anylogger-log4js](https://npmjs.com/package/anylogger-log4js)\n\n\n## Use\n\nDepending on the type of project, either just use anylogger,\nor also include the adapter.\n\n### Use in a library\n\nIn your library code, only use anylogger and restrict yourself to the\n[Anylogger API](#anylogger-api) to stay framework-independent:\n\n#### import\n*my-library.js*\n```js\nimport anylogger from 'anylogger'\nconst log = anylogger('my-library')\nlog.info('Logging is easy!')\n```\n\n#### require\n*my-library.js*\n```js\nconst anylogger = require('anylogger')\nconst log = anylogger('my-library')\nlog.info('Logging is easy!')\n```\n\n> This way, your library does not get tightly coupled to any specific logger\n\n### Use in tests for your library\n\nIf you have installed an adapter as a dev dependency, you can use that adapter\nin your tests so you get the logging the way you like it in your tests.\n\n#### import\n*my-library.test.js*\n```js\n// e.g. for anylogger-console\nimport 'anylogger-console'\n// all loggers will now use the console\nimport anylogger from 'anylogger'\nconst log = anylogger('my-lbrary:test')\nlog.info('Logging is easy!')\n```\n\n#### require\n*my-library.test.js*\n```js\n// e.g. for anylogger-console\nrequire('anylogger-console')\n// all loggers will now use the console\nconst anylogger = require('anylogger')\nconst log = anylogger('my-lbrary:test')\nlog.info('Logging is easy!')\n```\n\n### Use in an application project\n\nInstall anylogger, your logging framework of choice and an adapter\nif needed as regular dependencies. Then, in your main entry point,\ninclude the adapter along with anylogger:\n\n#### import\n*main.js*\n```js\n// e.g. for anylogger-console\nimport adapter from 'anylogger-console'\nimport anylogger from 'anylogger'\nadapter(anylogger)\n// all loggers will now use the console\nconst log = anylogger('my-app')\nlog.info('Logging is easy!')\n```\n\n#### require\n*main.js*\n```js\n// e.g. for anylogger-console\nconst adapter = require('anylogger-console')\nconst anylogger = require('anylogger')\nadapter(anylogger)\n// all loggers will now use the console\nconst log = anylogger('my-app')\nlog.info('Logging is easy!')\n```\n\nIn your other application modules, use only anylogger and restrict yourself to\nthe [Anylogger API](#anylogger-api) to stay framework-independent:\n\n#### import\n*my-module.js*\n```js\nimport anylogger from 'anylogger'\nconst log = anylogger('my-module')\nlog.info('Logging is easy!')\n```\n\n#### require\n*my-module.js*\n```js\nconst anylogger = require('anylogger')\nconst log = anylogger('my-module')\nlog.info('Logging is easy!')\n```\n\nBy limiting yourself to the anylogger API, you ensure that even the code in\nyour aplication modules remains logging framework independent. That way,\nyou can easily turn an application module into a library later should the\nneed arise. Or should you want to switch logging libraries, you will be able\nto do that by only changing that one single line that imports the adapter\nin the entrypoint in *main.js* or whatever your main file is called.\n\n## Using anylogger for logging\n\nAnylogger is very natural to use:\n\n```js\nimport anylogger from 'anylogger'\nconst log = anylogger('my-module')\n\n// the log object is itself a function\n// this increases interop with `debug`\nlog('A log message')\nlog('debug', 'A debug message')\nlog('warn', 'A warning message')\n\n// the log object also has methods,\n// increasing interop with the console\nlog.info('Starting...')\nlog.warn('Watch out!')\nlog.error('Oh no!! Something went wrong')\n\n// the log API supports the concept of levels\nObject.keys(anylogger.levels)\n// > ['error', 'warn', 'info', 'log', 'debug', 'trace']\nif (log.enabledFor('warn')) {\n  log.warn(expensiveArguments())\n}\n```\n\n\n## Anylogger API\n\nSo what does this API look like?\n\n### anylogger\n\n```js\nfunction anylogger(name: string) => Logger\n```\n\nThe main function to call to get a logger.\nAccepts the logger name as argument.\n\n#### name\nThe name of the logger. String.\nThe recommended format is `<package-name>[:<sub>[:<sub> [..]]]`,\nas this is the [convention](https://www.npmjs.com/package/debug#conventions)\nused by the highly popular `debug` module. But you are free to pick\nany name you want as long as you steer clear of the characters `'*'`,\n`'='` and `';'` in the logger name.\n\n#### returns\nThe existing logger with that name, or a newly created one.\n\nThe returned logger adheres to the `Logger` type:\n\n```ts\n\n```\n\n This means it is a\n`LogFunction` and a `LogObject` all at once. The `LogFunction` aspect makes\nanylogger loggers compatible with `debug` out of the box, whereas the\n`LogObject` aspect makes them compatible with the console and most other\nlogging libraries. I call that a Win-Win!\n\n\n## Logging API\n\nThe logger returned by [`anylogger`](#anylogger) is a function that can\ndo logging on it's own:\n\n```js\nlog('message')          // logs a message at `log` level\nlog('info', 'message')  // logs a message at `info` level\n```\n\nIn addition, the logger looks like a simple console object:\n\n```js\nlog.debug('message')\nlog.info('message')\n```\n\nBecause of this, the logger created by anylogger is compatible with most\nlogging frameworks out there, which mostly use one or both of these approaches.\n\nThe main API looks like this (in pseudo code):\n\n```js\nlog: function([level='log'], ...args)\nlog.error: function(...args)\nlog.warn: function(...args)\nlog.info: function(...args)\nlog.log: function(...args)\nlog.debug: function(...args)\nlog.trace: function(...args)\nlog.enabledFor: function(level) => truthy or falsey\n```\n\nAnd that's about it. However this covers the basic logging needs.\n\n> Note that all logging methods here are part of the upcoming\n> [Console standard](https://console.spec.whatwg.org/), but not all platforms\n> and frameworks support all of them. In particular the `debug` method is not\n> available everywhere. Anylogger will make sure that the `debug` function is\n> polyfilled if needed.\n\nIs your logging framework not supported? No fear, just...\n\n\n## Write an anylogger adapter\n\nTo write an anylogger adapter, you need to make a project that includes both\nanylogger and the logging framework the adapter is for as peer dependencies.\n\nYou then need to modify one or more of the\n[anylogger extension points](#anylogger-extension-points)\nso the created loggers will be compliant with both the anylogger\n[Logging API](#logging-api) as well as with the logging framework's own API.\n\nIt is recommended you call your library `anylogger-[adapter]`, where\n`[adapter]` should be replaced with the name of the logging framework\nthe adapter is for. For example, the adapter for `debug` is called\n`anylogger-debug`.\n\nIn addition, it is recommended you add the keyword `\"anylogger\"` to the\n*package.json* file of your adapter project, so it will show up in the list of\n[available adapters](https://www.npmjs.com/search?q=keywords:anylogger).\n\n### anylogger extension points\n\nThe process of logger creation and invocation is split up in such a way\nas to optimize possible extension points allowing extensions to re-use\nanylogger functionality and avoid having to duplicate code. The extension\npoints are:\n\n#### anylogger.levels\n```js\nanylogger.levels = {error:1, warn:2, info:3, log:4, debug:5, trace:6}\n```\nAn object containing a mapping of level names to level values.\n\nTo be compliant with the anylogger API, loggers should support at least\nthe log methods corresponding to the default levels, but they may define\nadditional levels and they may choose to use different numeric values\nfor all the levels.\n\nThe guarantees the Anylogger API makes are:\n* there is a logging method corresponding to each level listed in `anylogger.levels`\n* the levels `error`, `warn`, `info`, `log`, `debug` and `trace` are always there\n* each level corresponds to a numeric value\n\nNote that the Anylogger API explicitly does not guarantee that all levels\nhave distinct values or that the numeric values will follow any pattern\nor have any specific order. For this reason it is best to think of levels\nas separate log channels, possibly going to different output locations.\n\nYou can replace or change this object to include levels corresponding with\nthose available in the framework you are writing an adapter for. Please\nmake sure to always include the default levels as well so all code can\nrely on the 6 console methods `error`, `warn`, `info`, `log`, `debug` and\n`trace` to always be there.\n\n#### anylogger.new\n```js\nanylogger.new(name, options) => logger\n```\nCreates a new logger function that calls `anylogger.log` when invoked.\n\nUses `new Function(..)` to create a named function so that function.name\ncorresponds to the module name given. Polyfills function.name on platforms\nwhere it is not natively available.\n\n##### name\nThe name of the new logger. String. Required.\n\n##### options\nAn optional options object. Object. Optional.\n\nIf the logging framework you are writing an adapter for uses an options\nobject, you should override `anylogger.new` and do something useful with\nthe options object here (set it as a property on the logger for example),\nbecause the default implementation just ignores it.\n\nInstead of completely trying to replace the original method, I recommend you\nchain it to include your one-time customizations like this:\n\n```js\nimport anylogger from 'anylogger'\n\n// save the original function\nconst make = anylogger.new\n\n// override anylogger.new\nanylogger.new = (name, options) => {\n  // call the original function to chain it\n  var logger = make(name, options)\n  // do something useful with the options object\n  logger.options = options\n  // return the customized logger\n  return logger\n}\n```\n\n> All anylogger methods are independent of `this` so they can all be easily chained\n\nIf you need to re-apply customizations any time relevant config changes (such\nas active log level changing), override `anylogger.ext`.\n\n#### anylogger.ext\n```js\nanylogger.ext(logger) => logger\n```\n\nCalled when a logger needs to be extended, either because it was newly\ncreated, or because it's configuration or settings changed in some way.\n\nThis method must ensure that a log method is available on the logger for\neach level in `anylogger.levels`.\n\nWhen overriding `anylogger.ext`, please ensure the function can safely\nbe called multiple times on the same object\n\n##### logger\nThe logger that should be (re-)extended. Function. Required.\n\nThe default implementation loops over the\n[`anylogger.levels`](#anyloggerlevels) and creates noop methods for each level.\nAdditionally it creates a noop `enabledFor` that always returns `undefined`.\n\nYou can override or chain this method to change the way the log methods are\n(re-)created. In a library that supports log levels, all methods corresponding\nto log levels equal to or higher than the currently active level might be\nreplaced with console methods instead. Or maybe the destination of the log\nmessages might change dynamically based on configuration. Apply such changes\nin `anylogger.ext` as it will be called again whenever relevant config changes.\nThis allows adapters to (re-)extend the logger so that the new configuration\ntakes effect.\n\n> You may need to ensure in your adapter that `anylogger.ext` is called\n> whenever relevant config changes. By hooking into setters for example.\n\n#### anylogger.log\n```js\nanylogger.log([level='log'], ...args)\n```\nThe log function returned by anylogger calls `anylogger.log`, which determines\nthe log level and invokes the appropriate log method.\n\nPlease have a look at the\n[source](https://unpkg.com/anylogger@1.1.0-beta.3/anylogger.js)\nit should make it more clear how to write an adapter. Also consider studying\nthe [available adapters](https://www.npmjs.com/search?q=keywords:anylogger)\nand learn by example.\n\n\n## Give something back\n\nIf you wrote an `anylogger` adapter, make sure to share it back with the\ncommunity. Publish it to NPM for all to use!\n\n\n## Credits\n\nCredits go to these people, who helped with this project:\n\n* [Jakub Jirutka](https://github.com/jirutka) who [contributed](https://github.com/Download/anylogger/pull/2) TypeScript type declarations.\n* [TJ Holowaychuk](https://github.com/tj) for writing [debug](https://npmjs.com/package/debug)\n* [Tim Perry](https://github.com/pimterry) for writing [loglevel](https://npmjs.com/package/loglevel)\n* The authors of log4js, log4js-node, morgan, bunyan, pino and all other log libraries out there\n\n\n## Issues\n\nAdd an issue in this project's\n[issue tracker](https://github.com/download/anylogger/issues)\nto let me know of any problems you find, or questions you may have.\n\n\n## Copyright\n\n© 2020 by [Stijn de Witt](https://stijndewitt.com). Some rights reserved.\nContributions by [Jakub Jirutka](https://github.com/jirutka).\n\n\n## License\n\nLicensed under the [MIT Open Source license](https://opensource.org/licenses/MIT).\n\n\n## gzip-size\n\nThe GZIP algorithm is available in different flavours and with different\npossible compression settings. The sizes quoted in this README have been\nmeasured using [gzip-size](https://npmjs.com/package/gzip-size)\nby [Sindre Sorhus](https://github.com/sindresorhus), your mileage may vary.\n","readmeFilename":"README.md","gitHead":"b9d64473fce9b0ed30f4774197bb20b7ba076b3d","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_nodeVersion":"18.19.0","_npmVersion":"10.2.4","dist":{"integrity":"sha512-OwUWOUgkoWVS9FMm6QLy80UdXwLDj2V07QJajn8bKeuqpJTNMBtcjFWzsPLh4nZBBpFKXw0s7MPtFhlYvHn+Rw==","shasum":"be435cfd1d5d597f0ad55dd34b8c544e3dbcbfc0","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-1.1.0-beta.3.tgz","fileCount":11,"unpackedSize":52877,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGOPQxQ2z9yhqJl9qzjDyfdS6UI6jlYk46o+6A8+bOesAiAWCAKpWKNJOPbrdvv9AtTZ6HZvc6IxNkDUPvkg5N4+Yw=="}]},"_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"directories":{},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_1.1.0-beta.3_1708717904867_0.3547921358664048"},"_hasShrinkwrap":false},"1.1.0-beta.4":{"name":"anylogger","version":"1.1.0-beta.4","description":"Get a logger. Any logger.","type":"module","exports":{".":{"import":"./anylogger.js","require":"./anylogger.cjs"}},"src":"./anylogger.ts","main":"./anylogger.js","cjs":"./anylogger.cjs","types":"./anylogger.d.ts","iife":"./anylogger.iife.js","min":"./anylogger.min.js","spec":"./anylogger.spec.js","unpkg":"./anylogger.min.js","scripts":{"build":"tsc && npm run test -s && npm run minify -s && npm run docs -s","clean":"rimraf anylogger.cjs anylogger.d.ts anylogger.d.ts.map anylogger.iife.js anylogger.js anylogger.js.map anylogger.min.js","docs":"cross-env NODE_ENV=production node build.js docs","minify":"cross-env NODE_ENV=production node build.js minify","package":"cross-env NODE_ENV=production rollup -c","prepare":"npm run build","test":"npm run package -s && mocha anylogger.spec.js"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"devDependencies":{"@types/node":"^20.11.19","anylogger-console":"^1.1.0-beta.5","chai":"^5.1.0","cross-env":"^7.0.3","gzip-size":"^7.0.0","mocha":"^10.3.0","rimraf":"^5.0.5","rollup":"^4.12.0","sinon":"^17.0.1","typescript":"^5.3.3","uglify-js":"^3.17.4"},"keywords":["anylogger","anylogger-console","anylogger-debug","anylogger-loglevel","anylogger-log4js","anylogger-tutorial","console","logger","logging","logging facade","microscopically small","tiny","ulog","1kB"],"_id":"anylogger@1.1.0-beta.4","readme":"# anylogger <sub><sup>1.1.0-beta.4</sup></sub>\n### Get a logger. Any logger.\n\n[![npm](https://img.shields.io/npm/v/anylogger.svg)](https://npmjs.com/package/anylogger)\n[![license](https://img.shields.io/npm/l/anylogger.svg)](https://opensource.org/licenses/MIT)\n![mind BLOWN](https://img.shields.io/badge/mind-BLOWN-ff69b4.svg)\n\n\n## The logger for libraries\n\nWhen we want to do logging from a library, we don't want to force the choice of\nlogging framework on the application developer. Instead, we want to use whatever\nlogging framework the application developer selected. `anylogger` let's you do\njust that.\n\n\n## Quickstart\n\n<table>\n  <tr>\n    <th><h3>Library</h3></th>\n    <th><h3>App with <a href=\"https://npmjs.com/package/anylogger-console\"\n    ><tt>console</tt></a></h3></th>\n    <th><h3>App with <a href=\"https://npmjs.com/package/anylogger-debug\"\n    ><tt>debug</tt></a></h3></th>\n    <th><h3>App with <a href=\"https://npmjs.com/package/anylogger-loglevel\"\n    ><tt>loglevel</tt></a></h3></th>\n    <th><h3>App with <a href=\"https://npmjs.com/package/ulog\"\n    ><tt>ulog</tt></a></h3></th>\n    <th><h3>App with <a href=\"https://npmjs.com/package/anylogger-log4js\"\n    ><tt>log4js</tt></a></h3></th>\n  </tr>\n  <tr>\n    <td><h5>Install</h5>\n      <pre>npm i -D anylogger</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-library')\nlog('Anylogger is easy!')</pre>\n      <p>Add to peerDependencies and install\n      an adapter as <a href=\"#install-dev-dependencies-in-a-library-project\"\n      >dev dependencies</a>.</p>\n    </td>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger\n anylogger-console</pre>\n      <h5>Add to entry point</h5>\n      <i>index.js</i>\n      <pre>import adapter from\n  'anylogger-console'\nimport anylogger from 'anylogger'\nadapter(anylogger, console)</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-app')\nlog('Anylogger is easy!')</pre>\n    </td>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger\n debug anylogger-debug</pre>\n      <h5>Add to entry point</h5>\n      <i>index.js</i>\n      <pre>import adapter from\n  'anylogger-debug'\nimport anylogger from 'anylogger'\nimport debug from 'debug'\nadapter(anylogger, debug)</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-app')\nlog('Anylogger is easy!')</pre>\n    </td>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger\n loglevel anylogger-loglevel</pre>\n      <h5>Add to entry point</h5>\n      <i>index.js</i>\n      <pre>import adapter from \"anylogger-loglevel\"\nimport anylogger from 'anylogger'\nimport loglevel from 'loglevel'\nadapter(anylogger, loglevel)</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-app')\nlog('Anylogger is easy!')</pre>\n    </td>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger ulog</pre>\n      <h5>Add to entry point</h5>\n      <i>index.js</i>\n      <pre>import adapter from 'ulog/adapter'\nimport anylogger from 'anylogger'\nimport ulog from 'ulog'\nadapter(anylogger, ulog)</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-app')\nlog('Anylogger is easy!')</pre>\n    </td>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger\n log4js anylogger-log4js</pre>\n      <h5>Add to entry point</h5>\n      <i>index.js</i>\n      <pre>import adapter from 'anylogger-log4js'\nimport anylogger from 'anylogger'\nimport log4js from 'log4js'\nadapter(anylogger, log4js)</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-app')\nlog('Anylogger is easy!')</pre>\n    </td>\n  </tr>\n</table>\n\n\n## What is this?\n\n### A logging facade\n\nWe, the Javascript community, really need a logging facade. There are dozens\nof logging libraries around and we library authors face a challenge. Which logger\ndo we pick? Should we make this configurable? Should we just not log? Use the\nconsole directly? How do we deal with this complexity?\n\nIn software architecture, a\n[facade](https://en.wikipedia.org/wiki/Facade_pattern) hides a complex system\nbehind a simple interface. In the context of our logging problem, we can have\nour library log to a simple facade object. In our application we back the\nfacade object by the actual logging framework with an\n[adapter](https://en.wikipedia.org/wiki/Adapter_pattern).\n\nSo what we need is a simple and small logging facade and a bunch of adapters\nfor popular loggers.\n\n### Introducing `anylogger`\n\nA tiny ~[259](#gzip-size) bytes logging facade that you can include in your\nlibrary to support logging, while at the same time allowing application\ndevelopers to plug in any logging framework they choose.\n\nInstead of building in your own library specific configuration mechanism,\nor forcing the choice for a certain logging framework on your users,\nor just abandoning logging altogether, choose `anylogger` and for just\n~[259](#gzip-size) bytes shared between all libraries doing this, we can\nplug in any framework of our choice and all libraries will automatically\nstart to use that framework. Wouldn't it be much better and easier?\n\n\n## Download\n\n* [anylogger.ts](https://unpkg.com/anylogger@1.1.0-beta.4/anylogger.ts)\n  (fully commented source ~7kB)\n* [anylogger.d.ts](https://unpkg.com/anylogger@1.1.0-beta.4/anylogger.d.ts)\n  (typescript type definitions ~6kB)\n* [anylogger.js](https://unpkg.com/anylogger@1.1.0-beta.4/anylogger.js)\n  (javascript esm module ~2kB)\n* [anylogger.cjs](https://unpkg.com/anylogger@1.1.0-beta.4/anylogger.cjs)\n  (javascript commonjs module ~2kB)\n* [anylogger.min.js](https://unpkg.com/anylogger@1.1.0-beta.4/anylogger.min.js)\n  (minified 355 bytes, gzipped ~[259](#gzip-size) bytes)\n\n\n## CDN\n\n*index.html*\n```html\n<script src=\"https://unpkg.com/anylogger@1.1.0-beta.4\"></script>\n<script>(function(){ // IIFE\n  var log = anylogger('index.html')\n  log.info('Logging is simple!')\n})()</script>\n```\n\nNote that anylogger by default does nothing. You need an adapter to see output.\nFor example, to send all logging to the console, you can use\n[`anylogger-console`](https://npmjs.com/package/anylogger-console).\n\n\n## Install\n\nAlways only install anylogger in application projects. In library projects,\ninstall anylogger as a dev dependency and make it a peer dependency.\n\n### Install in an application project\n\nIf you are building an application project and have selected a logging\nframework, install anylogger, the selected logging framework and the\nadapter for that logging framework if needed.\n\n**For [anylogger-console](https://npmjs.com/package/anylogger-console)**:\n\n```sh\nnpm install --save anylogger anylogger-console\n```\n\n**For [debug](https://npmjs.com/package/debug)**:\n\n```sh\nnpm install --save anylogger debug anylogger-debug\n```\n> See [anylogger-debug](https://npmjs.com/package/anylogger-debug)\n\n**For [loglevel](https://npmjs.com/package/loglevel)**:\n\n```sh\nnpm install --save anylogger loglevel anylogger-loglevel\n```\n> See [anylogger-loglevel](https://npmjs.com/package/anylogger-loglevel)\n\n**For [ulog](https://npmjs.com/package/ulog)**\n\n```sh\nnpm install --save anylogger ulog\n```\n> The adapter is included with `ulog`\n\n**For [log4js](https://npmjs.com/package/log4js)**:\n\n```sh\nnpm install --save anylogger log4js anylogger-log4js\n```\n> See [anylogger-log4js](https://npmjs.com/package/anylogger-log4js)\n\nCheck out all\n[available adapters](https://www.npmjs.com/search?q=keywords:anylogger).\n\n\n### Install in a library project\n\nIf you are building a library, install anylogger as a dev-dependency:\n\n```sh\nnpm install --save-dev anylogger\n```\n\nThis will add `anylogger` as a dev-dependency to your `package.json`.\n\nTo ensure that application projects using your library also install\n`anylogger`, make it a peer dependency. Add this to *package.json*:\n\n```json\n\"peerDependencies\": {\n  \"anylogger\": \"1.x || >=1.1.0-beta || >=1.2.0-beta || >=1.3.0-beta || >=1.4.0-beta || >=1.5.0-beta || >=1.6.0-beta || >=1.7.0-beta || >=1.8.0-beta || >=1.9.0-beta\"\n}\n```\n\n>\n> The list of (future) betas is an annoyance in the way NPM deals with beta\n> tags unfortunately. IMHO it is clear that `1.1.0-beta` matches `1.x` and\n> should thus be covered by it, but alas, NPM thinks otherwise.\n>\n> If you want your library to also work with possible future betas of\n> anylogger, then include this list of betas (recommended).\n>\n\nAdd anylogger to your install instructions in your project README.md:\n\n>\n> ### Install\n>\n> `npm install --save my-library anylogger`\n>\n\n### Install dev dependencies in a library project\n\nIf you are building a library, you can use the logging framework\nyou prefer without tightly coupling your library to it by installing\nthat library and the adapter for it if needed as development dependencies:\n\n**For [anylogger-console](https://npmjs.com/package/anylogger-console)**:\n\n```sh\nnpm install --save-dev anylogger-console\n```\n\n**For [debug](https://npmjs.com/package/debug)**:\n\n```sh\nnpm install --save-dev debug anylogger-debug\n```\n> See [anylogger-debug](https://npmjs.com/package/anylogger-debug)\n\n**For [loglevel](https://npmjs.com/package/loglevel)**:\n\n```sh\nnpm install --save-dev loglevel anylogger-loglevel\n```\n> See [anylogger-loglevel](https://npmjs.com/package/anylogger-loglevel)\n\n**For [ulog](https://npmjs.com/package/ulog)**:\n\n```sh\nnpm install --save-dev ulog\n```\n> The adapter is included with `ulog`\n\n**For [log4js](https://npmjs.com/package/log4js)**:\n\n```sh\nnpm install --save-dev log4js anylogger-log4js\n```\n> See [anylogger-log4js](https://npmjs.com/package/anylogger-log4js)\n\n\n## Include\n\nDepending on the type of project, either just use anylogger,\nor also include the adapter.\n\n### Include in a library\n\nIn your library code, only use anylogger and restrict yourself to the\n[Anylogger API](#anylogger-api) to stay framework-independent:\n\n#### import\n*my-library.js*\n```js\nimport anylogger from 'anylogger'\nconst log = anylogger('my-library')\nlog.info('Logging is easy!')\n```\n\n#### require\n*my-library.js*\n```js\nconst anylogger = require('anylogger')\nconst log = anylogger('my-library')\nlog.info('Logging is easy!')\n```\n\n> This way, your library does not get tightly coupled to any specific logger\n\n### Use in tests for your library\n\nIf you have installed an adapter as a dev dependency, you can use that adapter\nin your tests so you get the logging the way you like it in your tests.\n\n#### import\n*my-library.test.js*\n```js\n// e.g. for anylogger-console\nimport adapter from 'anylogger-console'\nimport anylogger from 'anylogger'\nadapter(anylogger, console)\n// all loggers will now use the console\nconst log = anylogger('my-lbrary:test')\nlog.info('Logging is easy!')\n```\n\n#### require\n*my-library.test.js*\n```js\n// e.g. for anylogger-console\nconst adapter = require('anylogger-console')\nconst anylogger = require('anylogger')\nadapter(anylogger, console)\n// all loggers will now use the console\nconst log = anylogger('my-lbrary:test')\nlog.info('Logging is easy!')\n```\n\n### Use in an application project\n\nInstall anylogger, your logging framework of choice and an adapter\nif needed as regular dependencies. Then, in your main entry point,\ninclude the adapter along with anylogger:\n\n#### import\n*main.js*\n```js\n// e.g. for anylogger-console\nimport adapter from 'anylogger-console'\nimport anylogger from 'anylogger'\nadapter(anylogger, console)\n// all loggers will now use the console\nconst log = anylogger('my-app')\nlog.info('Logging is easy!')\n```\n\n#### require\n*main.js*\n```js\n// e.g. for anylogger-console\nconst adapter = require('anylogger-console')\nconst anylogger = require('anylogger')\nadapter(anylogger, console)\n// all loggers will now use the console\nconst log = anylogger('my-app')\nlog.info('Logging is easy!')\n```\n\nIn your other application modules, use only anylogger and restrict yourself to\nthe [Anylogger API](#anylogger-api) to stay framework-independent:\n\n#### import\n*my-module.js*\n```js\nimport anylogger from 'anylogger'\nconst log = anylogger('my-module')\nlog.info('Logging is easy!')\n```\n\n#### require\n*my-module.js*\n```js\nconst anylogger = require('anylogger')\nconst log = anylogger('my-module')\nlog.info('Logging is easy!')\n```\n\nBy limiting yourself to the anylogger API, you ensure that even the code in\nyour aplication modules remains logging framework independent. That way,\nyou can easily turn an application module into a library later should the\nneed arise. Or should you want to switch logging libraries, you will be able\nto do that by only changing that one single line that imports the adapter\nin the entrypoint in *main.js* or whatever your main file is called.\n\n## Using anylogger for logging\n\nAnylogger is very natural to use:\n\n```js\nimport anylogger from 'anylogger'\nconst log = anylogger('my-module')\n\n// the log object is itself a function\n// this increases interop with `debug`\nlog('A log message')\nlog('debug', 'A debug message')\nlog('warn', 'A warning message')\n\n// the log object also has methods,\n// increasing interop with the console\nlog.info('Starting...')\nlog.warn('Watch out!')\nlog.error('Oh no!! Something went wrong')\n\n// the log API supports the concept of levels\nObject.keys(anylogger.levels)\n// > ['error', 'warn', 'info', 'log', 'debug', 'trace']\nif (log.enabledFor('warn')) {\n  log.warn(expensiveArguments())\n}\n```\n\n\n## Anylogger API\n\nSo what does this API look like?\n\n### anylogger\n\n```js\nfunction anylogger(name: string) => Logger\n```\n\nThe main function to call to get a logger.\nAccepts the logger name as argument.\n\n#### name\nThe name of the logger. String.\nThe recommended format is `<package-name>[:<sub>[:<sub> [..]]]`,\nas this is the [convention](https://www.npmjs.com/package/debug#conventions)\nused by the highly popular `debug` module. But you are free to pick\nany name you want as long as you steer clear of the characters `'*'`,\n`'='` and `';'` in the logger name.\n\n#### returns\nThe existing logger with that name, or a newly created one.\n\nThe returned logger adheres to the `Logger` type:\n\n```ts\n\n```\n\n This means it is a\n`LogFunction` and a `LogObject` all at once. The `LogFunction` aspect makes\nanylogger loggers compatible with `debug` out of the box, whereas the\n`LogObject` aspect makes them compatible with the console and most other\nlogging libraries. I call that a Win-Win!\n\n\n## Logging API\n\nThe logger returned by [`anylogger`](#anylogger) is a function that can\ndo logging on it's own:\n\n```js\nlog('message')          // logs a message at `log` level\nlog('info', 'message')  // logs a message at `info` level\n```\n\nIn addition, the logger looks like a simple console object:\n\n```js\nlog.debug('message')\nlog.info('message')\n```\n\nBecause of this, the logger created by anylogger is compatible with most\nlogging frameworks out there, which mostly use one or both of these approaches.\n\nThe main API looks like this (in pseudo code):\n\n```ts\nlog: (level?:string, ...args: any) => void\nlog.error: (...args) => void\nlog.warn: (...args) => void\nlog.info: (...args) => void\nlog.log: (...args) => void\nlog.debug: (...args) => void\nlog.trace: (...args) => void\nlog.enabledFor: (level: string) => boolean | void\n```\n\nAnd that's about it. However this covers the basic logging needs.\n\n> Note that all logging methods here are part of the upcoming\n> [Console standard](https://console.spec.whatwg.org/), but not all platforms\n> and frameworks support all of them. In particular the `debug` method is not\n> available everywhere. Anylogger will make sure that the `debug` function is\n> polyfilled if needed.\n\nIs your logging framework not supported? No fear, just...\n\n\n## Write an anylogger adapter\n\nTo write an anylogger adapter, you need to make a project that includes both\nanylogger and the logging framework the adapter is for as peer dependencies.\n\nYou then need to modify one or more of the\n[anylogger extension points](#anylogger-extension-points)\nso the created loggers will be compliant with both the anylogger\n[Logging API](#logging-api) as well as with the logging framework's own API.\n\nIt is recommended you call your library `anylogger-[adapter]`, where\n`[adapter]` should be replaced with the name of the logging framework\nthe adapter is for. For example, the adapter for `debug` is called\n`anylogger-debug`.\n\nIn addition, it is recommended you add the keyword `\"anylogger\"` to the\n*package.json* file of your adapter project, so it will show up in the list of\n[available adapters](https://www.npmjs.com/search?q=keywords:anylogger).\n\n### anylogger extension points\n\nThe process of logger creation and invocation is split up in such a way\nas to optimize possible extension points allowing extensions to re-use\nanylogger functionality and avoid having to duplicate code. The extension\npoints are:\n\n#### anylogger.levels\n```js\nanylogger.levels = {error:1, warn:2, info:3, log:4, debug:5, trace:6}\n```\nAn object containing a mapping of level names to level values.\n\nTo be compliant with the anylogger API, loggers should support at least\nthe log methods corresponding to the default levels, but they may define\nadditional levels and they may choose to use different numeric values\nfor all the levels.\n\nThe guarantees the Anylogger API makes are:\n* there is a logging method corresponding to each level listed in `anylogger.levels`\n* the levels `error`, `warn`, `info`, `log`, `debug` and `trace` are always there\n* each level corresponds to a numeric value\n\nNote that the Anylogger API explicitly does not guarantee that all levels\nhave distinct values or that the numeric values will follow any pattern\nor have any specific order. For this reason it is best to think of levels\nas separate log channels, possibly going to different output locations.\n\nYou can replace or change this object to include levels corresponding with\nthose available in the framework you are writing an adapter for. Please\nmake sure to always include the default levels as well so all code can\nrely on the 6 console methods `error`, `warn`, `info`, `log`, `debug` and\n`trace` to always be there.\n\n#### anylogger.new\n```js\nanylogger.new(name: string) => LogFunction\n```\nCreates a new log function that calls `anylogger.log` when invoked.\n\nCreate a named function so that function.name corresponds to the module name\ngiven.\n\n##### name\nThe name of the new logger. String. Required.\n\n##### options\nAn optional options object. Object. Optional.\n\nIf the logging framework you are writing an adapter for uses an options\nobject, you should override `anylogger.new` and do something useful with\nthe options object here (set it as a property on the logger for example),\nbecause the default implementation just ignores it.\n\nInstead of completely trying to replace the original method, I recommend you\nchain it to include your one-time customizations like this:\n\n```js\nimport anylogger from 'anylogger'\n\n// save the original function\nconst make = anylogger.new\n\n// override anylogger.new\nanylogger.new = (name, options) => {\n  // call the original function to chain it\n  var logger = make(name, options)\n  // do something useful with the options object\n  logger.options = options\n  // return the customized logger\n  return logger\n}\n```\n\n> All anylogger methods are independent of `this` so they can all be easily chained\n\nIf you need to re-apply customizations any time relevant config changes (such\nas active log level changing), override `anylogger.ext`.\n\n#### anylogger.ext\n```js\nanylogger.ext(logfn: LogFunction) => Logger\n```\n\nCalled when a logger needs to be extended, either because it was newly\ncreated, or because it's configuration or settings changed in some way.\n\nThis method must ensure that a log method is available on the logger for\neach level in `anylogger.levels`.\n\nWhen overriding `anylogger.ext`, please ensure the function can safely\nbe called multiple times on the same object\n\n##### logger\nThe logger that should be (re-)extended. Function. Required.\n\nThe default implementation loops over the\n[`anylogger.levels`](#anyloggerlevels) and creates noop methods for each level.\nAdditionally it creates a noop `enabledFor` that always returns `undefined`.\n\nYou can override or chain this method to change the way the log methods are\n(re-)created. In a library that supports log levels, all methods corresponding\nto log levels equal to or higher than the currently active level might be\nreplaced with console methods instead. Or maybe the destination of the log\nmessages might change dynamically based on configuration. Apply such changes\nin `anylogger.ext` as it will be called again whenever relevant config changes.\nThis allows adapters to (re-)extend the logger so that the new configuration\ntakes effect.\n\n> You may need to ensure in your adapter that `anylogger.ext` is called\n> whenever relevant config changes. By hooking into setters for example.\n\n#### anylogger.log\n```js\nanylogger.log([level='log'], ...args)\n```\nThe log function returned by anylogger calls `anylogger.log`, which determines\nthe log level and invokes the appropriate log method.\n\nPlease have a look at the\n[source](https://unpkg.com/anylogger@1.1.0-beta.4/anylogger.js)\nit should make it more clear how to write an adapter. Also consider studying\nthe [available adapters](https://www.npmjs.com/search?q=keywords:anylogger)\nand learn by example.\n\n\n## Give something back\n\nIf you wrote an `anylogger` adapter, make sure to share it back with the\ncommunity. Publish it to NPM for all to use!\n\n\n## Credits\n\nCredits go to these people, who helped with this project:\n\n* [Jakub Jirutka](https://github.com/jirutka) who [contributed](https://github.com/Download/anylogger/pull/2) TypeScript type declarations.\n* [TJ Holowaychuk](https://github.com/tj) for writing [debug](https://npmjs.com/package/debug)\n* [Tim Perry](https://github.com/pimterry) for writing [loglevel](https://npmjs.com/package/loglevel)\n* The authors of log4js, log4js-node, morgan, bunyan, pino and all other log libraries out there\n\n\n## Issues\n\nAdd an issue in this project's\n[issue tracker](https://github.com/download/anylogger/issues)\nto let me know of any problems you find, or questions you may have.\n\n\n## Copyright\n\n© 2024 by [Stijn de Witt](https://stijndewitt.com). Some rights reserved.\nContributions by [Jakub Jirutka](https://github.com/jirutka).\n\n\n## License\n\nLicensed under the [MIT Open Source license](https://opensource.org/licenses/MIT).\n\n\n## gzip-size\n\nThe GZIP algorithm is available in different flavours and with different\npossible compression settings. The sizes quoted in this README have been\nmeasured using [gzip-size](https://npmjs.com/package/gzip-size)\nby [Sindre Sorhus](https://github.com/sindresorhus), your mileage may vary.\n","readmeFilename":"README.md","gitHead":"028a49c0f33701b8b8f9932ebb3e863ae20d4a50","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_nodeVersion":"18.19.0","_npmVersion":"10.2.4","dist":{"integrity":"sha512-vpR2yy0CbkTY9tt5/odakhW1p0MmeqmKGfIcQLK0+oLW9uYkXTc+E9D8pAi5DILpcwQi/b6jmOGLbn/JY+u+WA==","shasum":"55a87a0a0c7b4119f9272c2469e41dfaf9869c95","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-1.1.0-beta.4.tgz","fileCount":13,"unpackedSize":61556,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCP5epANiZ/v7gFwCrZqJk/Hy5sy9padpDCgsowHAHYSwIgKtCcKJieXS80oP3KPrTnFIKCoLPeKakuP3UrWdI7jso="}]},"_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"directories":{},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_1.1.0-beta.4_1708730913130_0.4446337479306759"},"_hasShrinkwrap":false},"1.1.0-beta.5":{"name":"anylogger","version":"1.1.0-beta.5","description":"Get a logger. Any logger.","type":"module","exports":{".":{"import":"./anylogger.js","require":"./anylogger.cjs"}},"src":"./anylogger.ts","main":"./anylogger.js","cjs":"./anylogger.cjs","types":"./anylogger.d.ts","iife":"./anylogger.iife.js","min":"./anylogger.min.js","spec":"./anylogger.spec.js","unpkg":"./anylogger.min.js","scripts":{"build":"tsc && npm run test -s && npm run minify -s && npm run docs -s","clean":"rimraf anylogger.cjs anylogger.d.ts anylogger.d.ts.map anylogger.iife.js anylogger.js anylogger.js.map anylogger.min.js","docs":"cross-env NODE_ENV=production node build.js docs","minify":"cross-env NODE_ENV=production node build.js minify","package":"cross-env NODE_ENV=production rollup -c","prepare":"npm run build","test":"npm run package -s && mocha anylogger.spec.js"},"author":{"name":"Stijn de Witt"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"devDependencies":{"@types/node":"^20.11.19","anylogger-console":"^1.1.0-beta.5","chai":"^5.1.0","cross-env":"^7.0.3","gzip-size":"^7.0.0","mocha":"^10.3.0","rimraf":"^5.0.5","rollup":"^4.12.0","sinon":"^17.0.1","typescript":"^5.3.3","uglify-js":"^3.17.4"},"keywords":["anylogger","anylogger-console","anylogger-debug","anylogger-loglevel","anylogger-log4js","anylogger-tutorial","console","logger","logging","logging facade","microscopically small","tiny","ulog","1kB"],"_id":"anylogger@1.1.0-beta.5","readme":"# anylogger <sub><sup>1.1.0-beta.5</sup></sub>\n### Get a logger. Any logger.\n\n[![npm](https://img.shields.io/npm/v/anylogger.svg)](https://npmjs.com/package/anylogger)\n[![license](https://img.shields.io/npm/l/anylogger.svg)](https://opensource.org/licenses/MIT)\n![mind BLOWN](https://img.shields.io/badge/mind-BLOWN-ff69b4.svg)\n\n\n## The logger for libraries\n\nWhen we want to do logging from a library, we don't want to force the choice of\nlogging framework on the application developer. Instead, we want to use whatever\nlogging framework the application developer selected. `anylogger` let's you do\njust that.\n\n\n## Quickstart\n\n<table>\n  <tr>\n    <th><h3>Library</h3></th>\n    <th><h3>App with <a href=\"https://npmjs.com/package/anylogger-console\"\n    ><tt>console</tt></a></h3></th>\n    <th><h3>App with <a href=\"https://npmjs.com/package/anylogger-debug\"\n    ><tt>debug</tt></a></h3></th>\n    <th><h3>App with <a href=\"https://npmjs.com/package/anylogger-loglevel\"\n    ><tt>loglevel</tt></a></h3></th>\n    <th><h3>App with <a href=\"https://npmjs.com/package/ulog\"\n    ><tt>ulog</tt></a></h3></th>\n    <th><h3>App with <a href=\"https://npmjs.com/package/anylogger-log4js\"\n    ><tt>log4js</tt></a></h3></th>\n  </tr>\n  <tr>\n    <td><h5>Install</h5>\n      <pre>npm i -D anylogger</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-library')\nlog('Anylogger is easy!')</pre>\n      <p>Add to peerDependencies and install\n      an adapter as <a href=\"#install-dev-dependencies-in-a-library-project\"\n      >dev dependencies</a>.</p>\n    </td>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger\n anylogger-console</pre>\n      <h5>Add to entry point</h5>\n      <i>index.js</i>\n      <pre>import adapter from\n  'anylogger-console'\nimport anylogger from 'anylogger'\nadapter(anylogger, console)</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-app')\nlog('Anylogger is easy!')</pre>\n    </td>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger\n debug anylogger-debug</pre>\n      <h5>Add to entry point</h5>\n      <i>index.js</i>\n      <pre>import adapter from\n  'anylogger-debug'\nimport anylogger from 'anylogger'\nimport debug from 'debug'\nadapter(anylogger, debug)</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-app')\nlog('Anylogger is easy!')</pre>\n    </td>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger\n loglevel anylogger-loglevel</pre>\n      <h5>Add to entry point</h5>\n      <i>index.js</i>\n      <pre>import adapter from \"anylogger-loglevel\"\nimport anylogger from 'anylogger'\nimport loglevel from 'loglevel'\nadapter(anylogger, loglevel)</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-app')\nlog('Anylogger is easy!')</pre>\n    </td>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger ulog</pre>\n      <h5>Add to entry point</h5>\n      <i>index.js</i>\n      <pre>import adapter from 'ulog/adapter'\nimport anylogger from 'anylogger'\nimport ulog from 'ulog'\nadapter(anylogger, ulog)</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-app')\nlog('Anylogger is easy!')</pre>\n    </td>\n    <td><h5>Install</h5>\n      <pre>npm i -P anylogger\n log4js anylogger-log4js</pre>\n      <h5>Add to entry point</h5>\n      <i>index.js</i>\n      <pre>import adapter from 'anylogger-log4js'\nimport anylogger from 'anylogger'\nimport log4js from 'log4js'\nadapter(anylogger, log4js)</pre>\n      <h5>Use</h5>\n      <pre>import anylogger from 'anylogger'\nconst log = anylogger('my-app')\nlog('Anylogger is easy!')</pre>\n    </td>\n  </tr>\n</table>\n\n\n## What is this?\n\n### A logging facade\n\nWe, the Javascript community, really need a logging facade. There are dozens\nof logging libraries around and we library authors face a challenge. Which logger\ndo we pick? Should we make this configurable? Should we just not log? Use the\nconsole directly? How do we deal with this complexity?\n\nIn software architecture, a\n[facade](https://en.wikipedia.org/wiki/Facade_pattern) hides a complex system\nbehind a simple interface. In the context of our logging problem, we can have\nour library log to a simple facade object. In our application we back the\nfacade object by the actual logging framework with an\n[adapter](https://en.wikipedia.org/wiki/Adapter_pattern).\n\nSo what we need is a simple and small logging facade and a bunch of adapters\nfor popular loggers.\n\n### Introducing `anylogger`\n\nA tiny ~[259](#gzip-size) bytes logging facade that you can include in your\nlibrary to support logging, while at the same time allowing application\ndevelopers to plug in any logging framework they choose.\n\nInstead of building in your own library specific configuration mechanism,\nor forcing the choice for a certain logging framework on your users,\nor just abandoning logging altogether, choose `anylogger` and for just\n~[259](#gzip-size) bytes shared between all libraries doing this, we can\nplug in any framework of our choice and all libraries will automatically\nstart to use that framework. Wouldn't it be much better and easier?\n\n\n## Download\n\n* [anylogger.ts](https://unpkg.com/anylogger@1.1.0-beta.5/anylogger.ts)\n  (fully commented source ~7kB)\n* [anylogger.d.ts](https://unpkg.com/anylogger@1.1.0-beta.5/anylogger.d.ts)\n  (typescript type definitions ~6kB)\n* [anylogger.js](https://unpkg.com/anylogger@1.1.0-beta.5/anylogger.js)\n  (javascript esm module ~2kB)\n* [anylogger.cjs](https://unpkg.com/anylogger@1.1.0-beta.5/anylogger.cjs)\n  (javascript commonjs module ~2kB)\n* [anylogger.min.js](https://unpkg.com/anylogger@1.1.0-beta.5/anylogger.min.js)\n  (minified 355 bytes, gzipped ~[259](#gzip-size) bytes)\n\n\n## CDN\n\n*index.html*\n```html\n<script src=\"https://unpkg.com/anylogger@1.1.0-beta.5\"></script>\n<script>(function(){ // IIFE\n  var log = anylogger('index.html')\n  log.info('Logging is simple!')\n})()</script>\n```\n\nNote that anylogger by default does nothing. You need an adapter to see output.\nFor example, to send all logging to the console, you can use\n[`anylogger-console`](https://npmjs.com/package/anylogger-console).\n\n\n## Install\n\nAlways only install anylogger in application projects. In library projects,\ninstall anylogger as a dev dependency and make it a peer dependency.\n\n### Install in an application project\n\nIf you are building an application project and have selected a logging\nframework, install anylogger, the selected logging framework and the\nadapter for that logging framework if needed.\n\n**For [anylogger-console](https://npmjs.com/package/anylogger-console)**:\n\n```sh\nnpm install --save anylogger anylogger-console\n```\n\n**For [debug](https://npmjs.com/package/debug)**:\n\n```sh\nnpm install --save anylogger debug anylogger-debug\n```\n> See [anylogger-debug](https://npmjs.com/package/anylogger-debug)\n\n**For [loglevel](https://npmjs.com/package/loglevel)**:\n\n```sh\nnpm install --save anylogger loglevel anylogger-loglevel\n```\n> See [anylogger-loglevel](https://npmjs.com/package/anylogger-loglevel)\n\n**For [ulog](https://npmjs.com/package/ulog)**\n\n```sh\nnpm install --save anylogger ulog\n```\n> The adapter is included with `ulog`\n\n**For [log4js](https://npmjs.com/package/log4js)**:\n\n```sh\nnpm install --save anylogger log4js anylogger-log4js\n```\n> See [anylogger-log4js](https://npmjs.com/package/anylogger-log4js)\n\nCheck out all\n[available adapters](https://www.npmjs.com/search?q=keywords:anylogger).\n\n\n### Install in a library project\n\nIf you are building a library, install anylogger as a dev-dependency:\n\n```sh\nnpm install --save-dev anylogger\n```\n\nThis will add `anylogger` as a dev-dependency to your `package.json`.\n\nTo ensure that application projects using your library also install\n`anylogger`, make it a peer dependency. Add this to *package.json*:\n\n```json\n\"peerDependencies\": {\n  \"anylogger\": \"1.x || >=1.1.0-beta || >=1.2.0-beta || >=1.3.0-beta || >=1.4.0-beta || >=1.5.0-beta || >=1.6.0-beta || >=1.7.0-beta || >=1.8.0-beta || >=1.9.0-beta\"\n}\n```\n\n>\n> The list of (future) betas is an annoyance in the way NPM deals with beta\n> tags unfortunately. IMHO it is clear that `1.1.0-beta` matches `1.x` and\n> should thus be covered by it, but alas, NPM thinks otherwise.\n>\n> If you want your library to also work with possible future betas of\n> anylogger, then include this list of betas (recommended).\n>\n\nAdd anylogger to your install instructions in your project README.md:\n\n>\n> ### Install\n>\n> `npm install --save my-library anylogger`\n>\n\n### Install dev dependencies in a library project\n\nIf you are building a library, you can use the logging framework\nyou prefer without tightly coupling your library to it by installing\nthat library and the adapter for it if needed as development dependencies:\n\n**For [anylogger-console](https://npmjs.com/package/anylogger-console)**:\n\n```sh\nnpm install --save-dev anylogger-console\n```\n\n**For [debug](https://npmjs.com/package/debug)**:\n\n```sh\nnpm install --save-dev debug anylogger-debug\n```\n> See [anylogger-debug](https://npmjs.com/package/anylogger-debug)\n\n**For [loglevel](https://npmjs.com/package/loglevel)**:\n\n```sh\nnpm install --save-dev loglevel anylogger-loglevel\n```\n> See [anylogger-loglevel](https://npmjs.com/package/anylogger-loglevel)\n\n**For [ulog](https://npmjs.com/package/ulog)**:\n\n```sh\nnpm install --save-dev ulog\n```\n> The adapter is included with `ulog`\n\n**For [log4js](https://npmjs.com/package/log4js)**:\n\n```sh\nnpm install --save-dev log4js anylogger-log4js\n```\n> See [anylogger-log4js](https://npmjs.com/package/anylogger-log4js)\n\n\n## Include\n\nDepending on the type of project, either just use anylogger,\nor also include the adapter.\n\n### Include in a library\n\nIn your library code, only use anylogger and restrict yourself to the\n[Anylogger API](#anylogger-api) to stay framework-independent:\n\n#### import\n*my-library.js*\n```js\nimport anylogger from 'anylogger'\nconst log = anylogger('my-library')\nlog.info('Logging is easy!')\n```\n\n#### require\n*my-library.js*\n```js\nconst anylogger = require('anylogger')\nconst log = anylogger('my-library')\nlog.info('Logging is easy!')\n```\n\n> This way, your library does not get tightly coupled to any specific logger\n\n### Use in tests for your library\n\nIf you have installed an adapter as a dev dependency, you can use that adapter\nin your tests so you get the logging the way you like it in your tests.\n\n#### import\n*my-library.test.js*\n```js\n// e.g. for anylogger-console\nimport adapter from 'anylogger-console'\nimport anylogger from 'anylogger'\nadapter(anylogger, console)\n// all loggers will now use the console\nconst log = anylogger('my-lbrary:test')\nlog.info('Logging is easy!')\n```\n\n#### require\n*my-library.test.js*\n```js\n// e.g. for anylogger-console\nconst adapter = require('anylogger-console')\nconst anylogger = require('anylogger')\nadapter(anylogger, console)\n// all loggers will now use the console\nconst log = anylogger('my-lbrary:test')\nlog.info('Logging is easy!')\n```\n\n### Use in an application project\n\nInstall anylogger, your logging framework of choice and an adapter\nif needed as regular dependencies. Then, in your main entry point,\ninclude the adapter along with anylogger:\n\n#### import\n*main.js*\n```js\n// e.g. for anylogger-console\nimport adapter from 'anylogger-console'\nimport anylogger from 'anylogger'\nadapter(anylogger, console)\n// all loggers will now use the console\nconst log = anylogger('my-app')\nlog.info('Logging is easy!')\n```\n\n#### require\n*main.js*\n```js\n// e.g. for anylogger-console\nconst adapter = require('anylogger-console')\nconst anylogger = require('anylogger')\nadapter(anylogger, console)\n// all loggers will now use the console\nconst log = anylogger('my-app')\nlog.info('Logging is easy!')\n```\n\nIn your other application modules, use only anylogger and restrict yourself to\nthe [Anylogger API](#anylogger-api) to stay framework-independent:\n\n#### import\n*my-module.js*\n```js\nimport anylogger from 'anylogger'\nconst log = anylogger('my-module')\nlog.info('Logging is easy!')\n```\n\n#### require\n*my-module.js*\n```js\nconst anylogger = require('anylogger')\nconst log = anylogger('my-module')\nlog.info('Logging is easy!')\n```\n\nBy limiting yourself to the anylogger API, you ensure that even the code in\nyour aplication modules remains logging framework independent. That way,\nyou can easily turn an application module into a library later should the\nneed arise. Or should you want to switch logging libraries, you will be able\nto do that by only changing that one single line that imports the adapter\nin the entrypoint in *main.js* or whatever your main file is called.\n\n## Using anylogger for logging\n\nAnylogger is very natural to use:\n\n```js\nimport anylogger from 'anylogger'\nconst log = anylogger('my-module')\n\n// the log object is itself a function\n// this increases interop with `debug`\nlog('A log message')\nlog('debug', 'A debug message')\nlog('warn', 'A warning message')\n\n// the log object also has methods,\n// increasing interop with the console\nlog.info('Starting...')\nlog.warn('Watch out!')\nlog.error('Oh no!! Something went wrong')\n\n// the log API supports the concept of levels\nObject.keys(anylogger.levels)\n// > ['error', 'warn', 'info', 'log', 'debug', 'trace']\nif (log.enabledFor('warn')) {\n  log.warn(expensiveArguments())\n}\n```\n\n\n## Anylogger API\n\nSo what does this API look like?\n\n### anylogger\n\n```js\nfunction anylogger(name: string) => Logger\n```\n\nThe main function to call to get a logger.\nAccepts the logger name as argument.\n\n#### name\nThe name of the logger. String.\nThe recommended format is `<package-name>[:<sub>[:<sub> [..]]]`,\nas this is the [convention](https://www.npmjs.com/package/debug#conventions)\nused by the highly popular `debug` module. But you are free to pick\nany name you want as long as you steer clear of the characters `'*'`,\n`'='` and `';'` in the logger name.\n\n#### returns\nThe existing logger with that name, or a newly created one.\n\nThe returned logger adheres to the `Logger` type:\n\n```ts\n\n```\n\n This means it is a\n`LogFunction` and a `LogObject` all at once. The `LogFunction` aspect makes\nanylogger loggers compatible with `debug` out of the box, whereas the\n`LogObject` aspect makes them compatible with the console and most other\nlogging libraries. I call that a Win-Win!\n\n\n## Logging API\n\nThe logger returned by [`anylogger`](#anylogger) is a function that can\ndo logging on it's own:\n\n```js\nlog('message')          // logs a message at `log` level\nlog('info', 'message')  // logs a message at `info` level\n```\n\nIn addition, the logger looks like a simple console object:\n\n```js\nlog.debug('message')\nlog.info('message')\n```\n\nBecause of this, the logger created by anylogger is compatible with most\nlogging frameworks out there, which mostly use one or both of these approaches.\n\nThe main API looks like this (in pseudo code):\n\n```ts\nlog: (level?:string, ...args: any) => void\nlog.error: (...args) => void\nlog.warn: (...args) => void\nlog.info: (...args) => void\nlog.log: (...args) => void\nlog.debug: (...args) => void\nlog.trace: (...args) => void\nlog.enabledFor: (level: string) => boolean | void\n```\n\nAnd that's about it. However this covers the basic logging needs.\n\n> Note that all logging methods here are part of the upcoming\n> [Console standard](https://console.spec.whatwg.org/), but not all platforms\n> and frameworks support all of them. In particular the `debug` method is not\n> available everywhere. Anylogger will make sure that the `debug` function is\n> polyfilled if needed.\n\nIs your logging framework not supported? No fear, just...\n\n\n## Write an anylogger adapter\n\nTo write an anylogger adapter, you need to make a project that includes both\nanylogger and the logging framework the adapter is for as peer dependencies.\n\nYou then need to modify one or more of the\n[anylogger extension points](#anylogger-extension-points)\nso the created loggers will be compliant with both the anylogger\n[Logging API](#logging-api) as well as with the logging framework's own API.\n\nIt is recommended you call your library `anylogger-[adapter]`, where\n`[adapter]` should be replaced with the name of the logging framework\nthe adapter is for. For example, the adapter for `debug` is called\n`anylogger-debug`.\n\nIn addition, it is recommended you add the keyword `\"anylogger\"` to the\n*package.json* file of your adapter project, so it will show up in the list of\n[available adapters](https://www.npmjs.com/search?q=keywords:anylogger).\n\n### anylogger extension points\n\nThe process of logger creation and invocation is split up in such a way\nas to optimize possible extension points allowing extensions to re-use\nanylogger functionality and avoid having to duplicate code. The extension\npoints are:\n\n#### anylogger.levels\n```js\nanylogger.levels = {error:1, warn:2, info:3, log:4, debug:5, trace:6}\n```\nAn object containing a mapping of level names to level values.\n\nTo be compliant with the anylogger API, loggers should support at least\nthe log methods corresponding to the default levels, but they may define\nadditional levels and they may choose to use different numeric values\nfor all the levels.\n\nThe guarantees the Anylogger API makes are:\n* there is a logging method corresponding to each level listed in `anylogger.levels`\n* the levels `error`, `warn`, `info`, `log`, `debug` and `trace` are always there\n* each level corresponds to a numeric value\n\nNote that the Anylogger API explicitly does not guarantee that all levels\nhave distinct values or that the numeric values will follow any pattern\nor have any specific order. For this reason it is best to think of levels\nas separate log channels, possibly going to different output locations.\n\nYou can replace or change this object to include levels corresponding with\nthose available in the framework you are writing an adapter for. Please\nmake sure to always include the default levels as well so all code can\nrely on the 6 console methods `error`, `warn`, `info`, `log`, `debug` and\n`trace` to always be there.\n\n#### anylogger.new\n```js\nanylogger.new(name: string) => LogFunction\n```\nCreates a new log function that calls `anylogger.log` when invoked.\n\nCreate a named function so that function.name corresponds to the module name\ngiven.\n\n##### name\nThe name of the new logger. String. Required.\n\n##### options\nAn optional options object. Object. Optional.\n\nIf the logging framework you are writing an adapter for uses an options\nobject, you should override `anylogger.new` and do something useful with\nthe options object here (set it as a property on the logger for example),\nbecause the default implementation just ignores it.\n\nInstead of completely trying to replace the original method, I recommend you\nchain it to include your one-time customizations like this:\n\n```js\nimport anylogger from 'anylogger'\n\n// save the original function\nconst make = anylogger.new\n\n// override anylogger.new\nanylogger.new = (name, options) => {\n  // call the original function to chain it\n  var logger = make(name, options)\n  // do something useful with the options object\n  logger.options = options\n  // return the customized logger\n  return logger\n}\n```\n\n> All anylogger methods are independent of `this` so they can all be easily chained\n\nIf you need to re-apply customizations any time relevant config changes (such\nas active log level changing), override `anylogger.ext`.\n\n#### anylogger.ext\n```js\nanylogger.ext(logfn: LogFunction) => Logger\n```\n\nCalled when a logger needs to be extended, either because it was newly\ncreated, or because it's configuration or settings changed in some way.\n\nThis method must ensure that a log method is available on the logger for\neach level in `anylogger.levels`.\n\nWhen overriding `anylogger.ext`, please ensure the function can safely\nbe called multiple times on the same object\n\n##### logger\nThe logger that should be (re-)extended. Function. Required.\n\nThe default implementation loops over the\n[`anylogger.levels`](#anyloggerlevels) and creates noop methods for each level.\nAdditionally it creates a noop `enabledFor` that always returns `undefined`.\n\nYou can override or chain this method to change the way the log methods are\n(re-)created. In a library that supports log levels, all methods corresponding\nto log levels equal to or higher than the currently active level might be\nreplaced with console methods instead. Or maybe the destination of the log\nmessages might change dynamically based on configuration. Apply such changes\nin `anylogger.ext` as it will be called again whenever relevant config changes.\nThis allows adapters to (re-)extend the logger so that the new configuration\ntakes effect.\n\n> You may need to ensure in your adapter that `anylogger.ext` is called\n> whenever relevant config changes. By hooking into setters for example.\n\n#### anylogger.log\n```js\nanylogger.log([level='log'], ...args)\n```\nThe log function returned by anylogger calls `anylogger.log`, which determines\nthe log level and invokes the appropriate log method.\n\nPlease have a look at the\n[source](https://unpkg.com/anylogger@1.1.0-beta.5/anylogger.js)\nit should make it more clear how to write an adapter. Also consider studying\nthe [available adapters](https://www.npmjs.com/search?q=keywords:anylogger)\nand learn by example.\n\n\n## Give something back\n\nIf you wrote an `anylogger` adapter, make sure to share it back with the\ncommunity. Publish it to NPM for all to use!\n\n\n## Credits\n\nCredits go to these people, who helped with this project:\n\n* [Jakub Jirutka](https://github.com/jirutka) who [contributed](https://github.com/Download/anylogger/pull/2) TypeScript type declarations.\n* [TJ Holowaychuk](https://github.com/tj) for writing [debug](https://npmjs.com/package/debug)\n* [Tim Perry](https://github.com/pimterry) for writing [loglevel](https://npmjs.com/package/loglevel)\n* The authors of log4js, log4js-node, morgan, bunyan, pino and all other log libraries out there\n\n\n## Issues\n\nAdd an issue in this project's\n[issue tracker](https://github.com/download/anylogger/issues)\nto let me know of any problems you find, or questions you may have.\n\n\n## Copyright\n\n© 2024 by [Stijn de Witt](https://stijndewitt.com). Some rights reserved.\nContributions by [Jakub Jirutka](https://github.com/jirutka).\n\n\n## License\n\nLicensed under the [MIT Open Source license](https://opensource.org/licenses/MIT).\n\n\n## gzip-size\n\nThe GZIP algorithm is available in different flavours and with different\npossible compression settings. The sizes quoted in this README have been\nmeasured using [gzip-size](https://npmjs.com/package/gzip-size)\nby [Sindre Sorhus](https://github.com/sindresorhus), your mileage may vary.\n","readmeFilename":"README.md","gitHead":"b24b74790bf098bb24e874cdfb19dbc764675363","bugs":{"url":"https://github.com/download/anylogger/issues"},"homepage":"https://github.com/download/anylogger#readme","_nodeVersion":"18.19.0","_npmVersion":"10.2.4","dist":{"integrity":"sha512-yqd502XssA9jZgF8OvEw9pCOI0yXBTebj9XP/CpddMcYizKfxnFOUVAQ8GB0XOuFTw3pPT3Jwz64A4UD26TZlA==","shasum":"9674b447a0985a0f988ad0d432ea4d03595f0c83","tarball":"https://registry.npmjs.org/anylogger/-/anylogger-1.1.0-beta.5.tgz","fileCount":13,"unpackedSize":61032,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCcXC5jM/HaePksZjGQV9A4NNiVqTab+DX5WCXtUEVZ3QIhALgTJ2NEXBCzpMbyqcbVyEvrBuLHbmNQUNnJspTufIci"}]},"_npmUser":{"name":"stijndewitt","email":"stijndewitt@gmail.com"},"directories":{},"maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anylogger_1.1.0-beta.5_1708896000554_0.5538222476131958"},"_hasShrinkwrap":false}},"readme":"","maintainers":[{"name":"stijndewitt","email":"stijndewitt@gmail.com"}],"time":{"modified":"2024-02-25T21:20:01.386Z","created":"2016-11-04T22:23:23.545Z","0.1.0":"2016-11-04T22:23:23.545Z","0.2.0":"2019-02-05T21:43:16.783Z","0.3.0":"2019-02-05T23:29:21.268Z","0.3.1":"2019-02-05T23:56:46.325Z","0.4.0":"2019-02-06T00:09:54.298Z","0.5.0":"2019-02-06T00:46:33.190Z","0.6.0":"2019-02-12T23:36:07.559Z","0.7.0":"2019-02-25T15:14:02.470Z","0.8.0":"2019-02-28T12:14:47.490Z","0.9.0":"2019-03-10T11:14:59.021Z","0.10.0":"2019-05-30T14:23:22.123Z","0.11.0":"2019-05-30T18:27:49.465Z","0.12.0":"2019-05-31T21:30:13.796Z","0.13.0":"2019-05-31T21:44:27.899Z","0.14.0":"2019-05-31T21:59:57.366Z","0.15.0":"2019-06-03T11:26:51.657Z","0.16.0":"2019-06-04T08:55:32.093Z","0.17.0":"2019-06-04T09:59:47.087Z","0.18.0":"2019-09-01T21:06:04.053Z","0.19.0":"2019-12-30T13:10:25.668Z","0.20.0":"2019-12-30T15:44:51.390Z","0.21.0":"2020-01-02T13:36:42.420Z","1.0.0":"2020-06-20T15:02:15.559Z","1.0.1":"2020-06-23T14:39:49.493Z","1.0.2":"2020-06-23T20:35:26.387Z","1.0.3":"2020-06-24T09:13:50.593Z","1.0.4":"2020-07-14T09:33:31.846Z","1.0.5":"2020-08-01T17:21:23.547Z","1.0.6":"2020-11-21T15:02:39.057Z","1.0.7":"2020-11-21T18:36:41.216Z","1.0.8":"2020-12-05T16:46:11.192Z","1.0.9":"2020-12-05T16:53:29.033Z","1.0.10":"2020-12-29T18:46:50.314Z","1.0.11":"2021-04-04T19:55:02.826Z","1.1.0-beta.0":"2024-02-17T15:18:38.112Z","1.1.0-beta.1":"2024-02-23T17:11:02.593Z","1.1.0-beta.2":"2024-02-23T18:38:16.743Z","1.1.0-beta.3":"2024-02-23T19:51:45.011Z","1.1.0-beta.4":"2024-02-23T23:28:33.303Z","1.1.0-beta.5":"2024-02-25T21:20:00.742Z"},"homepage":"https://github.com/download/anylogger#readme","repository":{"type":"git","url":"git+ssh://git@github.com/download/anylogger.git"},"author":{"name":"Stijn de Witt"},"bugs":{"url":"https://github.com/download/anylogger/issues"},"license":"MIT","readmeFilename":"","keywords":["anylogger","anylogger-console","anylogger-debug","anylogger-loglevel","anylogger-log4js","anylogger-tutorial","console","logger","logging","logging facade","microscopically small","tiny","ulog","1kB"]}