{"_id":"@rawnodes/logger","_rev":"30-7780cd2c2042a8cf9e7905080c3d649e","name":"@rawnodes/logger","dist-tags":{"latest":"2.12.0"},"versions":{"1.0.0":{"name":"@rawnodes/logger","version":"1.0.0","keywords":["logger","logging","winston","typescript","context","async-local-storage","timing","request-id"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@1.0.0","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"dccbf35b9b85899a7839a39fbe80ac2019c0b692","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-1.0.0.tgz","fileCount":47,"integrity":"sha512-5NlCjWFb64kv4wZvOvqAKiA9rw3C1r5G9yfjcfmhUevrcb2IERpYf7XAUUs5mCD8iffgrL/xXzVExQeBkI6sxA==","signatures":[{"sig":"MEYCIQDjQMlfV2wTJ4IYAPkT4XHQZN5SyJvxRs9GmwwLzgRiUwIhAO0J5khxtHh7fCEKzZ4T/MxRvYnOee6/S6GA/W61I2M5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48527},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"pluhin","email":"pavel.luhin@gmail.com"},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"10.9.2","description":"Flexible Winston-based logger with AsyncLocalStorage context, level overrides, and timing utilities","directories":{},"_nodeVersion":"22.17.1","dependencies":{"winston":"^3.17.0","winston-daily-rotate-file":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/logger_1.0.0_1766523700599_0.816357323398653","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@rawnodes/logger","version":"1.1.0","keywords":["logger","logging","winston","typescript","context","async-local-storage","timing","request-id"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@1.1.0","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"8d8998045ad132f7b35e2b071e8af2be969cbb29","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-1.1.0.tgz","fileCount":9,"integrity":"sha512-bqhIP/K+B/8RyKXeTS3WLrasBxp63Hw+iI2EjT3vi7qzKaDg1M36VbyJgxHADGdjjRw3UAE4BdEa2WPSbkIawg==","signatures":[{"sig":"MEQCIFTAUPkB9UHL6ZndRM0oOEH6U4PJI9XXhWdwHpg+JoKcAiAGG7KDA3G6KPWeWWM3z95FmIpIJxjwZkri3otJ5U6wIQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91063},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"pluhin","email":"pavel.luhin@gmail.com"},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"10.9.2","description":"Flexible Winston-based logger with AsyncLocalStorage context, level overrides, and timing utilities","directories":{},"_nodeVersion":"22.17.1","dependencies":{"winston":"^3.17.0","winston-daily-rotate-file":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/logger_1.1.0_1766524364814_0.9497717829814245","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@rawnodes/logger","version":"1.2.0","keywords":["logger","logging","winston","typescript","context","async-local-storage","timing","request-id"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@1.2.0","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"8f6315688b93c0b6c8d84dfc154d6c896fc1421c","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-1.2.0.tgz","fileCount":9,"integrity":"sha512-wBDBXqa8nLELvjYzKcxjH5ROguwsRl0lwVJ/TBeR0DaXNN2aJ1YUSbCJ9t1rwPkuU3x4yHLWc+1DO88H31z+Vg==","signatures":[{"sig":"MEQCIDU8BTR9D9TeekggpgOvMmchlhPjqxDGx4334uBWAPlcAiAF6l1MyEd95mhe4bpGXHF5HVkZlVGqkvig0UCBBeX9tg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":94793},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"pluhin","email":"pavel.luhin@gmail.com"},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"10.9.2","description":"Flexible Winston-based logger with AsyncLocalStorage context, level overrides, and timing utilities","directories":{},"_nodeVersion":"22.17.1","dependencies":{"winston":"^3.17.0","winston-daily-rotate-file":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/logger_1.2.0_1766599242514_0.0617796477205701","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@rawnodes/logger","version":"1.2.1","keywords":["logger","logging","winston","typescript","context","async-local-storage","timing","request-id"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@1.2.1","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"73202512aad3afe26a062768221056cd13433748","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-1.2.1.tgz","fileCount":9,"integrity":"sha512-qhYV6BsykIVdHjjPgLHr4ZEV/HvUgJ5jMiMSvIwh6WQpLVSZ2HWXCvuxDhYyGBo3JLrr/o9ANbIr6xhAKEI6qg==","signatures":[{"sig":"MEYCIQCB7N3HvGTs8j7j4lRRlBnfIpeW8YjjeM2h+bcuMd7avAIhALXFOBEDZU2T1glWTz3fS/KL/yri00hVnmhrdCrznlko","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95708},"main":"./dist/index.js","_from":"file:rawnodes-logger-1.2.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"pluhin","email":"pavel.luhin@gmail.com"},"_resolved":"/private/var/folders/2z/y9ck547n653bnkd1mp7fzb240000gn/T/d2b98e06d394c30a2362cfb13ba6113f/rawnodes-logger-1.2.1.tgz","_integrity":"sha512-qhYV6BsykIVdHjjPgLHr4ZEV/HvUgJ5jMiMSvIwh6WQpLVSZ2HWXCvuxDhYyGBo3JLrr/o9ANbIr6xhAKEI6qg==","repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"10.9.2","description":"Flexible Winston-based logger with AsyncLocalStorage context, level overrides, and timing utilities","directories":{},"_nodeVersion":"22.17.1","dependencies":{"winston":"^3.17.0","winston-daily-rotate-file":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/logger_1.2.1_1766600274140_0.40656900862303913","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@rawnodes/logger","version":"1.3.0","keywords":["logger","logging","winston","typescript","context","async-local-storage","timing","request-id"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@1.3.0","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"41879faa12e79183a90d5278d636170900c99d6f","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-1.3.0.tgz","fileCount":9,"integrity":"sha512-+jDAsLW/8d9iayTuR6cQFdIfsh9epoEH+f7W2jcxjNC9aQ3PFVNAB1m455nY7pXJ5/Q1BY/46zjupVARvUOpqw==","signatures":[{"sig":"MEYCIQDN3HJUbfcwM5dNKjsVy/nFHvkU/Sqqx8SYRzUr4sNKxAIhAN7+ibe5qd2KrVqGLqlnvN63DGg6ufQ4MLr8jTpzD0KS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103040},"main":"./dist/index.js","_from":"file:rawnodes-logger-1.3.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"pluhin","email":"pavel.luhin@gmail.com"},"_resolved":"/private/var/folders/2z/y9ck547n653bnkd1mp7fzb240000gn/T/233b9b5754649dc2f2bf31daec3f3a20/rawnodes-logger-1.3.0.tgz","_integrity":"sha512-+jDAsLW/8d9iayTuR6cQFdIfsh9epoEH+f7W2jcxjNC9aQ3PFVNAB1m455nY7pXJ5/Q1BY/46zjupVARvUOpqw==","repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"10.9.2","description":"Flexible Winston-based logger with AsyncLocalStorage context, level overrides, and timing utilities","directories":{},"_nodeVersion":"22.17.1","dependencies":{"winston":"^3.17.0","winston-daily-rotate-file":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/logger_1.3.0_1766601188222_0.37348799153873213","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@rawnodes/logger","version":"1.4.0","keywords":["logger","logging","winston","typescript","context","async-local-storage","timing","request-id"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@1.4.0","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"fe7603d2df2c020ea320c5f6c75f80cc26ac8825","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-1.4.0.tgz","fileCount":9,"integrity":"sha512-XN1i+ekWBu+V24wgXBbA7qFfGbU3o/HAKD85l4DQ5VfuJTKDChAsaOKawXGDaPu4UnYhtQbS4eaUMVCr20Kbvg==","signatures":[{"sig":"MEUCICyNQvZfLrW/ONoQjHmMO4ov/R+4VyaD6D4j4UMn8Lc8AiEA3kI6cTd6/H17Dp4Rd65EdrGXazjDCRD4kkj6UUs6ETI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":105735},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"pluhin","email":"pavel.luhin@gmail.com"},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"10.9.2","description":"Flexible Winston-based logger with AsyncLocalStorage context, level overrides, and timing utilities","directories":{},"_nodeVersion":"22.17.1","dependencies":{"winston":"^3.17.0","winston-daily-rotate-file":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/logger_1.4.0_1766684392394_0.6866617110359046","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@rawnodes/logger","version":"1.5.0","keywords":["logger","logging","winston","typescript","context","async-local-storage","timing","request-id"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@1.5.0","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"ea9daf515e790f166e2bed09efe0818fc20a2120","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-1.5.0.tgz","fileCount":9,"integrity":"sha512-IJpQoHvsUynEjEfXtCK7XAkyG9hkhQT5jHCJbF71XfQ1E4v0BhyLQpjp+tovVcFABtjr/N5xmuZEpQ3VF5Ndrg==","signatures":[{"sig":"MEQCIGg/UVAndfd3jSucjUcKeuh9Z0g5gDaiVTUfMl35ArXbAiBuaY+N0J5dGwX1puQFn756La0J4LkwGRhc9SX9gqI43Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106739},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"a659df9cfbf1beb4fb1307a51bc875ffbd127cce","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae28bc34-9d27-4e6a-90b3-02783e0aeef9"}},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"11.7.0","description":"Flexible Winston-based logger with AsyncLocalStorage context, level overrides, and timing utilities","directories":{},"_nodeVersion":"22.21.1","dependencies":{"winston":"^3.17.0","winston-daily-rotate-file":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@semantic-release/changelog":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/logger_1.5.0_1766696252242_0.99742270126738","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"@rawnodes/logger","version":"1.5.1","keywords":["logger","logging","winston","typescript","context","async-local-storage","timing","request-id"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@1.5.1","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"2b939d751c6ce7ce45d7900d4feb718f621a3ed9","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-1.5.1.tgz","fileCount":9,"integrity":"sha512-uBvuqVXjBibKTnpBUT/zO4vT6wMZ44Uyps8Vbfzm2d94zo53Y3JZZn2Cl99jKPYvClDv/VGsTXNBMBV4lPmwMQ==","signatures":[{"sig":"MEQCIEzvEGCN4fuMRQuyb0CqENuNd9TYeyu9hkCIlns42O0NAiBbWl/2V6PylCRW7++sd0G2NYKvdk9QhAqwqFSimBO91Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106703},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"59ca1b8d419789fe19e8c693622785384454300d","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae28bc34-9d27-4e6a-90b3-02783e0aeef9"}},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"11.7.0","description":"Flexible Winston-based logger with AsyncLocalStorage context, level overrides, and timing utilities","directories":{},"_nodeVersion":"22.21.1","dependencies":{"winston":"^3.17.0","winston-daily-rotate-file":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@semantic-release/changelog":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/logger_1.5.1_1766700245334_0.05899853239309927","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@rawnodes/logger","version":"1.6.0","keywords":["logger","logging","winston","typescript","context","async-local-storage","timing","request-id"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@1.6.0","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"2846de2fae9537d31b0fba384c6d532dbb10f115","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-1.6.0.tgz","fileCount":9,"integrity":"sha512-fJRIcU25mKk080DmYvbPLUhoj0x1N0RBwqDCmmyph9Dm1+Pc2z9umHQg+QjigmphTdd5tNxJCnw7OHLEIcM4Og==","signatures":[{"sig":"MEUCIQC1681cR6sL+BQuV0MtCBxBmptHQy3Afkkzeda98XQgLAIgAZLWaMAXaaQiXTUyHcKHroCChqrGNJVdqvNx0gw8cws=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":125398},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"c7fcbba97766b722c9ee76485852617991303e08","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae28bc34-9d27-4e6a-90b3-02783e0aeef9"}},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"11.7.0","description":"Flexible Winston-based logger with AsyncLocalStorage context, level overrides, and timing utilities","directories":{},"_nodeVersion":"22.21.1","dependencies":{"winston":"^3.17.0","winston-daily-rotate-file":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@semantic-release/changelog":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/logger_1.6.0_1767009080013_0.6363013407073812","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@rawnodes/logger","version":"1.7.0","keywords":["logger","logging","winston","typescript","context","async-local-storage","timing","request-id"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@1.7.0","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"61b790a64ff74512f74bd34862e0c9a46dadbf20","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-1.7.0.tgz","fileCount":9,"integrity":"sha512-QdqbowoPv3DrXuatj+cQoCUng7e7B8L7uHBGd4rH2Yh9f0qQ1qsOdYAo1G/QhvAkmvlXM1wnC2GnTolvNsXEVw==","signatures":[{"sig":"MEQCIBW0l2X6C8nWq+7qoLtxvufyc6YlGGkbWUlK2ZtDYntUAiBXwQAMZsQG1vTjeoKqL3tBneM+lhQrL39VcThg2o0BHg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":134477},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"49383262a201985d7bb2f0a73cec66300f26a3db","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae28bc34-9d27-4e6a-90b3-02783e0aeef9"}},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"11.7.0","description":"Flexible Winston-based logger with AsyncLocalStorage context, level overrides, and timing utilities","directories":{},"_nodeVersion":"22.21.1","dependencies":{"winston":"^3.17.0","winston-daily-rotate-file":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@semantic-release/changelog":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/logger_1.7.0_1767010207983_0.8962913420383083","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@rawnodes/logger","version":"1.8.0","keywords":["logger","logging","winston","typescript","context","async-local-storage","timing","request-id"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@1.8.0","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"4edd3c05a0759d8a3fdfb26495126a2ec0fb54cd","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-1.8.0.tgz","fileCount":9,"integrity":"sha512-rtkK9wRRwgx6/f5mkNCv1oQzRA41pOQljmvsPEqjjiAan7VeVq4A3vOsaT1LSJ8zy9YkUJQjdtYD130dSiU+5Q==","signatures":[{"sig":"MEQCIG9O0g+xfFtN4uMn2kxLvkR+G8eL/o87IBDA8LRkgTn7AiBGYQmF/E3KvKgM3ORg2C3uGpO5S5Tjcmaii0eJRSMg7g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":252464},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"ec19dc6800a55daaaa0df3845a284b15a72a0f3e","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae28bc34-9d27-4e6a-90b3-02783e0aeef9"}},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"11.7.0","description":"Flexible Winston-based logger with AsyncLocalStorage context, level overrides, and timing utilities","directories":{},"_nodeVersion":"22.21.1","dependencies":{"winston":"^3.17.0","winston-transport":"^4.9.0","winston-daily-rotate-file":"^5.0.0","@aws-sdk/client-cloudwatch-logs":"^3.958.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@semantic-release/changelog":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/logger_1.8.0_1767019865920_0.39980682676230606","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"@rawnodes/logger","version":"1.9.0","keywords":["logger","logging","winston","typescript","context","async-local-storage","timing","request-id"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@1.9.0","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"ec6eaa3ef5d683dcb5b0e78823ca0e8148ec7b3d","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-1.9.0.tgz","fileCount":9,"integrity":"sha512-EP4fsFfpNMekACP8alNqx8HGfvyf0A+ZJy74ChJMx8Rc9kYM5Or84WevJwPoRnf0VuMXBzp3l+XrHLJZ72JHcA==","signatures":[{"sig":"MEUCIAoXDNiB66v6xK/MfayYnjEySW4I61HAfwtxyO4ro9rEAiEAhVon8RHwOV4R2hdfxloc6kcM89uDBrnaDFboJErr70I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":330081},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"b74001c9eb5b124ea8c523e060e324ebaf0378d0","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae28bc34-9d27-4e6a-90b3-02783e0aeef9"}},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"11.7.0","description":"Flexible Winston-based logger with AsyncLocalStorage context, level overrides, and timing utilities","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"^4.2.1","winston":"^3.17.0","winston-transport":"^4.9.0","winston-daily-rotate-file":"^5.0.0","@aws-sdk/client-cloudwatch-logs":"^3.958.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@semantic-release/changelog":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/logger_1.9.0_1767021570845_0.8028160846091426","host":"s3://npm-registry-packages-npm-production"}},"1.9.1":{"name":"@rawnodes/logger","version":"1.9.1","keywords":["logger","logging","winston","typescript","context","async-local-storage","timing","request-id"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@1.9.1","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"45340b3f6f7cc4bf5936179234f4e85bd263399d","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-1.9.1.tgz","fileCount":9,"integrity":"sha512-5s7uEFTJ70KLhECO/KXstBeGMmPPBRvmrC+lH/jzEYbRMnG5oeLkc8KB2NEkNfFg9l1YeUFXii1ZH++2jc504w==","signatures":[{"sig":"MEUCICmBRCBPCPt7nhappBPRz/J3687K1O8hA4255HcGRSttAiEAtL8lIdN/Zv4yORiYzxWRodI71sIjQyL9xNDTV46XLas=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":288017},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"7b716dd08d81522f827ef9614c3305983c8e5a48","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae28bc34-9d27-4e6a-90b3-02783e0aeef9"}},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"11.7.0","description":"Flexible Winston-based logger with AsyncLocalStorage context, level overrides, and timing utilities","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"^4.2.1","winston":"^3.17.0","winston-transport":"^4.9.0","winston-daily-rotate-file":"^5.0.0","@aws-sdk/client-cloudwatch-logs":"^3.958.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@semantic-release/changelog":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/logger_1.9.1_1767022067367_0.16582495287072896","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"@rawnodes/logger","version":"1.10.0","keywords":["logger","logging","winston","typescript","context","async-local-storage","timing","request-id"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@1.10.0","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"0e9a184023f1f22f27d4c6f442e8d19670c1a470","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-1.10.0.tgz","fileCount":9,"integrity":"sha512-w/gylzThWZL0arP6a0HuwLE5Q1ogiBm5TrlsAt6OMF1WWlSUv8ayP1kpz19Mxq/wu1o9ZZT+rq/6bMPwYY7QQA==","signatures":[{"sig":"MEUCIFwTuum7WMEqDY8mRlcFMSdrZseGcfSUsdbDN47/SI88AiEA1t4/KJ8l5eR/RMqnvNWYIfD8f8J94GVqtmlVgAqJSCo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":290612},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"c8caac6473c9324f08af97a77ed4c7c9b211a2d7","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae28bc34-9d27-4e6a-90b3-02783e0aeef9"}},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"11.7.0","description":"Flexible Winston-based logger with AsyncLocalStorage context, level overrides, and timing utilities","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"^4.2.1","winston":"^3.17.0","winston-transport":"^4.9.0","winston-daily-rotate-file":"^5.0.0","@aws-sdk/client-cloudwatch-logs":"^3.958.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@semantic-release/changelog":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/logger_1.10.0_1767023448191_0.49648768220927497","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@rawnodes/logger","version":"2.0.0","keywords":["logger","logging","pino","typescript","context","async-local-storage","timing","request-id","high-performance"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@2.0.0","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"9b0ba1c70b2574eb2696e453d6ae9fd2be36a3d9","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-2.0.0.tgz","fileCount":9,"integrity":"sha512-72hkGJVGJRtBCP2k4RKPdMfZOhwWfjoSWod0J5eAhYcWxyQ7EStkHifHHrfpT8pXGkR/7sd+50G/UUCYiZ9rtw==","signatures":[{"sig":"MEUCIQDEfz4pPCSzy6cx6TLQepsPy8eEUFRbS9SthfesJAsuwwIgFubhhqDTfSGY5NQfS53pZ3u/67S0a/8hIpAlkZW8bWE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":331403},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"3fbbc333e31b0dc7dc691fe251d08a234bc04167","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","bench":"vitest bench","build":"tsup","test:watch":"vitest","bench:measure":"tsx bench/measure.ts","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae28bc34-9d27-4e6a-90b3-02783e0aeef9"}},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"11.7.0","description":"High-performance Pino-based logger with AsyncLocalStorage context, O(1) level rules, and timing utilities","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"^4.2.1","pino":"^10.1.0","rotating-file-stream":"^3.2.7","@aws-sdk/client-cloudwatch-logs":"^3.958.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","pino-pretty":"^13.1.3","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@semantic-release/changelog":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/logger_2.0.0_1767031962577_0.5505077215514038","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@rawnodes/logger","version":"2.0.1","keywords":["logger","logging","pino","typescript","context","async-local-storage","timing","request-id","high-performance"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@2.0.1","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"e07e4afaaf76efc79a6ac75b0bb22e8f25b5a422","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-2.0.1.tgz","fileCount":9,"integrity":"sha512-yDk4avofwSt/YBZehGk7WsADkKACtM85M0HvU4IKzUHsrGrCyyreqxobO53bPD4jyhL/L5uAA+EZQNuEQhYyMQ==","signatures":[{"sig":"MEQCIGqB3aNBg/nbgerBe7kZZ5pbhtTZTKyN8e6/3tECa572AiAMv1YgrCUCN9v4uoOk13K7uTcX7/06EDwYYwhdHlaWkw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":333013},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"01241dfa2473ddc61e3ea5859f5b47ff6664ecb5","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","bench":"vitest bench","build":"tsup","test:watch":"vitest","bench:measure":"tsx bench/measure.ts","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae28bc34-9d27-4e6a-90b3-02783e0aeef9"}},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"11.7.0","description":"High-performance Pino-based logger with AsyncLocalStorage context, O(1) level rules, and timing utilities","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"^4.2.1","pino":"^10.1.0","rotating-file-stream":"^3.2.7","@aws-sdk/client-cloudwatch-logs":"^3.958.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","pino-pretty":"^13.1.3","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@semantic-release/changelog":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/logger_2.0.1_1767032833760_0.13843069202088687","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@rawnodes/logger","version":"2.1.0","keywords":["logger","logging","pino","typescript","context","async-local-storage","timing","request-id","high-performance"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@2.1.0","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"836116b97591d483141cf55dc4fa671e15434200","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-2.1.0.tgz","fileCount":9,"integrity":"sha512-1n7droDcNOHlRmtROBYAxv5nBAnGml3eFIQw8YjkzpqY6/y6L+4VHb35l71e2eFnFork5F6cbWvnztu5dvxxEg==","signatures":[{"sig":"MEQCIEEc/USfKLh74+CuIelcA75x3DduI5hBpf68U20Ca31lAiAgZyUDcEMTHsyeSCPslqnTrC57K3cSdLaL1S2Rnf3yzA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":334039},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"57c4c0bf8a6316c67c83b7252fcd17e412debf7d","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","bench":"vitest bench","build":"tsup","test:watch":"vitest","bench:measure":"tsx bench/measure.ts","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae28bc34-9d27-4e6a-90b3-02783e0aeef9"}},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"11.7.0","description":"High-performance Pino-based logger with AsyncLocalStorage context, O(1) level rules, and timing utilities","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"^4.2.1","pino":"^10.1.0","rotating-file-stream":"^3.2.7","@aws-sdk/client-cloudwatch-logs":"^3.958.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","pino-pretty":"^13.1.3","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@semantic-release/changelog":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/logger_2.1.0_1767033627070_0.36093030727138475","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@rawnodes/logger","version":"2.2.0","keywords":["logger","logging","pino","typescript","context","async-local-storage","timing","request-id","high-performance"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@2.2.0","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"509c4936064304c0e1ea42acea9de0ec978004b4","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-2.2.0.tgz","fileCount":9,"integrity":"sha512-kwOCzgnen6x/dV2CjAx0gLr3FwXVK24qIviv5/F1zhm6kyEqhHEkVKrw3UAG+lxCzfZ+pcAsFTS5lqnD4jl+0A==","signatures":[{"sig":"MEUCIQDtRZnu4mW53zFYiWQ42tXhDitDa62nyzKJ9snh2YX5SwIgIipd0dB95h0xOqKRIyQ3QJ5MQCdKNDY5gkrATA278cM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":355085},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"fcd3edcd048afed05d182d8916451f887760d186","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","bench":"vitest bench","build":"tsup","test:watch":"vitest","bench:measure":"tsx bench/measure.ts","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae28bc34-9d27-4e6a-90b3-02783e0aeef9"}},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"11.7.0","description":"High-performance Pino-based logger with AsyncLocalStorage context, O(1) level rules, and timing utilities","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"^4.2.1","pino":"^10.1.0","rotating-file-stream":"^3.2.7","@aws-sdk/client-cloudwatch-logs":"^3.958.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","pino-pretty":"^13.1.3","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@semantic-release/changelog":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/logger_2.2.0_1767134020751_0.3703179990791168","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"@rawnodes/logger","version":"2.3.0","keywords":["logger","logging","pino","typescript","context","async-local-storage","timing","request-id","high-performance"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@2.3.0","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"59fb0ca86958be727acb28c144448fbabc38a57b","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-2.3.0.tgz","fileCount":9,"integrity":"sha512-h5/KwHrejpUG+NmSMEvqSQAUobqtUU4asb9GQ8ds66zht6XsWLk89UbkBcAY7/MHf4ecCTahwJFh6cEqyFB9eg==","signatures":[{"sig":"MEQCIGkxNsaxvIHUukeH/q3di/E4jB8m7/Eylf+Kfq7C69BvAiAcDcfUgJ06lJmp2fjn2VVOl0mcEcrYF7x1jFE10HBaEQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":355792},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"3f3cd19244b01e087a0b046c8a8298e3b81ca468","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","bench":"vitest bench","build":"tsup","test:watch":"vitest","bench:measure":"tsx bench/measure.ts","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae28bc34-9d27-4e6a-90b3-02783e0aeef9"}},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"11.7.0","description":"High-performance Pino-based logger with AsyncLocalStorage context, O(1) level rules, and timing utilities","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"^4.2.1","pino":"^10.1.0","rotating-file-stream":"^3.2.7","@aws-sdk/client-cloudwatch-logs":"^3.958.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","pino-pretty":"^13.1.3","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@semantic-release/changelog":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/logger_2.3.0_1767719759146_0.48656481103415494","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"@rawnodes/logger","version":"2.4.0","keywords":["logger","logging","pino","typescript","context","async-local-storage","timing","request-id","high-performance"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@2.4.0","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"a1c2dfd613c9efd8ff8af5042e71c9b1665c6717","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-2.4.0.tgz","fileCount":9,"integrity":"sha512-SG6CfRTQG6DpzvXpJqOc0/zfWP4YPfjqgNpMZIVKxrvPJVKMNCAXrTlZW2WOL0VBMnw2pWwPsKanF2fKPzE8lw==","signatures":[{"sig":"MEYCIQCWUcjU6kQxMKVOBA5aiUWWrmgqePKNuGuRKTZwtcN6BgIhAKbb29nniLbjgQ7O+SWRp1dwhji2SgTGvaFYZcUY3FNZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":356937},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"7b749f11c991b530119da0a85dfbafe8705763ec","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","bench":"vitest bench","build":"tsup","test:watch":"vitest","bench:measure":"tsx bench/measure.ts","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae28bc34-9d27-4e6a-90b3-02783e0aeef9"}},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"11.7.0","description":"High-performance Pino-based logger with AsyncLocalStorage context, O(1) level rules, and timing utilities","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"^4.2.1","pino":"^10.1.0","rotating-file-stream":"^3.2.7","@aws-sdk/client-cloudwatch-logs":"^3.958.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","pino-pretty":"^13.1.3","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@semantic-release/changelog":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/logger_2.4.0_1768409779391_0.9946597497880711","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"@rawnodes/logger","version":"2.5.0","keywords":["logger","logging","pino","typescript","context","async-local-storage","timing","request-id","high-performance"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@2.5.0","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"c34fe7a0eaba6436c3ed8bbc831cdaa6bdf0d076","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-2.5.0.tgz","fileCount":9,"integrity":"sha512-NDaMSzz8i2V5MtDvCfqzhEnYCt91+FffCb3R8fODvbk6vOeuh03BUkSBqq7dcPZ1ixj8L556uAuDa1f2fWWXfA==","signatures":[{"sig":"MEQCIEQA7ewvDQJ9Pz0+oiZhWZp3HkOH0dWyeAb7F7XpFMUYAiBhaHOxKS0ICHkFVhcfzORB3WcPMCTR9oASIPBhHJEoiQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":375277},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"3922fc33c7404f9560a5aed5ef2d36647d69d920","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","bench":"vitest bench","build":"tsup","test:watch":"vitest","bench:measure":"tsx bench/measure.ts","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae28bc34-9d27-4e6a-90b3-02783e0aeef9"}},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"11.7.0","description":"High-performance Pino-based logger with AsyncLocalStorage context, O(1) level rules, and timing utilities","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"^4.2.1","pino":"^10.1.0","rotating-file-stream":"^3.2.7","@aws-sdk/client-cloudwatch-logs":"^3.958.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","pino-pretty":"^13.1.3","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@semantic-release/changelog":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/logger_2.5.0_1768610002308_0.39247907644147584","host":"s3://npm-registry-packages-npm-production"}},"2.6.0":{"name":"@rawnodes/logger","version":"2.6.0","keywords":["logger","logging","pino","typescript","context","async-local-storage","timing","request-id","high-performance"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@2.6.0","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"2fd853b5a723782803d4fefb0c0fdb8f9b58cad4","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-2.6.0.tgz","fileCount":9,"integrity":"sha512-tqhxAuwVd0al2XaV8a0D1H2sZFshX7lP5SD/sJvRdAGoFOCvtKgV5OjiAUkaFpK6p3KFDbQF9gUp/NRNQfkK5A==","signatures":[{"sig":"MEUCIQD+x/dlo+KKukOY/C3sXsyTXLTZQpQRDIHgvi7CDo8VPAIgUAlFlLpDJgXxO2Jp+6e7Qpn8U5juJYT5zVHf2QSIoVM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":402303},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"783b58e99bfe9c6f3a6f497f37228cec9e68f2a3","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","bench":"vitest bench","build":"tsup","test:watch":"vitest","bench:measure":"tsx bench/measure.ts","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae28bc34-9d27-4e6a-90b3-02783e0aeef9"}},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"11.7.0","description":"High-performance Pino-based logger with AsyncLocalStorage context, O(1) level rules, and timing utilities","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"^4.2.1","pino":"^10.1.0","rotating-file-stream":"^3.2.7","@aws-sdk/client-cloudwatch-logs":"^3.958.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","pino-pretty":"^13.1.3","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@semantic-release/changelog":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/logger_2.6.0_1768611237301_0.8656348582723308","host":"s3://npm-registry-packages-npm-production"}},"2.7.0":{"name":"@rawnodes/logger","version":"2.7.0","keywords":["logger","logging","pino","typescript","context","async-local-storage","timing","request-id","high-performance"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@2.7.0","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"8df6820aabe58e68c295b7d7c46f30cbdf087372","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-2.7.0.tgz","fileCount":9,"integrity":"sha512-tbBOS60TCDwQx7OVJqdiOXnUn+9thcLign9tNcS1uvn9UgFC+gpRG3nVNUts9fVwEdEr51l70nFB8htzLasckg==","signatures":[{"sig":"MEUCICBeZ0AvhZM2JR3lcEAxU7GCw1I2uzXbpJQ9gSQL1alMAiEAxJY2xqbyKe0ND6Ia9Rr7in0VuH72ejD/UMBjn6jH8YA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":434251},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"469ee1b18c786f113d0f5bd6ebcde744972c17f5","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","bench":"vitest bench","build":"tsup","test:watch":"vitest","bench:measure":"tsx bench/measure.ts","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae28bc34-9d27-4e6a-90b3-02783e0aeef9"}},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"11.8.0","description":"High-performance Pino-based logger with AsyncLocalStorage context, O(1) level rules, and timing utilities","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^4.2.1","pino":"^10.1.0","rotating-file-stream":"^3.2.7","@aws-sdk/client-cloudwatch-logs":"^3.958.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.0.0","axios":"^1.9.0","vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","pino-pretty":"^13.1.3","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@semantic-release/changelog":"^6.0.3"},"peerDependencies":{"axios":">=1.0.0"},"peerDependenciesMeta":{"axios":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/logger_2.7.0_1769383445099_0.15600964906811798","host":"s3://npm-registry-packages-npm-production"}},"2.7.1":{"name":"@rawnodes/logger","version":"2.7.1","keywords":["logger","logging","pino","typescript","context","async-local-storage","timing","request-id","high-performance"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@2.7.1","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"44d4ef99488739b937477672dd270cc5f03a39e7","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-2.7.1.tgz","fileCount":9,"integrity":"sha512-ym4PbkVevACaiwWo2dwE2xupPp9iHMSvyfTfs3+39vZ2VWh/9ClI2I9H09lFRT59uQFv4g0oR4Vzb4kI8FZHHg==","signatures":[{"sig":"MEYCIQC0F+TMVEcgRd91Mnmc6LLiUZMj16AUDIXogMU3u++wcgIhAIL6ckCyiN8ftaRzeASCr4PfjXgPf+f7F1iH3hQAYspY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":435937},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"6c998fda0292afdf56e26e55258d86dba82f82db","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","bench":"vitest bench","build":"tsup","test:watch":"vitest","bench:measure":"tsx bench/measure.ts","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae28bc34-9d27-4e6a-90b3-02783e0aeef9"}},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"11.12.1","description":"High-performance Pino-based logger with AsyncLocalStorage context, O(1) level rules, and timing utilities","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^4.2.1","pino":"^10.1.0","rotating-file-stream":"^3.2.7","@aws-sdk/client-cloudwatch-logs":"^3.958.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.0.0","axios":"^1.9.0","vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","pino-pretty":"^13.1.3","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@semantic-release/changelog":"^6.0.3"},"peerDependencies":{"axios":">=1.0.0"},"peerDependenciesMeta":{"axios":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/logger_2.7.1_1775208083933_0.45955070160193534","host":"s3://npm-registry-packages-npm-production"}},"2.7.2":{"name":"@rawnodes/logger","version":"2.7.2","keywords":["logger","logging","pino","typescript","context","async-local-storage","timing","request-id","high-performance"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@2.7.2","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"e070a77b96d97915c725c0dd25a9d4423781456a","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-2.7.2.tgz","fileCount":9,"integrity":"sha512-sITMRYo/jcXSm5tpDCipReM8s2qAliSOpiIefLTi9JLcMw3XT5iHPotPlsvOAYB5Va6yzTIPS2qXQZsUlKk9Sg==","signatures":[{"sig":"MEQCIGDnavsiQrPa86OxEDJAkEl9on4hVFO3KOnVH3geCkF5AiBdLSMcdl+y37UELIAo4z4JoI6lzsYBeqAzgWVc1Kxa9Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":511929},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"a2cd86eb8823e789384d386a8e59849774536edc","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","bench":"vitest bench","build":"tsup","test:watch":"vitest","bench:measure":"tsx bench/measure.ts","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae28bc34-9d27-4e6a-90b3-02783e0aeef9"}},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"11.5.1","description":"High-performance Pino-based logger with AsyncLocalStorage context, O(1) level rules, and timing utilities","directories":{},"_nodeVersion":"22.17.1","dependencies":{"zod":"^4.2.1","pino":"^10.1.0","rotating-file-stream":"^3.2.7","@aws-sdk/client-cloudwatch-logs":"^3.958.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.0.0","axios":"^1.9.0","vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","pino-pretty":"^13.1.3","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@semantic-release/changelog":"^6.0.3"},"peerDependencies":{"axios":">=1.0.0"},"peerDependenciesMeta":{"axios":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/logger_2.7.2_1776434092939_0.8368867392467112","host":"s3://npm-registry-packages-npm-production"}},"2.8.0":{"name":"@rawnodes/logger","version":"2.8.0","keywords":["logger","logging","pino","typescript","context","async-local-storage","timing","request-id","high-performance"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@2.8.0","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"13b7e5670558c406afbbca3e5b8ada86fb79fab3","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-2.8.0.tgz","fileCount":9,"integrity":"sha512-5LBbU2z5lkI2UKW7WSwrV9xNwPFygcLC6fY5/1Pdr8H4TpooYn1pzG/Qhi4eqDSPEKWfp6r6JY7uQZVwDZ06tw==","signatures":[{"sig":"MEQCIAWXzugEtUMPPu7pcx/Ve7uZCvHC2ShAnyjAjclHicwJAiAg/WMKkE0wMdB4zveXaVOjjDsYsYaRelA4i/xZuTxaNg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":566340},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"e2f1492ef80cd2661c9e21393edaf8bf08d3f67e","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","bench":"vitest bench","build":"tsup","test:watch":"vitest","bench:measure":"tsx bench/measure.ts","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae28bc34-9d27-4e6a-90b3-02783e0aeef9"}},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"11.5.1","description":"High-performance Pino-based logger with AsyncLocalStorage context, O(1) level rules, and timing utilities","directories":{},"_nodeVersion":"22.17.1","dependencies":{"zod":"^4.2.1","pino":"^10.1.0","rotating-file-stream":"^3.2.7","@aws-sdk/client-cloudwatch-logs":"^3.958.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.0.0","axios":"^1.9.0","vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","pino-pretty":"^13.1.3","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@semantic-release/changelog":"^6.0.3"},"peerDependencies":{"axios":">=1.0.0"},"peerDependenciesMeta":{"axios":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/logger_2.8.0_1776456918297_0.5378236322063763","host":"s3://npm-registry-packages-npm-production"}},"2.9.0":{"name":"@rawnodes/logger","version":"2.9.0","keywords":["logger","logging","pino","typescript","context","async-local-storage","timing","request-id","high-performance"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@2.9.0","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"b7801697a0593d29330b52847cff2528cd6a6dfb","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-2.9.0.tgz","fileCount":9,"integrity":"sha512-CQsh5U2pH6Q/Fxr+up0B0+53o5etg0fxKmnWdzBVbdE2kW8ZFG5WJWsDL9L9wkidavh/IISzZ0jg6TbCP5MNPg==","signatures":[{"sig":"MEQCIBdnoVUJ20oA+MyQxVSWixH00NDWXyBIBWYawUH4/PsFAiBjLkOhjZwCFsbKoghINl0VITWW6Eu/SG14/8YY62RXvQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":583214},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"364d5ee0b5a51d1b7bae1a43201048be88c02e64","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","bench":"vitest bench","build":"tsup","test:watch":"vitest","bench:measure":"tsx bench/measure.ts","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae28bc34-9d27-4e6a-90b3-02783e0aeef9"}},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"11.5.1","description":"High-performance Pino-based logger with AsyncLocalStorage context, O(1) level rules, and timing utilities","directories":{},"_nodeVersion":"22.17.1","dependencies":{"zod":"^4.2.1","pino":"^10.1.0","rotating-file-stream":"^3.2.7","@aws-sdk/client-cloudwatch-logs":"^3.958.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.0.0","axios":"^1.9.0","vitest":"^2.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","pino-pretty":"^13.1.3","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@semantic-release/changelog":"^6.0.3"},"peerDependencies":{"axios":">=1.0.0"},"peerDependenciesMeta":{"axios":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/logger_2.9.0_1776499389953_0.06345282394676488","host":"s3://npm-registry-packages-npm-production"}},"2.10.0":{"name":"@rawnodes/logger","version":"2.10.0","keywords":["logger","logging","pino","typescript","context","async-local-storage","timing","request-id","high-performance"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@2.10.0","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"cf1fabb2c9f49394a9d8168e4ca0d9cf4265de20","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-2.10.0.tgz","fileCount":17,"integrity":"sha512-DdJrqVUoWb4MFbg3dCkYiGuhBzbj5wPlU9FpzSsh6E4O7smwVPW8QNMtgmQ72CbDzXQWAmY2XnM8GNYMykorTQ==","signatures":[{"sig":"MEUCIHFOYjyDV/JeDzKuiLqenqQfEzCwcfQE72xSfvESMU5pAiEAs36NrcrfuPQFvBWliduT3w4cRIj3Ox327UBsCfrof8M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":698928},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./relay":{"import":{"types":"./dist/transports/relay.d.mts","default":"./dist/transports/relay.mjs"},"require":{"types":"./dist/transports/relay.d.ts","default":"./dist/transports/relay.js"}}},"gitHead":"697a77010c8493ad2ae9163d7314c1747b1f4511","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","bench":"vitest bench","build":"tsup","test:watch":"vitest","bench:measure":"node --expose-gc --import tsx bench/measure.ts","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae28bc34-9d27-4e6a-90b3-02783e0aeef9"}},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"11.5.1","description":"High-performance Pino-based logger with AsyncLocalStorage context, O(1) level rules, and timing utilities","directories":{},"_nodeVersion":"22.17.1","dependencies":{"zod":"^4.2.1","pino":"^10.1.0","rotating-file-stream":"^3.2.7","@aws-sdk/client-cloudwatch-logs":"^3.958.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.0.0","axios":"^1.9.0","vitest":"^2.0.0","winston":"^3.19.0","@types/ws":"^8.18.1","typescript":"^5.7.0","@types/node":"^22.0.0","pino-pretty":"^13.1.3","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@semantic-release/changelog":"^6.0.3"},"peerDependencies":{"ws":">=8.0.0","axios":">=1.0.0"},"peerDependenciesMeta":{"ws":{"optional":true},"axios":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/logger_2.10.0_1777466943381_0.7989407785870499","host":"s3://npm-registry-packages-npm-production"}},"2.11.0":{"name":"@rawnodes/logger","version":"2.11.0","keywords":["logger","logging","pino","typescript","context","async-local-storage","timing","request-id","high-performance"],"author":{"name":"RawNodes"},"license":"MIT","_id":"@rawnodes/logger@2.11.0","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"homepage":"https://github.com/rawnodes/logger#readme","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"dist":{"shasum":"cd66bf6846e4159cc7b7d2ed888e403109da6fc6","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-2.11.0.tgz","fileCount":17,"integrity":"sha512-4J4kkGrcgvPLigyANkqO7Qu/+7Aj1XGF4lN6usKGwWiODF4jkjqCNlfsQYo/S0fV5bbuOWXBQNiZSrcvam/SoA==","signatures":[{"sig":"MEUCIQDjtgubzxew4IPbPPhvJNQ3BVPh66n0G8byDf7cn31LLgIgVCLOl31BLpjVTwOqCuNVwM2MnlQsAR7TvfAj2YQBkVo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":703802},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./relay":{"import":{"types":"./dist/transports/relay.d.mts","default":"./dist/transports/relay.mjs"},"require":{"types":"./dist/transports/relay.d.ts","default":"./dist/transports/relay.js"}}},"gitHead":"920f489879f8771cef8ebbf08120ce90873c346e","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","bench":"vitest bench","build":"tsup","test:watch":"vitest","bench:measure":"node --expose-gc --import tsx bench/measure.ts","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae28bc34-9d27-4e6a-90b3-02783e0aeef9"}},"repository":{"url":"git+https://github.com/rawnodes/logger.git","type":"git"},"_npmVersion":"11.5.1","description":"High-performance Pino-based logger with AsyncLocalStorage context, O(1) level rules, and timing utilities","directories":{},"_nodeVersion":"22.17.1","dependencies":{"zod":"^4.2.1","pino":"^10.1.0","rotating-file-stream":"^3.2.7","@aws-sdk/client-cloudwatch-logs":"^3.958.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.0.0","axios":"^1.9.0","vitest":"^2.0.0","winston":"^3.19.0","@types/ws":"^8.18.1","typescript":"^5.7.0","@types/node":"^22.0.0","pino-pretty":"^13.1.3","semantic-release":"^25.0.2","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@semantic-release/changelog":"^6.0.3"},"peerDependencies":{"ws":">=8.0.0","axios":">=1.0.0"},"peerDependenciesMeta":{"ws":{"optional":true},"axios":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/logger_2.11.0_1778404127211_0.3211122870358789","host":"s3://npm-registry-packages-npm-production"}},"2.12.0":{"name":"@rawnodes/logger","version":"2.12.0","description":"High-performance Pino-based logger with AsyncLocalStorage context, O(1) level rules, and timing utilities","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./relay":{"import":{"types":"./dist/transports/relay.d.mts","default":"./dist/transports/relay.mjs"},"require":{"types":"./dist/transports/relay.d.ts","default":"./dist/transports/relay.js"}}},"scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","bench":"vitest bench","bench:measure":"node --expose-gc --import tsx bench/measure.ts","lint":"eslint src --ext .ts","prepublishOnly":"pnpm build"},"keywords":["logger","logging","pino","typescript","context","async-local-storage","timing","request-id","high-performance"],"author":{"name":"RawNodes"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/rawnodes/logger.git"},"engines":{"node":">=18"},"dependencies":{"@aws-sdk/client-cloudwatch-logs":"^3.958.0","pino":"^10.1.0","rotating-file-stream":"^3.2.7","zod":"^4.2.1"},"peerDependencies":{"axios":">=1.0.0","ws":">=8.0.0"},"peerDependenciesMeta":{"axios":{"optional":true},"ws":{"optional":true}},"devDependencies":{"@semantic-release/changelog":"^6.0.3","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@types/node":"^22.0.0","@types/ws":"^8.18.1","axios":"^1.9.0","pino-pretty":"^13.1.3","semantic-release":"^25.0.2","tsup":"^8.0.0","tsx":"^4.21.0","typescript":"^5.7.0","vitest":"^2.0.0","winston":"^3.19.0"},"_id":"@rawnodes/logger@2.12.0","gitHead":"ab201205278c29325d2c8eeddc23df52e8e00961","bugs":{"url":"https://github.com/rawnodes/logger/issues"},"homepage":"https://github.com/rawnodes/logger#readme","_nodeVersion":"22.17.1","_npmVersion":"11.5.1","dist":{"integrity":"sha512-5txzAupeln/hr2Fc94oM8RpLPqjpFUWYwOyf0kjrotYBQddw+ksrV90fOgCwH7l19KIDbOGFUABd+7KUiiZShA==","shasum":"1c3f48d7ad78b84c831768c547042c5af7062620","tarball":"https://registry.npmjs.org/@rawnodes/logger/-/logger-2.12.0.tgz","fileCount":17,"unpackedSize":707409,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDawr5KCP9GST8xWj37FOhTMg6i9GiyhCBOaoCxADGu3wIgZC6ClshAkYDpo+9i8eINC5p6Haj2BuWXcWlPqyQeMyg="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae28bc34-9d27-4e6a-90b3-02783e0aeef9"}},"directories":{},"maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/logger_2.12.0_1782602504650_0.2737211944741009"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-23T21:01:40.484Z","modified":"2026-06-27T23:21:44.967Z","1.0.0":"2025-12-23T21:01:40.735Z","1.1.0":"2025-12-23T21:12:44.965Z","1.2.0":"2025-12-24T18:00:42.660Z","1.2.1":"2025-12-24T18:17:54.295Z","1.3.0":"2025-12-24T18:33:08.367Z","1.4.0":"2025-12-25T17:39:52.561Z","1.5.0":"2025-12-25T20:57:32.401Z","1.5.1":"2025-12-25T22:04:05.486Z","1.6.0":"2025-12-29T11:51:20.152Z","1.7.0":"2025-12-29T12:10:08.133Z","1.8.0":"2025-12-29T14:51:06.076Z","1.9.0":"2025-12-29T15:19:31.026Z","1.9.1":"2025-12-29T15:27:47.517Z","1.10.0":"2025-12-29T15:50:48.363Z","2.0.0":"2025-12-29T18:12:42.723Z","2.0.1":"2025-12-29T18:27:13.917Z","2.1.0":"2025-12-29T18:40:27.216Z","2.2.0":"2025-12-30T22:33:40.902Z","2.3.0":"2026-01-06T17:15:59.291Z","2.4.0":"2026-01-14T16:56:19.560Z","2.5.0":"2026-01-17T00:33:22.479Z","2.6.0":"2026-01-17T00:53:57.502Z","2.7.0":"2026-01-25T23:24:05.281Z","2.7.1":"2026-04-03T09:21:24.106Z","2.7.2":"2026-04-17T13:54:53.090Z","2.8.0":"2026-04-17T20:15:18.580Z","2.9.0":"2026-04-18T08:03:10.107Z","2.10.0":"2026-04-29T12:49:03.566Z","2.11.0":"2026-05-10T09:08:47.373Z","2.12.0":"2026-06-27T23:21:44.856Z"},"bugs":{"url":"https://github.com/rawnodes/logger/issues"},"author":{"name":"RawNodes"},"license":"MIT","homepage":"https://github.com/rawnodes/logger#readme","keywords":["logger","logging","pino","typescript","context","async-local-storage","timing","request-id","high-performance"],"repository":{"type":"git","url":"git+https://github.com/rawnodes/logger.git"},"description":"High-performance Pino-based logger with AsyncLocalStorage context, O(1) level rules, and timing utilities","maintainers":[{"name":"pluhin","email":"pavel.luhin@gmail.com"}],"readme":"# @rawnodes/logger\n\nFlexible Winston-based logger with AsyncLocalStorage context, level rules, and multiple output formats.\n\n## Features\n\n- **Multiple Formats** - JSON, plain (colored), logfmt, simple\n- **Context Propagation** - Automatic context via AsyncLocalStorage\n- **Level Rules** - Configure log levels per module/context in config\n- **Lazy Meta** - Defer metadata creation until log level check passes\n- **Timing Utilities** - Built-in performance measurement\n- **Request ID** - Generate and extract request IDs\n- **Secret Masking** - Automatic masking of sensitive data\n- **TypeScript First** - Full generic type support\n\n## Installation\n\n```bash\npnpm add @rawnodes/logger\n# or\nnpm install @rawnodes/logger\n```\n\n## Quick Start\n\n```typescript\nimport { Logger } from '@rawnodes/logger';\n\nconst logger = Logger.create({\n  level: 'info',\n  console: { format: 'plain' },\n});\n\nlogger.info('Hello world');\nlogger.info('User logged in', { userId: 123 });\n```\n\n## Configuration\n\n### Basic Config\n\n```typescript\nimport { Logger } from '@rawnodes/logger';\n\nconst logger = Logger.create({\n  level: 'info',                    // default log level\n  console: { format: 'plain' },     // console output format\n  file: {                           // optional file output\n    format: 'json',\n    dirname: 'logs',\n    filename: 'app-%DATE%.log',\n    datePattern: 'YYYY-MM-DD',\n    maxFiles: '14d',\n    maxSize: '20m',\n  },\n});\n```\n\n### Level Rules\n\nConfigure different log levels for specific modules or contexts:\n\n```typescript\nconst logger = Logger.create({\n  level: {\n    default: 'info',\n    rules: [\n      { match: { context: 'auth' }, level: 'debug' },        // debug for auth module\n      { match: { context: 'database' }, level: 'warn' },     // warn for database\n      { match: { userId: 123 }, level: 'debug' },            // debug for user 123\n      { match: { context: 'api', userId: 456 }, level: 'silly' }, // combined match\n    ],\n  },\n  console: { format: 'plain' },\n});\n\nconst authLogger = logger.for('auth');\nauthLogger.debug('This will be logged');  // matches rule\n\nconst dbLogger = logger.for('database');\ndbLogger.info('This will NOT be logged'); // level is warn\n```\n\nRules from config are **readonly** and cannot be removed via API.\n\n### Output Formats\n\n| Format | Description | Example |\n|--------|-------------|---------|\n| `json` | Structured JSON | `{\"level\":\"info\",\"message\":\"hello\",\"timestamp\":\"...\"}` |\n| `plain` | Colored, human-readable | `[2025-01-01T12:00:00] info [APP] hello` |\n| `logfmt` | Key=value pairs | `level=info msg=hello context=APP ts=2025-01-01T12:00:00` |\n| `simple` | Minimal | `[2025-01-01T12:00:00] info: hello` |\n\n```typescript\n// Different formats for console and file\nconst logger = Logger.create({\n  level: 'info',\n  console: { format: 'plain' },   // colored for development\n  file: {\n    format: 'json',               // structured for log aggregation\n    dirname: 'logs',\n    filename: 'app-%DATE%.log',\n  },\n});\n```\n\n### Per-Transport Level\n\nEach transport can have its own log level:\n\n```typescript\nconst logger = Logger.create({\n  level: 'silly',                        // accept all at logger level\n  console: {\n    format: 'plain',\n    level: 'debug',                      // console: debug and above\n  },\n  file: {\n    format: 'json',\n    level: 'warn',                       // file: only warn and error\n    dirname: 'logs',\n    filename: 'app-%DATE%.log',\n  },\n});\n```\n\n| Scenario | Console | File |\n|----------|---------|------|\n| Development | `debug` | — |\n| Production | `info` | `warn` |\n| Troubleshooting | `debug` | `info` |\n| Critical alerts | `info` | `error` |\n\nThis is useful for sending only critical errors to alerting systems while keeping verbose logs in console.\n\n#### Level precedence\n\nEach transport decides on its own whether to emit a given log entry. The precedence depends on whether the transport **respects runtime overrides** (see the next section):\n\n**When respecting overrides** (observability transports — console/file/cloudwatch/relay by default):\n\n1. **Runtime override** from `setLevelOverride(...)` or the top-level `level.rules` array\n2. **Per-transport rule** (a matching entry in `console.rules` / `file.rules` / etc.)\n3. **Per-transport level** (`console.level`, `file.level`, …)\n4. **Global default level** (`level` or `level.default`)\n\n**When ignoring overrides** (alert transports — discord/telegram/zohoCliq by default):\n\n1. **Per-transport rule**\n2. **Per-transport level**\n3. **Global default level**\n\nPractically: a matching `setLevelOverride({ userId: 123 }, 'debug')` will surface debug logs to **viewing** transports (console/cloudwatch/file), even if their own `level` is set to `info`. But the same override will **not** leak through notification channels (discord/telegram/zohoCliq) unless you explicitly opt them in via `respectRuntimeOverrides: true`.\n\n#### Transport roles (`respectRuntimeOverrides`)\n\nEvery transport config accepts an optional `respectRuntimeOverrides?: boolean` flag. Defaults:\n\n| Transport    | Default | Role          |\n|--------------|---------|---------------|\n| `console`    | `true`  | observability |\n| `file`       | `true`  | observability |\n| `cloudwatch` | `true`  | observability |\n| `relay`      | `true`  | observability |\n| `discord`    | `false` | alert         |\n| `telegram`   | `false` | alert         |\n| `zohoCliq`   | `false` | alert         |\n\nThe defaults reflect typical usage — console/file/cloudwatch are where operators look for logs during troubleshooting, while discord/telegram/zohoCliq are user-facing notification channels that should not get flooded by ad-hoc debug overrides. Override the default per-transport when needed:\n\n```typescript\nconst logger = Logger.create({\n  level: 'info',\n  console: { format: 'plain' },\n  telegram: {\n    botToken: '...',\n    chatId: '...',\n    level: 'warn',\n    respectRuntimeOverrides: true,   // let overrides through (rare)\n  },\n  cloudwatch: {\n    logGroupName: '...',\n    level: 'info',\n    respectRuntimeOverrides: false,  // strict gate even under troubleshooting (also rare)\n    region: '...', accessKeyId: '...', secretAccessKey: '...',\n  },\n});\n```\n\n### Per-Transport Rules\n\nEach transport can have its own filtering rules. Use `level: 'off'` with rules to create a whitelist pattern:\n\n```typescript\nconst logger = Logger.create({\n  level: 'info',\n  console: { format: 'plain' },\n  file: {\n    format: 'json',\n    level: 'off',                              // off by default\n    rules: [\n      { match: { context: 'payments' }, level: 'error' },  // only errors from payments\n      { match: { context: 'auth' }, level: 'warn' },       // warn+ from auth\n    ],\n    dirname: 'logs',\n    filename: 'critical-%DATE%.log',\n  },\n});\n\n// Only error logs from 'payments' context go to file\nlogger.for('payments').error('Payment failed');  // → file\nlogger.for('payments').info('Processing');       // ✗ not logged to file\nlogger.for('other').error('Generic error');      // ✗ not logged to file (no matching rule)\n```\n\nRules can also match store context (AsyncLocalStorage):\n\n```typescript\nconst logger = Logger.create({\n  level: 'info',\n  console: { format: 'plain' },\n  file: {\n    format: 'json',\n    level: 'off',\n    rules: [\n      { match: { userId: 123 }, level: 'debug' },           // debug for specific user\n      { match: { context: 'api', premium: true }, level: 'debug' }, // debug for premium API users\n    ],\n    dirname: 'logs',\n    filename: 'debug-%DATE%.log',\n  },\n});\n\n// Logs for user 123 go to file\nstore.run({ userId: 123 }, () => {\n  logger.debug('User action');  // → file\n});\n```\n\nUse `level: 'off'` in rules to suppress specific contexts:\n\n```typescript\nconst logger = Logger.create({\n  level: 'debug',\n  console: {\n    format: 'plain',\n    level: 'debug',\n    rules: [\n      { match: { context: 'noisy-module' }, level: 'off' },  // suppress noisy logs\n    ],\n  },\n});\n\nlogger.for('noisy-module').debug('Spam');  // ✗ not logged\nlogger.for('other').debug('Useful info');  // → logged\n```\n\n## External Transports\n\n### Discord\n\nSend logs to Discord via webhooks with rich embeds:\n\n```typescript\nconst logger = Logger.create({\n  level: 'info',\n  console: { format: 'plain' },\n  discord: {\n    webhookUrl: 'https://discord.com/api/webhooks/xxx/yyy',\n    level: 'error',                    // only errors to Discord\n    username: 'My App Logger',         // optional bot name\n    avatarUrl: 'https://...',          // optional avatar\n    embedColors: {                     // optional custom colors\n      error: 0xFF0000,\n      warn: 0xFFAA00,\n    },\n    batchSize: 10,                     // messages per batch (default: 10)\n    flushInterval: 2000,               // flush interval ms (default: 2000)\n  },\n});\n```\n\n### Telegram\n\nSend logs to Telegram chats/channels:\n\n```typescript\nconst logger = Logger.create({\n  level: 'info',\n  console: { format: 'plain' },\n  telegram: {\n    botToken: process.env.TG_BOT_TOKEN!,\n    chatId: process.env.TG_CHAT_ID!,\n    level: 'warn',                     // warn and above\n    parseMode: 'Markdown',             // 'Markdown' | 'MarkdownV2' | 'HTML'\n    disableNotification: false,        // mute non-error by default\n    threadId: 123,                     // optional forum topic ID\n    replyToMessageId: 456,             // optional reply to message\n    batchSize: 20,                     // default: 20\n    flushInterval: 1000,               // default: 1000\n  },\n});\n```\n\nUse `level: 'off'` with rules for selective logging:\n\n```typescript\ntelegram: {\n  botToken: '...',\n  chatId: '...',\n  level: 'off',                        // off by default\n  rules: [\n    { match: { context: 'payments' }, level: 'error' },  // only payment errors\n  ],\n}\n```\n\n### CloudWatch\n\nSend logs to AWS CloudWatch Logs:\n\n```typescript\nconst logger = Logger.create({\n  level: 'info',\n  console: { format: 'plain' },\n  cloudwatch: {\n    logGroupName: '/app/my-service',\n    region: 'us-east-1',\n    accessKeyId: process.env.AWS_ACCESS_KEY_ID!,\n    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,\n    createLogGroup: true,              // auto-create group (default: false)\n    createLogStream: true,             // auto-create stream (default: true)\n    batchSize: 100,                    // default: 100\n    flushInterval: 1000,               // default: 1000\n  },\n});\n```\n\n#### Log Stream Name\n\nThe `logStreamName` field is optional and supports multiple configuration formats:\n\n```typescript\n// Option 1: Static string\ncloudwatch: {\n  logGroupName: '/app/my-service',\n  logStreamName: 'my-static-stream',\n  // ...\n}\n\n// Option 2: Predefined pattern\ncloudwatch: {\n  logGroupName: '/app/my-service',\n  logStreamName: { pattern: 'hostname-date' },\n  // ...\n}\n\n// Option 3: Custom template\ncloudwatch: {\n  logGroupName: '/app/my-service',\n  logStreamName: { template: '{hostname}/{env}/{date}' },\n  // ...\n}\n\n// Option 4: Omit for default (hostname)\ncloudwatch: {\n  logGroupName: '/app/my-service',\n  // logStreamName defaults to hostname\n  // ...\n}\n```\n\n**Available patterns:**\n\n| Pattern | Example Output |\n|---------|----------------|\n| `hostname` | `my-server` |\n| `hostname-date` | `my-server/2025-01-15` |\n| `hostname-uuid` | `my-server-a1b2c3d4` |\n| `date` | `2025-01-15` |\n| `uuid` | `a1b2c3d4-e5f6-7890-abcd` |\n\n**Template variables:**\n\n| Variable | Description |\n|----------|-------------|\n| `{hostname}` | Server hostname (config.hostname → HOSTNAME env → os.hostname()) |\n| `{date}` | Current date (YYYY-MM-DD) |\n| `{datetime}` | Current datetime (YYYY-MM-DD-HH-mm-ss) |\n| `{uuid}` | 8-char UUID (generated once at startup) |\n| `{pid}` | Process ID |\n| `{env}` | NODE_ENV (default: \"development\") |\n\n**Hostname resolution priority:**\n1. `config.hostname` (from logger config)\n2. `process.env.HOSTNAME` (useful in Docker/Kubernetes)\n3. `os.hostname()`\n\n**Examples:**\n\n```typescript\n// Kubernetes-friendly: pod name as stream\ncloudwatch: {\n  logGroupName: '/app/my-service/production',\n  logStreamName: { pattern: 'hostname' },  // -> \"my-app-pod-abc123\"\n  // ...\n}\n\n// Daily rotation with hostname\ncloudwatch: {\n  logGroupName: '/app/my-service',\n  logStreamName: { pattern: 'hostname-date' },  // -> \"my-server/2025-01-15\"\n  // ...\n}\n\n// Custom format with environment\ncloudwatch: {\n  logGroupName: '/app/my-service',\n  logStreamName: { template: '{env}/{hostname}/{date}' },  // -> \"production/my-server/2025-01-15\"\n  // ...\n}\n```\n\n### Relay (remote live-tail)\n\nThe relay transport runs in a worker thread, polls a config endpoint you control, and — when that endpoint returns `enabled: true` — opens a WebSocket and streams logs to it in real time. Lets you flip on live-tail debugging for a running prod service from a dashboard, without redeploying.\n\n```typescript\nLogger.create({\n  level: 'info',\n  console: { format: 'json' },\n  relay: {\n    apiUrl: 'https://relay.internal.company.com',\n    token: process.env.RELAY_TOKEN!,\n    maskSecrets: true,                      // mask before forwarding (recommended)\n    allowedWsHosts: ['ws.internal.company.com'], // only needed if WS host ≠ apiUrl host\n  },\n});\n```\n\nServer contract (`GET /api/relay/config` with `Authorization: Bearer <token>`):\n\n```jsonc\n{\n  \"enabled\": true,                 // false = stop streaming, drop logs cheaply\n  \"wsUrl\":   \"wss://...\",          // WebSocket gateway to stream to\n  \"rules\":   [{ \"level\": \"debug\", \"context\": \"auth\" }]  // optional filters\n}\n```\n\n**Security defaults to know about:**\n\n- **`wsUrl` is pinned to `apiUrl`'s origin by default.** A compromised config endpoint cannot redirect your logs to an arbitrary host. Use `allowedWsHosts` to authorize alternates explicitly.\n- **`maskSecrets` does NOT inherit from the parent logger** — the relay runs in a worker thread and gets only the options you pass to its config. Pass it again here if you want forwarded logs masked. Off by default.\n- The relay writes one stderr line on first successful WS open (`[RelayTransport] streaming logs to ...`) so the fact of streaming is auditable in your normal log output.\n\n### Transport Options\n\nAll external transports support:\n\n| Option | Default | Description |\n|--------|---------|-------------|\n| `level` | — | Log level filter |\n| `rules` | — | Per-transport filtering rules |\n| `batchSize` | varies | Max messages per batch |\n| `flushInterval` | varies | Flush interval in ms |\n| `maxRetries` | 3 | Retry count on failure |\n| `retryDelay` | 1000 | Base retry delay in ms |\n\n### Multiple Transports\n\nYou can configure multiple instances of the same transport type using arrays:\n\n```typescript\nconst logger = Logger.create({\n  level: 'info',\n  console: { format: 'plain' },\n  discord: [\n    {\n      webhookUrl: 'https://discord.com/api/webhooks/payments/xxx',\n      level: 'off',\n      rules: [{ match: { context: 'payments' }, level: 'error' }],\n    },\n    {\n      webhookUrl: 'https://discord.com/api/webhooks/auth/yyy',\n      level: 'off',\n      rules: [{ match: { context: 'auth' }, level: 'error' }],\n    },\n  ],\n  telegram: [\n    { botToken: 'token1', chatId: 'errors-chat', level: 'error' },\n    { botToken: 'token2', chatId: 'alerts-chat', level: 'warn' },\n  ],\n});\n\n// Payment errors go to payments Discord channel\nlogger.for('payments').error('Payment failed');\n\n// Auth errors go to auth Discord channel\nlogger.for('auth').error('Login failed');\n```\n\n## Graceful Shutdown\n\nExternal transports (Discord, Telegram, CloudWatch) buffer messages before sending. To ensure no logs are lost on process exit, use graceful shutdown.\n\n### Automatic (Recommended)\n\nEnable `autoShutdown` in config to automatically handle SIGTERM/SIGINT:\n\n```typescript\nconst logger = Logger.create({\n  level: 'info',\n  console: { format: 'plain' },\n  cloudwatch: { /* ... */ },\n  autoShutdown: true,  // Auto-register shutdown handlers\n});\n\n// Or with options:\nconst logger = Logger.create({\n  level: 'info',\n  console: { format: 'plain' },\n  cloudwatch: { /* ... */ },\n  autoShutdown: {\n    timeout: 10000,              // Max wait time (default: 5000ms)\n    signals: ['SIGTERM'],        // Signals to handle (default: ['SIGTERM', 'SIGINT'])\n  },\n});\n```\n\n### Manual\n\nFor more control, use `registerShutdown` or call `shutdown()` directly:\n\n```typescript\nimport { Logger, registerShutdown } from '@rawnodes/logger';\n\nconst logger = Logger.create(config);\n\n// Option 1: Register handlers manually\nregisterShutdown(logger, {\n  timeout: 10000,\n  onShutdown: async () => {\n    console.log('Flushing logs...');\n  },\n});\n\n// Option 2: Call shutdown directly (e.g., in your own signal handler)\nprocess.on('SIGTERM', async () => {\n  await logger.shutdown();  // Flush all buffered messages\n  process.exit(0);\n});\n```\n\n### In Tests\n\nFor tests, call `shutdown()` in `afterAll` to flush pending logs:\n\n```typescript\nafterAll(async () => {\n  await logger.shutdown();\n});\n```\n\n## Singleton Pattern\n\nFor app-wide logging:\n\n```typescript\n// src/logger.ts\nimport { createSingletonLogger, type LoggerContext } from '@rawnodes/logger';\n\nexport interface AppContext extends LoggerContext {\n  userId?: number;\n  requestId?: string;\n}\n\nexport const AppLogger = createSingletonLogger<AppContext>();\n\n// src/main.ts\nimport { AppLogger } from './logger.js';\n\nAppLogger.init({\n  level: {\n    default: 'info',\n    rules: [{ match: { context: 'debug-module' }, level: 'debug' }],\n  },\n  console: { format: 'plain' },\n});\n\n// Anywhere in your app\nconst logger = AppLogger.for('UserService');\nlogger.info('User created', { userId: 123 });\n```\n\n## Context Propagation\n\nAutomatically include context in all logs within an async scope:\n\n```typescript\n// Express middleware\napp.use((req, res, next) => {\n  const context = {\n    userId: req.user?.id,\n    requestId: req.headers['x-request-id'] || generateRequestId(),\n  };\n  AppLogger.getStore().run(context, () => next());\n});\n\n// All logs within this request will include userId and requestId\nlogger.info('Processing request');\n// Output: [2025-01-01T12:00:00] info [APP] Processing request\n//   userId: 123\n//   requestId: abc-123\n```\n\n## Dynamic Level Overrides\n\nAdd/remove level overrides at runtime:\n\n```typescript\n// Enable debug for specific user (e.g., for troubleshooting)\nlogger.setLevelOverride({ userId: 123 }, 'debug');\n\n// Enable debug for specific module\nlogger.setLevelOverride({ context: 'payments' }, 'debug');\n\n// Remove override\nlogger.removeLevelOverride({ userId: 123 });\n\n// Clear all dynamic overrides (keeps config rules)\nlogger.clearLevelOverrides();\n\n// Get all overrides\nconst overrides = logger.getLevelOverrides();\n// [{ match: { context: 'payments' }, level: 'debug', readonly: false }]\n```\n\n## Lazy Meta\n\nDefer expensive object creation:\n\n```typescript\n// BAD: Object created even if debug is disabled\nlogger.debug('Data processed', { result: expensiveSerialize(data) });\n\n// GOOD: Function only called when debug is enabled\nlogger.debug('Data processed', () => ({ result: expensiveSerialize(data) }));\n```\n\n## Child Loggers\n\nCreate scoped loggers:\n\n```typescript\nconst logger = AppLogger.for('PaymentService');\nlogger.info('Processing payment');\n// Output: [timestamp] info [PaymentService] Processing payment\n\nconst stripeLogger = logger.for('Stripe');\nstripeLogger.info('Charging card');\n// Output: [timestamp] info [Stripe] Charging card\n```\n\n## Utilities\n\n### Timing\n\n```typescript\nimport { measureAsync, measureSync } from '@rawnodes/logger';\n\n// Async\nconst { result, timing } = await measureAsync('fetch-users', async () => {\n  return await userService.findAll();\n});\nconsole.log(timing); // { label: 'fetch-users', durationMs: 45.23, durationFormatted: '45.23ms' }\n\n// Sync\nconst { result, timing } = measureSync('compute', () => {\n  return heavyComputation();\n});\n```\n\n### Request ID\n\n```typescript\nimport { generateRequestId, extractRequestId, getOrGenerateRequestId } from '@rawnodes/logger';\n\n// Generate new\ngenerateRequestId();                          // \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\"\ngenerateRequestId({ short: true });           // \"a1b2c3d4\"\ngenerateRequestId({ prefix: 'req' });         // \"req-a1b2c3d4-e5f6-...\"\n\n// Extract from headers (checks x-request-id, x-correlation-id, x-trace-id)\nextractRequestId(req.headers);                // string | undefined\n\n// Extract or generate\ngetOrGenerateRequestId(req.headers);          // always returns string\n```\n\n### Secret Masking\n\nTwo ways to use it: a **global flag** that masks every log automatically, or **manual utilities** when you want fine-grained control.\n\n#### Global flag (recommended)\n\nSet `maskSecrets: true` in `Logger.create` to mask all output across console / file / CloudWatch / Discord / Telegram / Zoho Cliq. Backwards compatible — masking is **off by default**.\n\n```typescript\nconst logger = Logger.create({\n  level: 'info',\n  console: { format: 'json' },\n  file: { format: 'json', dirname: './logs', filename: 'app.log' },\n  maskSecrets: true,\n});\n\nlogger.info('login', { user: 'alice', password: 'hunter2' });\n// {\"level\":\"info\",\"message\":\"login\",\"user\":\"alice\",\"password\":\"***\",...}\n\nlogger.info('connect', { url: 'https://u:p@db.example.com/foo' });\n// URL credentials masked: \"https://***:***@db.example.com/foo\"\n```\n\nCustom patterns / mask string:\n\n```typescript\nLogger.create({\n  ...,\n  maskSecrets: {\n    patterns: ['ssn', 'creditCard'],   // adds to defaults? NO — replaces them\n    mask: '[REDACTED]',\n  },\n});\n```\n\n**Default masked patterns:** `password`, `secret`, `token`, `apikey`, `api_key`, `api-key`, `auth`, `credential`, `private` (case-insensitive substring match on key names).\n\n**Performance:** ~+2.5 µs per log call on a typical payload. Implemented via a `JSON.stringify` replacer for json/CloudWatch (zero clone) and a one-shot clone for HTTP transports that build markdown/embed payloads (Discord/Telegram/Zoho). For most services (< 10k logs/sec) the cost is invisible.\n\n#### Manual utilities\n\nIf you only want to mask specific calls — or need a `JSON.stringify` replacer for your own serialization — three helpers are exported:\n\n```typescript\nimport { maskSecrets, createMasker, maskReplacer } from '@rawnodes/logger';\n\n// One-shot: returns a deep-cloned masked object\nmaskSecrets({ user: 'admin', password: 'secret' });\n// { user: 'admin', password: '***' }\n\n// Reusable: pre-resolves options, slightly faster for repeated calls\nconst masker = createMasker({ patterns: ['ssn'], mask: '[REDACTED]' });\nmasker({ ssn: '123-45-6789' }); // { ssn: '[REDACTED]' }\n\n// JSON.stringify replacer: zero allocations, masks during serialization\nJSON.stringify(payload, maskReplacer());\nJSON.stringify(payload, maskReplacer({ patterns: ['ssn'] }), 2);\n```\n\n## Error logging\n\n`error()` accepts an error value as the **first** argument. This keeps call sites short in the common case — you forward whatever `catch` produced without pre-normalizing it.\n\n```typescript\ntry {\n  await doWork();\n} catch (err) {\n  // err: unknown — passes straight through, no cast needed\n  logger.error(err, 'doWork failed', { userId });\n}\n```\n\nSupported shapes:\n\n```typescript\nlogger.error('something broke');                       // message only\nlogger.error('something broke', { retries: 3 });       // message + meta\nlogger.error(err);                                     // error only (uses err.message)\nlogger.error(err, 'doWork failed');                    // error + message\nlogger.error(err, { userId });                         // error + meta\nlogger.error(err, 'doWork failed', { userId });        // error + message + meta\n```\n\nThe first argument is interpreted as an error whenever it is **not a string**. That includes anything TypeScript's `catch` clause can produce (`Error`, plain objects, primitives, `null`, `undefined`). Non-`Error` values are normalized via `serializeError`:\n\n| Input                                 | Log fields extracted                                  |\n|---------------------------------------|-------------------------------------------------------|\n| `new Error('boom')`                   | `errorMessage`, `stack`, `errorName` (if not `Error`) |\n| `'string value'`                      | `errorMessage: 'string value'`                        |\n| axios error                           | `errorMessage`, `stack`, `http: { status, url, … }`   |\n| fetch-style `{ response, config }`    | Same, extracted heuristically                         |\n| `{ message: 'x', code: 'ECONN' }`     | `errorMessage`, `errorCode`                           |\n| `null` / `undefined`                  | `errorMessage: 'Unknown error'`                       |\n\nString-as-first-arg is always a message, never an error. If you want to log a string *as* an error, wrap it: `logger.error(new Error(str))`.\n\n## Logfmt Utilities\n\nHelper functions for logfmt format:\n\n```typescript\nimport { flattenObject, formatLogfmt, formatLogfmtValue } from '@rawnodes/logger';\n\nflattenObject({ user: { id: 123, name: 'John' } });\n// { 'user.id': 123, 'user.name': 'John' }\n\nformatLogfmt({ level: 'info', msg: 'hello', userId: 123 });\n// \"level=info msg=hello userId=123\"\n```\n\n## API Reference\n\n### Logger\n\n```typescript\nclass Logger<TContext> {\n  static create(config: LoggerConfig, store?: LoggerStore): Logger;\n\n  for(context: string): Logger;\n  getStore(): LoggerStore<TContext>;\n\n  // Logging\n  // error() accepts an error value as the first argument — including `unknown`\n  // (what `catch (err)` produces under TypeScript's strict mode). Non-Error\n  // values are normalized via `serializeError` so logs still get a sensible\n  // `errorMessage` / `stack` / HTTP payload. See \"Error logging\" below.\n  error(errorOrMessage: Error | string | unknown, messageOrMeta?: string | Meta, meta?: Meta): void;\n  warn(message: string, meta?: Meta): void;\n  info(message: string, meta?: Meta): void;\n  http(message: string, meta?: Meta): void;\n  verbose(message: string, meta?: Meta): void;\n  debug(message: string, meta?: Meta): void;\n  silly(message: string, meta?: Meta): void;\n\n  // Level overrides\n  setLevelOverride(match: LevelOverrideMatch, level: LogLevel): void;\n  removeLevelOverride(match: LevelOverrideMatch): boolean;\n  clearLevelOverrides(): void;\n  getLevelOverrides(): LevelOverride[];\n\n  // Winston profiling\n  profile(id: string, meta?: object): void;\n}\n```\n\n### Types\n\n```typescript\ntype LogLevel = 'error' | 'warn' | 'info' | 'http' | 'verbose' | 'debug' | 'silly' | 'off';\ntype LogFormat = 'json' | 'plain' | 'logfmt' | 'simple';\ntype Meta = object | (() => object);\n\ninterface LoggerConfig {\n  level: LogLevel | {\n    default: LogLevel;\n    rules?: LevelRule[];\n  };\n  console: {\n    format: LogFormat;\n    level?: LogLevel;      // optional, overrides global level\n    rules?: LevelRule[];   // optional, per-transport filtering\n  };\n  file?: {\n    format: LogFormat;\n    level?: LogLevel;      // optional, overrides global level\n    rules?: LevelRule[];   // optional, per-transport filtering\n    dirname: string;\n    filename: string;\n    datePattern?: string;\n    maxFiles?: string;\n    maxSize?: string;\n    zippedArchive?: boolean;\n  };\n}\n\ninterface LevelRule {\n  match: Record<string, unknown> & { context?: string };\n  level: LogLevel;\n}\n```\n\n## Integration Examples\n\n### Express\n\n```typescript\nimport express from 'express';\nimport { AppLogger, generateRequestId } from './logger';\n\nconst app = express();\n\napp.use((req, res, next) => {\n  const context = {\n    requestId: req.headers['x-request-id'] || generateRequestId({ short: true }),\n    userId: req.user?.id,\n  };\n  AppLogger.getStore().run(context, () => next());\n});\n```\n\n### NestJS\n\n```typescript\nimport { Injectable, NestMiddleware } from '@nestjs/common';\nimport { AppLogger, generateRequestId } from './logger';\n\n@Injectable()\nexport class LoggerMiddleware implements NestMiddleware {\n  use(req: any, res: any, next: () => void) {\n    const context = {\n      requestId: req.headers['x-request-id'] || generateRequestId({ short: true }),\n    };\n    AppLogger.getStore().run(context, () => next());\n  }\n}\n```\n\n### Telegraf\n\n```typescript\nimport { Telegraf } from 'telegraf';\nimport { AppLogger } from './logger';\n\nbot.use((ctx, next) => {\n  const context = {\n    telegramUserId: ctx.from?.id,\n    chatId: ctx.chat?.id,\n  };\n  return AppLogger.getStore().run(context, () => next());\n});\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}