{"_id":"@arkv/nestjs-context-logger","_rev":"12-24d542c4e9174ebdea60a3dcf0c4a70c","name":"@arkv/nestjs-context-logger","dist-tags":{"latest":"0.3.7"},"versions":{"0.2.0":{"name":"@arkv/nestjs-context-logger","version":"0.2.0","keywords":["nestjs","logger","structured","context","async-context","typescript","logging"],"author":{"url":"https://github.com/petarzarkov","name":"Petar Zarkov","email":"pzarko1@gmail.com"},"license":"MIT","_id":"@arkv/nestjs-context-logger@0.2.0","maintainers":[{"name":"p.zarkov","email":"pzarko1@gmail.com"}],"homepage":"https://github.com/petarzarkov/arkv/tree/main/packages/nestjs-context-logger#readme","dist":{"shasum":"0ff63613a9132e1e81e592fe8b69569d9dc3d164","tarball":"https://registry.npmjs.org/@arkv/nestjs-context-logger/-/nestjs-context-logger-0.2.0.tgz","fileCount":19,"integrity":"sha512-EHx23H+yWb1sO+aww4ldh4i08GdPfDRS7uOoVeCaCwoqmntn39pl77MtmPcA22baiL0aZ3Ub4vVuh/W0JiMC3Q==","signatures":[{"sig":"MEYCIQCxEZZJZ4j/g7b4ujKgbP7Lq4feM5a2HLgu4U81uJiIOwIhALFYoCJl9cW3e7QgGAgwTyzLlIEDyZrsOa2KLO5T5bIe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48624},"main":"dist/cjs/index.js","types":"dist/types/index.d.ts","module":"dist/esm/index.js","shasum":"0ff63613a9132e1e81e592fe8b69569d9dc3d164","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"}},"scripts":{"build":"bun run --parallel build:esm build:cjs build:types","prebuild":"rm -rf dist","build:cjs":"tsc -p tsconfig.build.cjs.json","build:esm":"tsc -p tsconfig.build.esm.json","postbuild":"echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json && echo '{\"type\":\"module\"}' > dist/esm/package.json","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.types.json"},"_npmUser":{"name":"p.zarkov","email":"pzarko1@gmail.com"},"_integrity":"sha512-EHx23H+yWb1sO+aww4ldh4i08GdPfDRS7uOoVeCaCwoqmntn39pl77MtmPcA22baiL0aZ3Ub4vVuh/W0JiMC3Q==","repository":{"url":"https://github.com/petarzarkov/arkv","type":"git","directory":"packages/nestjs-context-logger"},"_npmVersion":"10.8.3","description":"NestJS module for structured async-context logging powered by @arkv/logger","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@arkv/logger":"0.6.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@nestjs/core":"^11.1.16","@nestjs/common":"^11.1.16","reflect-metadata":"^0.2.2"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-context-logger_0.2.0_1772968444025_0.008537223827338236","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@arkv/nestjs-context-logger","version":"0.2.1","keywords":["nestjs","logger","structured","context","async-context","typescript","logging"],"author":{"url":"https://github.com/petarzarkov","name":"Petar Zarkov","email":"pzarko1@gmail.com"},"license":"MIT","_id":"@arkv/nestjs-context-logger@0.2.1","maintainers":[{"name":"p.zarkov","email":"pzarko1@gmail.com"}],"homepage":"https://github.com/petarzarkov/arkv/tree/main/packages/nestjs-context-logger#readme","dist":{"shasum":"67c208138bc6e9f758a07b5ea623df4ac9b76f01","tarball":"https://registry.npmjs.org/@arkv/nestjs-context-logger/-/nestjs-context-logger-0.2.1.tgz","fileCount":19,"integrity":"sha512-4JGx6t1vyR748m/WfVmShy0aJwSeTFFARif3tux5Dy9nMg86JYj8zl+XEXlch1vbSSlFW4gHstlnMFmQo3K9tg==","signatures":[{"sig":"MEUCIDo7zMjjGSw+VrCtUZEz5jiJ4XvDxMnLZo+TxisggS95AiEAlcb7aLCtLH8WheY0sqto7zbj/fMmXzZEfDqys2R2fbs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48622},"main":"dist/cjs/index.js","types":"dist/types/index.d.ts","module":"dist/esm/index.js","shasum":"67c208138bc6e9f758a07b5ea623df4ac9b76f01","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"}},"scripts":{"build":"bun run --parallel build:esm build:cjs build:types","prebuild":"rm -rf dist","build:cjs":"tsc -p tsconfig.build.cjs.json","build:esm":"tsc -p tsconfig.build.esm.json","postbuild":"echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json && echo '{\"type\":\"module\"}' > dist/esm/package.json","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.types.json"},"_npmUser":{"name":"p.zarkov","email":"pzarko1@gmail.com"},"_integrity":"sha512-4JGx6t1vyR748m/WfVmShy0aJwSeTFFARif3tux5Dy9nMg86JYj8zl+XEXlch1vbSSlFW4gHstlnMFmQo3K9tg==","repository":{"url":"https://github.com/petarzarkov/arkv","type":"git","directory":"packages/nestjs-context-logger"},"_npmVersion":"10.8.3","description":"NestJS module for structured async-context logging powered by @arkv/logger","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@arkv/logger":"0.6.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","reflect-metadata":"^0.2.2"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-context-logger_0.2.1_1773301712998_0.7822149896428032","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@arkv/nestjs-context-logger","version":"0.2.2","keywords":["nestjs","logger","structured","context","async-context","typescript","logging"],"author":{"url":"https://github.com/petarzarkov","name":"Petar Zarkov","email":"pzarko1@gmail.com"},"license":"MIT","_id":"@arkv/nestjs-context-logger@0.2.2","maintainers":[{"name":"p.zarkov","email":"pzarko1@gmail.com"}],"homepage":"https://github.com/petarzarkov/arkv/tree/main/packages/nestjs-context-logger#readme","dist":{"shasum":"f7af979e3fe55ac8fcf6286e06ee33c39a912b3c","tarball":"https://registry.npmjs.org/@arkv/nestjs-context-logger/-/nestjs-context-logger-0.2.2.tgz","fileCount":19,"integrity":"sha512-JQSABeUFFS+tSFOKPgl9qYWwLewznttOQx2ymUleDT/Z39HDRabUl/zAI1WRdaHw9um2QDFP2LSsWUOUTYA+Cw==","signatures":[{"sig":"MEUCID/zqYdhQn6kcLfrk91TFIY87JILf6HuSrqxr4NUhozrAiEA5xH24cwU+I66PJm+jCqOWUalXKeutahPQ/rCttE1vBI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48759},"main":"dist/cjs/index.js","types":"dist/types/index.d.ts","module":"dist/esm/index.js","shasum":"f7af979e3fe55ac8fcf6286e06ee33c39a912b3c","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"}},"scripts":{"build":"bun run --parallel build:esm build:cjs build:types","prebuild":"rm -rf dist","build:cjs":"tsc -p tsconfig.build.cjs.json","build:esm":"tsc -p tsconfig.build.esm.json","postbuild":"echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json && echo '{\"type\":\"module\"}' > dist/esm/package.json","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.types.json"},"_npmUser":{"name":"p.zarkov","email":"pzarko1@gmail.com"},"_integrity":"sha512-JQSABeUFFS+tSFOKPgl9qYWwLewznttOQx2ymUleDT/Z39HDRabUl/zAI1WRdaHw9um2QDFP2LSsWUOUTYA+Cw==","repository":{"url":"https://github.com/petarzarkov/arkv","type":"git","directory":"packages/nestjs-context-logger"},"_npmVersion":"10.8.3","description":"NestJS module for structured async-context logging powered by @arkv/logger","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@arkv/logger":"0.6.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","reflect-metadata":"^0.2.2"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-context-logger_0.2.2_1773304070025_0.8778239555050715","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@arkv/nestjs-context-logger","version":"0.2.3","keywords":["nestjs","logger","structured","context","async-context","typescript","logging"],"author":{"url":"https://github.com/petarzarkov","name":"Petar Zarkov","email":"pzarko1@gmail.com"},"license":"MIT","_id":"@arkv/nestjs-context-logger@0.2.3","maintainers":[{"name":"p.zarkov","email":"pzarko1@gmail.com"}],"homepage":"https://github.com/petarzarkov/arkv/tree/main/packages/nestjs-context-logger#readme","dist":{"shasum":"0ab70c06fc94ec20bb2c08517f0616f1121de551","tarball":"https://registry.npmjs.org/@arkv/nestjs-context-logger/-/nestjs-context-logger-0.2.3.tgz","fileCount":19,"integrity":"sha512-m7tjsJi1QTFfMx1p2bv63nq++z3Z1uB/DEaGg98k0JXPQscP4Yx2pqXnZxJtj9jWM+9gLG+CleXHj0a8Xo8Eew==","signatures":[{"sig":"MEQCIB3b0YAbkQ7D+yk+COkkdvknnm9dXP/Emz9SvoqTar0zAiBAv5Gkcm/ux+X86ESqz+qwv68jfW0YqBHhq7IN/sPPzQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48759},"main":"dist/cjs/index.js","types":"dist/types/index.d.ts","module":"dist/esm/index.js","shasum":"0ab70c06fc94ec20bb2c08517f0616f1121de551","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"}},"scripts":{"build":"bun run --parallel build:esm build:cjs build:types","prebuild":"rm -rf dist","build:cjs":"tsc -p tsconfig.build.cjs.json","build:esm":"tsc -p tsconfig.build.esm.json","postbuild":"echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json && echo '{\"type\":\"module\"}' > dist/esm/package.json","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.types.json"},"_npmUser":{"name":"p.zarkov","email":"pzarko1@gmail.com"},"_integrity":"sha512-m7tjsJi1QTFfMx1p2bv63nq++z3Z1uB/DEaGg98k0JXPQscP4Yx2pqXnZxJtj9jWM+9gLG+CleXHj0a8Xo8Eew==","repository":{"url":"https://github.com/petarzarkov/arkv","type":"git","directory":"packages/nestjs-context-logger"},"_npmVersion":"10.8.3","description":"NestJS module for structured async-context logging powered by @arkv/logger","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@arkv/logger":"0.6.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","reflect-metadata":"^0.2.2"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-context-logger_0.2.3_1773323919427_0.8206372623111522","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@arkv/nestjs-context-logger","version":"0.3.0","keywords":["async-context","context","logger","logging","nestjs","structured","typescript"],"author":{"url":"https://github.com/petarzarkov","name":"Petar Zarkov","email":"pzarko1@gmail.com"},"license":"MIT","_id":"@arkv/nestjs-context-logger@0.3.0","maintainers":[{"name":"p.zarkov","email":"pzarko1@gmail.com"}],"homepage":"https://github.com/petarzarkov/arkv/tree/main/packages/nestjs-context-logger#readme","dist":{"shasum":"129214241bc56c905b069f9de9e1e4334ce0c894","tarball":"https://registry.npmjs.org/@arkv/nestjs-context-logger/-/nestjs-context-logger-0.3.0.tgz","fileCount":19,"integrity":"sha512-zvZEHTrrm2LRV4EgQRWPchMDD8lcHXD5AkkV3Zyk3/ZEQKffzjoqaEm9GRtNRDWP2nhdTBfi5Qjhw5BSDhtjYg==","signatures":[{"sig":"MEYCIQD132XxpnJDR4A0jldgGBXDTt10pgo0yTjpz/lD9TWWCAIhAKTNiFnDivs+pkvvO8WHO5DG6xV9ADozMlHreI4tmhgS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48743},"main":"dist/cjs/index.js","types":"dist/types/index.d.ts","module":"dist/esm/index.js","shasum":"129214241bc56c905b069f9de9e1e4334ce0c894","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"}},"scripts":{"build":"bun run --parallel build:esm build:cjs build:types","prebuild":"rm -rf dist","build:cjs":"tsc -p tsconfig.build.cjs.json","build:esm":"tsc -p tsconfig.build.esm.json","postbuild":"echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json && echo '{\"type\":\"module\"}' > dist/esm/package.json","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.types.json"},"_npmUser":{"name":"p.zarkov","email":"pzarko1@gmail.com"},"_integrity":"sha512-zvZEHTrrm2LRV4EgQRWPchMDD8lcHXD5AkkV3Zyk3/ZEQKffzjoqaEm9GRtNRDWP2nhdTBfi5Qjhw5BSDhtjYg==","repository":{"url":"https://github.com/petarzarkov/arkv","type":"git","directory":"packages/nestjs-context-logger"},"_npmVersion":"10.8.3","description":"NestJS module for structured async-context logging powered by @arkv/logger","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@arkv/logger":"0.6.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","reflect-metadata":"^0.2.2"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-context-logger_0.3.0_1776077459381_0.8782741196985562","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@arkv/nestjs-context-logger","version":"0.3.1","keywords":["async-context","context","logger","logging","nestjs","structured","typescript"],"author":{"url":"https://github.com/petarzarkov","name":"Petar Zarkov","email":"pzarko1@gmail.com"},"license":"MIT","_id":"@arkv/nestjs-context-logger@0.3.1","maintainers":[{"name":"p.zarkov","email":"pzarko1@gmail.com"}],"homepage":"https://github.com/petarzarkov/arkv/tree/main/packages/nestjs-context-logger#readme","dist":{"shasum":"1144fdc2ed2fe6a2b324249254fdc12f8a128693","tarball":"https://registry.npmjs.org/@arkv/nestjs-context-logger/-/nestjs-context-logger-0.3.1.tgz","fileCount":19,"integrity":"sha512-JopHoWP3PqFZzikaV/ZMPoHNi8ccg2NutM8HuTcTuUMOYIKdF64pqztVYbGX7niLUPLX8CVa9UvcP12VLgjmKg==","signatures":[{"sig":"MEUCIQDUjb+UbrFV5pEu3Cz4txyggx2tuT7F1qdo4TECy98TtQIgF7efksCauRpmjxDueS394N2Y1DLeK8cQzRQ6DLIFZhw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48743},"main":"dist/cjs/index.js","types":"dist/types/index.d.ts","module":"dist/esm/index.js","shasum":"1144fdc2ed2fe6a2b324249254fdc12f8a128693","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"}},"scripts":{"build":"bun run --parallel build:esm build:cjs build:types","prebuild":"rm -rf dist","build:cjs":"tsc -p tsconfig.build.cjs.json","build:esm":"tsc -p tsconfig.build.esm.json","postbuild":"echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json && echo '{\"type\":\"module\"}' > dist/esm/package.json","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.types.json"},"_npmUser":{"name":"p.zarkov","email":"pzarko1@gmail.com"},"_integrity":"sha512-JopHoWP3PqFZzikaV/ZMPoHNi8ccg2NutM8HuTcTuUMOYIKdF64pqztVYbGX7niLUPLX8CVa9UvcP12VLgjmKg==","repository":{"url":"https://github.com/petarzarkov/arkv","type":"git","directory":"packages/nestjs-context-logger"},"_npmVersion":"10.8.3","description":"NestJS module for structured async-context logging powered by @arkv/logger","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@arkv/logger":"0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","reflect-metadata":"^0.2.2"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-context-logger_0.3.1_1777993634415_0.14652499028859012","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@arkv/nestjs-context-logger","version":"0.3.2","keywords":["async-context","context","logger","logging","nestjs","structured","typescript"],"author":{"url":"https://github.com/petarzarkov","name":"Petar Zarkov","email":"pzarko1@gmail.com"},"license":"MIT","_id":"@arkv/nestjs-context-logger@0.3.2","maintainers":[{"name":"p.zarkov","email":"pzarko1@gmail.com"}],"homepage":"https://github.com/petarzarkov/arkv/tree/main/packages/nestjs-context-logger#readme","dist":{"shasum":"3969b653ee8c10fe30ab431b43b7acf38064d6f7","tarball":"https://registry.npmjs.org/@arkv/nestjs-context-logger/-/nestjs-context-logger-0.3.2.tgz","fileCount":19,"integrity":"sha512-qHweIauemKRQa2zMGy1KpuA5va6mYaCBlI7Ed/ucvPe0EoSnUyeSDthz4NHQC9cKEv1+3Dt5Zgbydp7HXjRQeg==","signatures":[{"sig":"MEQCIDPbJibOrt23wnlAodsGpVupdl0HkPfoCUzG5XBIEmkAAiATXgiwUYvqKpAtr+NEV0Po+1siSodI1jkz43zg5c8y3A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48743},"main":"dist/cjs/index.js","types":"dist/types/index.d.ts","module":"dist/esm/index.js","shasum":"3969b653ee8c10fe30ab431b43b7acf38064d6f7","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"}},"scripts":{"build":"bun run --parallel build:esm build:cjs build:types","prebuild":"rm -rf dist","build:cjs":"tsc -p tsconfig.build.cjs.json","build:esm":"tsc -p tsconfig.build.esm.json","postbuild":"echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json && echo '{\"type\":\"module\"}' > dist/esm/package.json","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.types.json"},"_npmUser":{"name":"p.zarkov","email":"pzarko1@gmail.com"},"_integrity":"sha512-qHweIauemKRQa2zMGy1KpuA5va6mYaCBlI7Ed/ucvPe0EoSnUyeSDthz4NHQC9cKEv1+3Dt5Zgbydp7HXjRQeg==","repository":{"url":"https://github.com/petarzarkov/arkv","type":"git","directory":"packages/nestjs-context-logger"},"_npmVersion":"10.8.3","description":"NestJS module for structured async-context logging powered by @arkv/logger","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@arkv/logger":"0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","reflect-metadata":"^0.2.2"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-context-logger_0.3.2_1778144242367_0.6538747565191851","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@arkv/nestjs-context-logger","version":"0.3.3","keywords":["async-context","context","logger","logging","nestjs","structured","typescript"],"author":{"url":"https://github.com/petarzarkov","name":"Petar Zarkov","email":"pzarko1@gmail.com"},"license":"MIT","_id":"@arkv/nestjs-context-logger@0.3.3","maintainers":[{"name":"p.zarkov","email":"pzarko1@gmail.com"}],"homepage":"https://github.com/petarzarkov/arkv/tree/main/packages/nestjs-context-logger#readme","dist":{"shasum":"40aa01fda1cd7812cd905d4bb5a86754ea9024ac","tarball":"https://registry.npmjs.org/@arkv/nestjs-context-logger/-/nestjs-context-logger-0.3.3.tgz","fileCount":19,"integrity":"sha512-nzJD7SH59kY+OpuGbkpb9xGtcdCSVMQFabyxELEpdBPcr4XSm9bfsPuvo8zot5gm5r4jbM3CKzG/ENxgDRKVig==","signatures":[{"sig":"MEQCIGkAyzrNBEjOt23zD7UXpaU0L0qJDTxsjGN+A3zy03UFAiAx9oeRmd9wsRkCmqSJfHXZckiUiuTIYkd3AvyZ1VWhHQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48743},"main":"dist/cjs/index.js","types":"dist/types/index.d.ts","module":"dist/esm/index.js","shasum":"40aa01fda1cd7812cd905d4bb5a86754ea9024ac","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"}},"scripts":{"build":"bun run --parallel build:esm build:cjs build:types","prebuild":"rm -rf dist","build:cjs":"tsc -p tsconfig.build.cjs.json","build:esm":"tsc -p tsconfig.build.esm.json","postbuild":"echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json && echo '{\"type\":\"module\"}' > dist/esm/package.json","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.types.json"},"_npmUser":{"name":"p.zarkov","email":"pzarko1@gmail.com"},"_integrity":"sha512-nzJD7SH59kY+OpuGbkpb9xGtcdCSVMQFabyxELEpdBPcr4XSm9bfsPuvo8zot5gm5r4jbM3CKzG/ENxgDRKVig==","repository":{"url":"https://github.com/petarzarkov/arkv","type":"git","directory":"packages/nestjs-context-logger"},"_npmVersion":"10.8.3","description":"NestJS module for structured async-context logging powered by @arkv/logger","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@arkv/logger":"0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","reflect-metadata":"^0.2.2"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-context-logger_0.3.3_1782642028830_0.7946224172651315","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"@arkv/nestjs-context-logger","version":"0.3.4","keywords":["async-context","context","logger","logging","nestjs","structured","typescript"],"author":{"url":"https://github.com/petarzarkov","name":"Petar Zarkov","email":"pzarko1@gmail.com"},"license":"MIT","_id":"@arkv/nestjs-context-logger@0.3.4","maintainers":[{"name":"p.zarkov","email":"pzarko1@gmail.com"}],"homepage":"https://github.com/petarzarkov/arkv/tree/main/packages/nestjs-context-logger#readme","dist":{"shasum":"a45c5f3a8a7a578584c49c2b44657781dfb6c324","tarball":"https://registry.npmjs.org/@arkv/nestjs-context-logger/-/nestjs-context-logger-0.3.4.tgz","fileCount":19,"integrity":"sha512-xBkjV0nQLnJRCHHCeRbUnUbJmN9nJFipcVWbJ/qRBNid90sLP5dxX6rNT+nA3lxuqU4D5ZeBQrGb5m8PaegByQ==","signatures":[{"sig":"MEQCIH7WhcSDV31Y59QmfiFYdrhLvqAxJe0QrbH5SWbTuBxTAiAMuQs+wUUAF7jJkyCqk4P23nYpcL3zPERS4NuJgXSojQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48744},"main":"dist/cjs/index.js","types":"dist/types/index.d.ts","module":"dist/esm/index.js","shasum":"a45c5f3a8a7a578584c49c2b44657781dfb6c324","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"}},"scripts":{"build":"bun run --parallel build:esm build:cjs build:types","prebuild":"rm -rf dist","build:cjs":"tsc -p tsconfig.build.cjs.json","build:esm":"tsc -p tsconfig.build.esm.json","postbuild":"echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json && echo '{\"type\":\"module\"}' > dist/esm/package.json","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.types.json"},"_npmUser":{"name":"p.zarkov","email":"pzarko1@gmail.com"},"_integrity":"sha512-xBkjV0nQLnJRCHHCeRbUnUbJmN9nJFipcVWbJ/qRBNid90sLP5dxX6rNT+nA3lxuqU4D5ZeBQrGb5m8PaegByQ==","repository":{"url":"https://github.com/petarzarkov/arkv","type":"git","directory":"packages/nestjs-context-logger"},"_npmVersion":"10.8.3","description":"NestJS module for structured async-context logging powered by @arkv/logger","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@arkv/logger":"^0.7.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","reflect-metadata":"^0.2.2"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-context-logger_0.3.4_1782643390622_0.4440398603763298","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@arkv/nestjs-context-logger","version":"0.3.5","keywords":["async-context","context","logger","logging","nestjs","structured","typescript"],"author":{"url":"https://github.com/petarzarkov","name":"Petar Zarkov","email":"pzarko1@gmail.com"},"license":"MIT","_id":"@arkv/nestjs-context-logger@0.3.5","maintainers":[{"name":"p.zarkov","email":"pzarko1@gmail.com"}],"homepage":"https://github.com/petarzarkov/arkv/tree/main/packages/nestjs-context-logger#readme","bugs":{"url":"https://github.com/petarzarkov/arkv/issues"},"dist":{"shasum":"18087b65621fc0a1565f42007bd8a5bb9beb535b","tarball":"https://registry.npmjs.org/@arkv/nestjs-context-logger/-/nestjs-context-logger-0.3.5.tgz","fileCount":19,"integrity":"sha512-+lVbqGQ+aeLNT/PMN8mvkaSOuulFqH7DkpKjh7avjsWgFEveH8eVqLNnrWPnq6/IzgAwWv2wq1ovetvp/flE7Q==","signatures":[{"sig":"MEUCIDq3YJl6PzpD0lnk91ceu77pfTcJduYa5jcRWx09q59IAiEA05VjpbvJ+baXHMAP2ZVn0evLsYVPbYHfDWW8ivEyQsw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arkv%2fnestjs-context-logger@0.3.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":48866},"main":"dist/cjs/index.js","types":"dist/types/index.d.ts","module":"dist/esm/index.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"}},"gitHead":"07d24fb62dbcb1bf04f3cfba8583027eb1b1cef3","scripts":{"build":"bun run --parallel build:esm build:cjs build:types","prebuild":"rm -rf dist","build:cjs":"tsc -p tsconfig.build.cjs.json","build:esm":"tsc -p tsconfig.build.esm.json","postbuild":"echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json && echo '{\"type\":\"module\"}' > dist/esm/package.json","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.types.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:27cb4f36-ed3d-4fb8-9959-5340aeb54af0"}},"repository":{"url":"git+https://github.com/petarzarkov/arkv.git","type":"git","directory":"packages/nestjs-context-logger"},"_npmVersion":"11.10.1","description":"NestJS module for structured async-context logging powered by @arkv/logger","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@arkv/logger":"^0.7.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","reflect-metadata":"^0.2.2"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-context-logger_0.3.5_1785064895921_0.062170249226116026","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"@arkv/nestjs-context-logger","version":"0.3.6","keywords":["async-context","context","logger","logging","nestjs","structured","typescript"],"author":{"url":"https://github.com/petarzarkov","name":"Petar Zarkov","email":"pzarko1@gmail.com"},"license":"MIT","_id":"@arkv/nestjs-context-logger@0.3.6","maintainers":[{"name":"p.zarkov","email":"pzarko1@gmail.com"}],"homepage":"https://github.com/petarzarkov/arkv/tree/main/packages/nestjs-context-logger#readme","bugs":{"url":"https://github.com/petarzarkov/arkv/issues"},"dist":{"shasum":"ca9550c690143b57dc7c2ca12f78a26ebbfdbcdb","tarball":"https://registry.npmjs.org/@arkv/nestjs-context-logger/-/nestjs-context-logger-0.3.6.tgz","fileCount":19,"integrity":"sha512-HI2UDPPkOL0a0ur1egTKPimbKxsTN92XRQzrKfrAVlNtmcCTdoIK+08NrblTolOuLvrPf45BYw+1OzPdnE07NQ==","signatures":[{"sig":"MEUCIQDfXOMhM4ojfnspyyECtm883LkUInKVbOUNxhoXmSQ/5QIgUuUivfNGtInYsHx6rCY1IRPdt+Fh6OBZZAMbp9+Xwdo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arkv%2fnestjs-context-logger@0.3.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":48744},"main":"dist/cjs/index.js","types":"dist/types/index.d.ts","module":"dist/esm/index.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"}},"gitHead":"a229d13d332246317039420f61689cdcfbeef72e","scripts":{"build":"bun run --parallel build:esm build:cjs build:types","prebuild":"rm -rf dist","build:cjs":"tsc -p tsconfig.build.cjs.json","build:esm":"tsc -p tsconfig.build.esm.json","postbuild":"echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json && echo '{\"type\":\"module\"}' > dist/esm/package.json","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.types.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:27cb4f36-ed3d-4fb8-9959-5340aeb54af0"}},"repository":{"url":"git+https://github.com/petarzarkov/arkv.git","type":"git","directory":"packages/nestjs-context-logger"},"_npmVersion":"11.10.1","description":"NestJS module for structured async-context logging powered by @arkv/logger","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@arkv/logger":"^0.7.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","reflect-metadata":"^0.2.2"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-context-logger_0.3.6_1785066127368_0.8924984560204092","host":"s3://npm-registry-packages-npm-production"}},"0.3.7":{"name":"@arkv/nestjs-context-logger","version":"0.3.7","description":"NestJS module for structured async-context logging powered by @arkv/logger","keywords":["async-context","context","logger","logging","nestjs","structured","typescript"],"homepage":"https://github.com/petarzarkov/arkv/tree/main/packages/nestjs-context-logger#readme","license":"MIT","author":{"name":"Petar Zarkov","email":"pzarko1@gmail.com","url":"https://github.com/petarzarkov"},"repository":{"type":"git","url":"git+https://github.com/petarzarkov/arkv.git","directory":"packages/nestjs-context-logger"},"main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/types/index.d.ts","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"}},"publishConfig":{"access":"public"},"scripts":{"prebuild":"rm -rf dist","build:esm":"tsc -p tsconfig.build.esm.json","build:cjs":"tsc -p tsconfig.build.cjs.json","build:types":"tsc -p tsconfig.build.types.json","build":"bun run --parallel build:esm build:cjs build:types","postbuild":"echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json && echo '{\"type\":\"module\"}' > dist/esm/package.json","typecheck":"tsc --noEmit"},"dependencies":{"@arkv/logger":"^0.8.1"},"peerDependencies":{"@nestjs/common":"^11.0.0","@nestjs/core":"^11.0.0","reflect-metadata":"^0.2.2"},"gitHead":"48101ca3e2f49031188b33ea47b3d2fe26a76b5f","_id":"@arkv/nestjs-context-logger@0.3.7","bugs":{"url":"https://github.com/petarzarkov/arkv/issues"},"_nodeVersion":"22.23.1","_npmVersion":"11.10.1","dist":{"integrity":"sha512-sj/GN2BGto0IxqwaWfatJcRpGYIxkH03cLsV3eqlD9JamjItnIl+lfaFCNpN4NrWlad9iZ+KzB0qtxaUZHqf5A==","shasum":"9c1712e5b66fa9f11d9f2dc19e3f6b3cff533b21","tarball":"https://registry.npmjs.org/@arkv/nestjs-context-logger/-/nestjs-context-logger-0.3.7.tgz","fileCount":19,"unpackedSize":55380,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arkv%2fnestjs-context-logger@0.3.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDw8hLYnRzglaNAKfvimAB7W/nn6S/dxEGOO6IyRrBWUQIgaKpmyitcjCHoz8ojKNnMD0ypTTSLi089LEQoXs8wbps="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:27cb4f36-ed3d-4fb8-9959-5340aeb54af0"}},"directories":{},"maintainers":[{"name":"p.zarkov","email":"pzarko1@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nestjs-context-logger_0.3.7_1785574015611_0.28016048942891825"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-08T11:14:03.966Z","modified":"2026-08-01T08:46:56.160Z","0.2.0":"2026-03-08T11:14:04.182Z","0.2.1":"2026-03-12T07:48:33.130Z","0.2.2":"2026-03-12T08:27:50.160Z","0.2.3":"2026-03-12T13:58:39.569Z","0.3.0":"2026-04-13T10:50:59.535Z","0.3.1":"2026-05-05T15:07:14.553Z","0.3.2":"2026-05-07T08:57:22.501Z","0.3.3":"2026-06-28T10:20:28.970Z","0.3.4":"2026-06-28T10:43:10.756Z","0.3.5":"2026-07-26T11:21:36.071Z","0.3.6":"2026-07-26T11:42:07.500Z","0.3.7":"2026-08-01T08:46:55.777Z"},"bugs":{"url":"https://github.com/petarzarkov/arkv/issues"},"author":{"name":"Petar Zarkov","email":"pzarko1@gmail.com","url":"https://github.com/petarzarkov"},"license":"MIT","homepage":"https://github.com/petarzarkov/arkv/tree/main/packages/nestjs-context-logger#readme","keywords":["async-context","context","logger","logging","nestjs","structured","typescript"],"repository":{"type":"git","url":"git+https://github.com/petarzarkov/arkv.git","directory":"packages/nestjs-context-logger"},"description":"NestJS module for structured async-context logging powered by @arkv/logger","maintainers":[{"name":"p.zarkov","email":"pzarko1@gmail.com"}],"readme":"# @arkv/nestjs-context-logger\n\nNestJS module for structured, async-context-aware logging powered by [`@arkv/logger`](../logger).\n\nProvides drop-in replacements for the NestJS built-in logger with:\n\n- **6 log levels**: `verbose`, `debug`, `info`, `warn`, `error`, `fatal`\n- **Async request context** — `requestId`, `userId`, `flow`, and custom fields automatically appear in every log entry within an async scope\n- **Sensitive field masking** — passwords, tokens, API keys redacted by default\n- **Recursive sanitization** — handles `Error`, `Date`, `BigInt`, `Symbol`, `FormData`, `File`, `Blob`, `ArrayBuffer`, circular references, and more\n- **Colored JSON** in development, **plain JSON** in production\n- **Event filtering** — suppress noisy health-check routes\n- **Array truncation** — configurable `maxArrayLength`\n- **`forRoot` / `forRootAsync`** — all options optional with sensible defaults\n\n---\n\n## Installation\n\n```sh\nbun add @arkv/nestjs-context-logger\n# or\nnpm install @arkv/nestjs-context-logger\n```\n\nPeer dependencies (install separately if not already present):\n\n```sh\nbun add @nestjs/common @nestjs/core reflect-metadata\n```\n\n---\n\n## Quick Start\n\nRegister the module once at the application root. All configuration is optional.\n\n```ts\n// app.module.ts\nimport { Module } from '@nestjs/common';\nimport { NestJsContextLoggerModule } from '@arkv/nestjs-context-logger';\n\n@Module({\n  imports: [\n    NestJsContextLoggerModule.forRoot(),\n  ],\n})\nexport class AppModule {}\n```\n\n```ts\n// main.ts\nimport { NestFactory } from '@nestjs/core';\nimport { AppModule } from './app.module';\nimport { ContextLogger } from '@arkv/nestjs-context-logger';\n\nasync function bootstrap() {\n  const app = await NestFactory.create(AppModule, {\n    bufferLogs: true,\n  });\n  // Replace NestJS built-in logger\n  app.useLogger(app.get(ContextLogger));\n  await app.listen(3000);\n}\nbootstrap();\n```\n\n---\n\n## Configuration\n\nAll options are optional. Pass any subset to `forRoot()`.\n\n| Option | Type | Default | Description |\n|---|---|---|---|\n| `name` | `string` | — | App name. Combined with `version` + `env` to form the `appId` log field. |\n| `version` | `string` | — | App version (e.g. `'1.2.3'`). |\n| `env` | `string` | — | Environment label (e.g. `'production'`). |\n| `level` | `LogLevel` | `'debug'` | Minimum level to emit. Messages below this level are dropped. |\n| `isDevelopment` | `boolean` | `NODE_ENV !== 'production'` | Colored JSON output when `true`, plain JSON when `false`. |\n| `maskFields` | `string[]` | `[]` | Additional field names to mask. Merged with the built-in defaults. |\n| `filterEvents` | `string[]` | `[]` | Context `event` values to suppress (e.g. `['/health']`). |\n| `transports` | `Transport[]` | one console transport | Replaces the default; see File output above |\n| `bindings` | `Record<string, unknown>` | — | Static fields merged into every entry |\n| `maxArrayLength` | `number` | `100` | Arrays longer than this are truncated with a `[TRUNCATED: N more items]` entry. |\n| `isGlobal` | `boolean` | `true` | Register as a NestJS global module. |\n\n### Example with explicit config\n\n```ts\nimport { LogLevel } from '@arkv/nestjs-context-logger';\n\nNestJsContextLoggerModule.forRoot({\n  name: 'my-api',\n  version: '2.0.0',\n  env: 'production',\n  level: LogLevel.WARN,\n  isDevelopment: false,\n  maskFields: ['ssn', 'creditCard'],\n  filterEvents: ['/health', '/metrics', '/ready'],\n  maxArrayLength: 10,\n  isGlobal: true,\n})\n```\n\n---\n\n## forRootAsync\n\nUse `forRootAsync` when config values come from an async source such as NestJS `ConfigService`, a database, or secrets manager.\n\n### With `useFactory`\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { ConfigModule, ConfigService } from '@nestjs/config';\nimport {\n  NestJsContextLoggerModule,\n  LogLevel,\n} from '@arkv/nestjs-context-logger';\n\n@Module({\n  imports: [\n    ConfigModule.forRoot(),\n    NestJsContextLoggerModule.forRootAsync({\n      imports: [ConfigModule],\n      inject: [ConfigService],\n      useFactory: (cfg: ConfigService) => ({\n        name: cfg.get<string>('APP_NAME'),\n        version: cfg.get<string>('APP_VERSION'),\n        env: cfg.get<string>('NODE_ENV'),\n        level:\n          cfg.get<LogLevel>('LOG_LEVEL')\n          ?? LogLevel.DEBUG,\n        maskFields: cfg\n          .get<string>('LOG_MASK_FIELDS', '')\n          .split(',')\n          .filter(Boolean),\n        filterEvents: ['/health'],\n        maxArrayLength: 20,\n      }),\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\n### With `useClass`\n\n```ts\nimport { Injectable } from '@nestjs/common';\nimport type {\n  LoggerModuleConfig,\n  LoggerModuleOptionsFactory,\n} from '@arkv/nestjs-context-logger';\n\n@Injectable()\nexport class LoggerConfigFactory\n  implements LoggerModuleOptionsFactory\n{\n  createLoggerOptions(): LoggerModuleConfig {\n    return {\n      name: process.env.APP_NAME,\n      env: process.env.NODE_ENV,\n      level: LogLevel.DEBUG,\n    };\n  }\n}\n\n// In your module:\nNestJsContextLoggerModule.forRootAsync({\n  useClass: LoggerConfigFactory,\n})\n```\n\n### With `useExisting`\n\n```ts\nNestJsContextLoggerModule.forRootAsync({\n  imports: [SharedModule],\n  useExisting: LoggerConfigFactory,\n})\n```\n\n---\n\n## Request Context Middleware\n\nWire `ContextService.runWithContext` in a NestJS middleware to attach request-scoped data. Every log call within the same async scope automatically includes this data.\n\n```ts\n// context.middleware.ts\nimport { Injectable, NestMiddleware } from '@nestjs/common';\nimport type { NextFunction, Request, Response } from 'express';\nimport { ContextService } from '@arkv/nestjs-context-logger';\n\n@Injectable()\nexport class ContextMiddleware implements NestMiddleware {\n  constructor(\n    private readonly ctx: ContextService,\n  ) {}\n\n  use(\n    req: Request,\n    _res: Response,\n    next: NextFunction,\n  ): void {\n    this.ctx.runWithContext(\n      {\n        requestId:\n          (req.headers['x-request-id'] as string)\n          ?? crypto.randomUUID(),\n        userId: req.user?.id,\n        event: req.path,\n        method: req.method,\n        flow: 'http',\n      },\n      next,\n    );\n  }\n}\n```\n\nRegister it in your module:\n\n```ts\n// app.module.ts\nimport {\n  MiddlewareConsumer,\n  Module,\n  NestModule,\n} from '@nestjs/common';\nimport { ContextMiddleware } from './context.middleware';\n\n@Module({\n  imports: [NestJsContextLoggerModule.forRoot()],\n})\nexport class AppModule implements NestModule {\n  configure(consumer: MiddlewareConsumer): void {\n    consumer.apply(ContextMiddleware).forRoutes('*');\n  }\n}\n```\n\nEvery log entry produced within a request will now include `requestId`, `userId`, `event`, `method`, and `flow` fields automatically.\n\n---\n\n## Injecting the Logger\n\nInject `ContextLogger` anywhere in your application:\n\n```ts\nimport { Injectable } from '@nestjs/common';\nimport { ContextLogger } from '@arkv/nestjs-context-logger';\n\n@Injectable()\nexport class UserService {\n  constructor(\n    private readonly logger: ContextLogger,\n  ) {}\n\n  async findUser(id: string) {\n    // String message\n    this.logger.info('Finding user');\n\n    // Object — logged as structured data\n    this.logger.debug({ action: 'db.query', table: 'users', id });\n\n    try {\n      const user = await db.findById(id);\n\n      this.logger.info('User found', { userId: user.id });\n\n      return user;\n    } catch (err) {\n      // Error instance — stack trace included\n      this.logger.error(err instanceof Error\n        ? err\n        : new Error('Unknown error'));\n    }\n  }\n}\n```\n\n### `info` and the deprecated `log`\n\nThe primary method is **`info`**. `log` remains as a deprecated alias that\ndelegates to it — it cannot be removed, because NestJS's `LoggerService`\ninterface mandates a `log` method and the framework calls it directly when this\nlogger is installed via `app.useLogger()`. Existing `logger.log(...)` call sites\nkeep working unchanged.\n\nBoth emit **`level: 'info'`**. `@arkv/logger` does not use NestJS's `'log'`\nlevel name at all: the constant is `LogLevel.INFO` and there is no\n`LogLevel.LOG`. `log()` is only a method name kept for interface compatibility.\n\n```ts\nthis.logger.info('Finding user');   // preferred\nthis.logger.log('Finding user');    // still works, marked @deprecated\n```\n\n### All method signatures\n\nEvery log method accepts three call patterns, each with optional extra params:\n\n```ts\n// 1. String message (with optional extra params)\nlogger.info('message');\nlogger.info('message', { extra: 'data' });\nlogger.info('message', new Error('reason'));\nlogger.info('message', { err: new Error('reason'), extra: 1 });\n\n// 2. Plain object (logged with key 'Object logged')\nlogger.info({ action: 'create', resource: 'user' });\nlogger.info({ action: 'create' }, { durationMs: 12 });\n\n// 3. Error instance — extra fields are allowed alongside it\nlogger.error(new Error('Something failed'));\nlogger.warn(new Error('Retrying'), { attempt: 3 });\n\n// Same patterns apply to:\n// logger.verbose(), logger.debug(), logger.warn(),\n// logger.error(), logger.fatal()\n```\n\n### Flushing and shutdown\n\n`ContextLogger` implements `OnApplicationShutdown` and flushes its transports\nthere. It flushes rather than closes, because NestJS keeps logging after the\nshutdown hooks run and a closed transport would drop those last lines; the file\ntransport's own `process.on('exit')` hook takes the final flush.\n\n`flush()` and `close()` are also available directly. Both are synchronous.\n\n### File output\n\n`@arkv/logger`'s transports are configured straight through the module options:\n\n```ts\nimport { FileTransport } from '@arkv/logger';\n\nNestJsContextLoggerModule.forRoot({\n  name: 'my-api',\n  transports: [\n    new FileTransport({\n      path: '/var/log/my-api/app.log',\n      maxSize: 10 * 1024 * 1024,\n      maxFiles: 5,\n    }),\n  ],\n});\n```\n\nSupplying `transports` replaces the default console transport, so the example\nabove writes to the file only. See the\n[`@arkv/logger` README](../logger/README.md#transports) for rotation, buffering,\nflush-on-exit and backpressure.\n\n### Error handling patterns\n\n```ts\n// Direct Error — message + stack extracted\nlogger.error(new Error('DB connection lost'));\n\n// Nested { error: Error } — error extracted, rest merged\nlogger.warn('Retry failed', {\n  error: new Error('timeout'),\n  attempt: 3,\n  maxRetries: 5,\n});\n\n// Nested { err: Error } — same behavior\nlogger.error('Handler threw', {\n  err: new Error('validation error'),\n  input: payload,\n});\n\n// String on error-level methods — wrapped in Error\nlogger.error('message', 'Something went wrong');\nlogger.warn('Degraded mode', 'circuit open');\n\n// Object with nested Error anywhere — auto-detected\nlogger.error({\n  upstream: { response: { cause: new Error('503') } },\n});\n```\n\n---\n\n## NestJS Built-in Logger Replacement\n\nPass `ContextLogger` to `app.useLogger()` to capture all NestJS framework logs (bootstrapping, route registration, etc.):\n\n```ts\n// main.ts\nimport { NestFactory } from '@nestjs/core';\nimport { AppModule } from './app.module';\nimport { ContextLogger } from '@arkv/nestjs-context-logger';\n\nasync function bootstrap() {\n  // bufferLogs: true holds logs until useLogger() is called\n  const app = await NestFactory.create(AppModule, {\n    bufferLogs: true,\n  });\n\n  app.useLogger(app.get(ContextLogger));\n  await app.listen(3000);\n}\nbootstrap();\n```\n\n---\n\n## Log Levels\n\nLevels are ordered from lowest to highest severity. Only messages at or above the configured `level` are emitted.\n\n| Level | Value | Use Case |\n|---|---|---|\n| `verbose` | lowest | Fine-grained diagnostic traces |\n| `debug` | | Development debugging |\n| `info` | | General operational events. NestJS calls this level `log` |\n| `warn` | | Unexpected but recoverable situations |\n| `error` | | Failures that need attention |\n| `fatal` | highest | Application cannot continue |\n\n```ts\nimport { LogLevel } from '@arkv/nestjs-context-logger';\n\nNestJsContextLoggerModule.forRoot({\n  level: LogLevel.WARN, // emits warn, error, fatal only\n})\n```\n\n---\n\n## Sensitive Field Masking\n\nThe following fields are masked by default (case-insensitive substring match):\n\n```\npassword  secret  token  authorization  cookie\napiKey    apiSecret  apiPass\n```\n\nMasked fields appear as `[MASKED]` in output. Masking is applied recursively throughout nested objects and arrays.\n\n### Add custom mask fields\n\n```ts\nNestJsContextLoggerModule.forRoot({\n  maskFields: ['ssn', 'creditCard', 'cvv'],\n})\n```\n\nCustom fields are **merged** with the defaults — existing defaults are never removed.\n\n---\n\n## Event Filtering\n\nUse `filterEvents` to silence specific routes (e.g. health checks) from the log output. The filter matches against the `event` field in the async context, which is typically the request path set by your middleware.\n\n```ts\nNestJsContextLoggerModule.forRoot({\n  filterEvents: [\n    '/health',\n    '/metrics',\n    '/api/service/up',\n    '/ready',\n  ],\n})\n```\n\nRequests to these paths will produce no log output regardless of log level.\n\n---\n\n## Development vs Production Output\n\n### Development (colored JSON)\n\n```\n{\"level\": \"info\",\"timestamp\": \"2026-03-08T10:00:00.000Z\",\"pid\": 12345,\"message\": \"User found\",\"appId\": \"my-api-1.0.0-local\",\"requestId\": \"abc-123\",\"userId\": \"u_456\",\"event\": \"/api/users/u_456\",\"method\": \"GET\",\"flow\": \"http\"}\n```\nFields are colored by type: level in green-on-black, errors in red, timestamps in magenta, request IDs in bright green, etc.\n\n### Production (plain JSON)\n\n```json\n{\"level\":\"info\",\"timestamp\":\"2026-03-08T10:00:00.000Z\",\"pid\":12345,\"message\":\"User found\",\"appId\":\"my-api-1.0.0-production\",\"requestId\":\"abc-123\",\"userId\":\"u_456\",\"event\":\"/api/users/u_456\",\"method\":\"GET\",\"flow\":\"http\"}\n```\n\n`isDevelopment` is automatically `false` when `NODE_ENV=production`. Override explicitly if needed:\n\n```ts\nNestJsContextLoggerModule.forRoot({\n  isDevelopment: process.env.NODE_ENV !== 'production',\n})\n```\n\n---\n\n## Log Entry Fields\n\nEvery log entry includes these core fields:\n\n| Field | Source | Description |\n|---|---|---|\n| `level` | log call | Log level string |\n| `timestamp` | auto | ISO 8601 UTC timestamp |\n| `pid` | auto | Process ID |\n| `message` | log call | Primary message string |\n| `appId` | config | `${name}-${version}-${env}` (only when all three are set) |\n| `requestId` | context | From `ContextService.runWithContext` |\n| `userId` | context | From `ContextService.runWithContext` |\n| `orgId` | context | From `ContextService.runWithContext` |\n| `event` | context | Request path / event name |\n| `method` | context | HTTP method or handler name |\n| `flow` | context | Transport type (`http`, `rpc`, `ws`, etc.) |\n| `context` | context | Module/class name (set via `setContext`) |\n| `error` | log call | Serialized error with `name`, `message`, `stack` |\n\nAdditional fields from `extra` params are spread directly into the entry, except\nthat `level`, `timestamp`, `pid`, `message`, `appId` and `error` are reserved:\nthe entry's own value wins and the caller's is preserved under\n`reservedFieldConflicts` rather than silently overwriting it.\n\n`null` values are kept (they mean \"empty\"); `undefined` values are dropped\n(JSON has no representation for them).\n\n---\n\n## AsyncContext Reference\n\nThe shape of the async context stored and propagated by `ContextService`:\n\n```ts\ninterface AsyncContext {\n  requestId?: string;\n  userId?: string;\n  orgId?: string;\n  method?: string;\n  event?: string;\n  context?: string;\n  flow?: string;\n  [key: string]: unknown; // any custom fields\n}\n```\n\nUpdate the context from within an async scope:\n\n```ts\nthis.contextService.updateContext({ userId: user.id });\n```\n\n---\n\n## API Reference\n\n### `NestJsContextLoggerModule`\n\n| Method | Description |\n|---|---|\n| `.forRoot(config?)` | Register with static config (all optional) |\n| `.forRootAsync(options)` | Register with async config |\n\n### `ContextLogger`\n\nImplements NestJS `LoggerService`.\n\n| Member | Type | Description |\n|---|---|---|\n| `logLevel` | `LogLevel` (getter) | Current configured log level |\n| `setContext(name)` | `void` | Write `context` to async store |\n| `setLogLevels(levels)` | `void` | No-op (compat shim; takes NestJS's own level names) |\n| `info(...)` | `void` | Log at `info` level |\n| `log(...)` | `void` | **Deprecated** alias for `info`; required by `LoggerService` |\n| `debug(...)` | `void` | Log at `debug` level |\n| `verbose(...)` | `void` | Log at `verbose` level |\n| `warn(...)` | `void` | Log at `warn` level |\n| `error(...)` | `void` | Log at `error` level |\n| `fatal(...)` | `void` | Log at `fatal` level |\n| `flush()` | `void` | Push every transport's buffer |\n| `close()` | `void` | Flush, then release transport resources |\n| `onApplicationShutdown()` | `void` | NestJS hook; flushes |\n\n### `ContextService`\n\nExtends `ContextStore` from `@arkv/logger`.\n\n| Method | Description |\n|---|---|\n| `getContext()` | Return a copy of the current async context |\n| `updateContext(partial)` | Merge fields into the current async context |\n| `runWithContext(ctx, fn, opts?)` | Run `fn` within a new async context scope |\n\nNested `runWithContext` calls **merge**: an inner scope inherits the outer's\nfields and overrides only the keys it names, so a job started inside a request\nkeeps that request's `requestId`. Pass `{ inherit: false }` for a detached scope.\n\n`ContextService` is a NestJS provider, so within one application there is one\ninstance and one store. The underlying `ContextStore` is per-instance, not\nper-process — two NestJS applications in the same process each get their own.\n\n### `LOGGER_MODULE_OPTIONS`\n\nSymbol DI token used to inject the config. Useful if you need to read the resolved config elsewhere:\n\n```ts\nimport { Inject, Injectable } from '@nestjs/common';\nimport {\n  LOGGER_MODULE_OPTIONS,\n  type LoggerModuleConfig,\n} from '@arkv/nestjs-context-logger';\n\n@Injectable()\nexport class MyService {\n  constructor(\n    @Inject(LOGGER_MODULE_OPTIONS)\n    private readonly config: LoggerModuleConfig,\n  ) {}\n}\n```\n\n---\n\n## License\n\nMIT — see [LICENSE](../../LICENSE)\n","readmeFilename":"README.md"}