{"_id":"@crimsonsunset/smart-logger","_rev":"8-774002179210b32ae126b93db994a95b","name":"@crimsonsunset/smart-logger","dist-tags":{"latest":"1.0.7"},"versions":{"1.0.0":{"name":"@crimsonsunset/smart-logger","version":"1.0.0","keywords":["logging","pino","browser","cli","server","chrome-extension","adaptive","smart-logger","environment-detection","file-overrides"],"author":{"name":"Joe Sangiorgio","email":"jsangio1@gmail.com"},"license":"ISC","_id":"@crimsonsunset/smart-logger@1.0.0","maintainers":[{"name":"crimsonsunset","email":"jsangio1@gmail.com"}],"homepage":"https://github.com/crimsonsunset/jsg-logger#readme","bugs":{"url":"https://github.com/crimsonsunset/jsg-logger/issues"},"dist":{"shasum":"f3f7dec5937f0d17cdb17567cb5a7e949ffe6885","tarball":"https://registry.npmjs.org/@crimsonsunset/smart-logger/-/smart-logger-1.0.0.tgz","fileCount":12,"integrity":"sha512-Ll2JVFFdB6dwBOU6h8rq+3G+G6H0vayV2dwNPYshjR2Jp/W5Dfs6I2tJxhRkFkmK0BcW/V8J/3yzSPyEWD8CLQ==","signatures":[{"sig":"MEUCIQDeHqIGU6XpPtDUcLUve03ddF9Eb3qf53V9kWD4gp9y9AIgZQzP6E9P1g6hMbNnvU3PNAKzFEmCv7F+h2hA/3nG2hQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64985},"main":"index.js","type":"module","exports":{".":"./index.js","./utils":"./utils/environment-detector.js","./config":"./config/config-manager.js","./stores":"./stores/log-store.js","./examples/*":"./examples/*","./config/default":"./config/default-config.json","./config/manager":"./config/config-manager.js","./config/schemes":"./config/component-schemes.js","./formatters/cli":"./formatters/cli-formatter.js","./stores/log-store":"./stores/log-store.js","./formatters/server":"./formatters/server-formatter.js","./utils/environment":"./utils/environment-detector.js","./formatters/browser":"./formatters/browser-formatter.js"},"gitHead":"ccc9bc66feecf0220f5a9b3269292dfae3a004ff","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"crimsonsunset","email":"jsangio1@gmail.com"},"repository":{"url":"git+https://github.com/crimsonsunset/jsg-logger.git","type":"git"},"_npmVersion":"10.8.2","description":"Smart Adaptive Logger with multi-environment support, file-level overrides, and beautiful console formatting","directories":{},"_nodeVersion":"22.7.0","dependencies":{"pino":"^9.7.0"},"_hasShrinkwrap":false,"devDependencies":{"pino-colada":"^2.2.2"},"peerDependencies":{"pino-colada":"^2.2.2"},"_npmOperationalInternal":{"tmp":"tmp/smart-logger_1.0.0_1754522474212_0.626983825956124","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@crimsonsunset/smart-logger","version":"1.0.1","keywords":["logging","pino","browser","cli","server","chrome-extension","adaptive","smart-logger","environment-detection","file-overrides"],"author":{"name":"Joe Sangiorgio","email":"jsangio1@gmail.com"},"license":"ISC","_id":"@crimsonsunset/smart-logger@1.0.1","maintainers":[{"name":"crimsonsunset","email":"jsangio1@gmail.com"}],"homepage":"https://github.com/crimsonsunset/jsg-logger#readme","bugs":{"url":"https://github.com/crimsonsunset/jsg-logger/issues"},"dist":{"shasum":"1761036354ceeead70c85796d4dbed27f7adb84e","tarball":"https://registry.npmjs.org/@crimsonsunset/smart-logger/-/smart-logger-1.0.1.tgz","fileCount":12,"integrity":"sha512-YK8RIno/qqENn7B5fyGQhGYmAC5Kg+7g+uiVnk11L0OAMBwX2aCp6evwO7KL/p//mKuFaumP2+x3ZRGi/vfCwg==","signatures":[{"sig":"MEQCIFSJHgV7LQmYQFwv5HCqXAXX8sf3ZVr7o/eABnq/7mYkAiAq+2i/v/8mhLzXuzB/4214UldwkORynmT5ig0Dx3sVnw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64955},"main":"index.js","type":"module","exports":{".":"./index.js","./utils":"./utils/environment-detector.js","./config":"./config/config-manager.js","./stores":"./stores/log-store.js","./examples/*":"./examples/*","./config/default":"./config/default-config.json","./config/manager":"./config/config-manager.js","./config/schemes":"./config/component-schemes.js","./formatters/cli":"./formatters/cli-formatter.js","./stores/log-store":"./stores/log-store.js","./formatters/server":"./formatters/server-formatter.js","./utils/environment":"./utils/environment-detector.js","./formatters/browser":"./formatters/browser-formatter.js"},"gitHead":"ccc9bc66feecf0220f5a9b3269292dfae3a004ff","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"crimsonsunset","email":"jsangio1@gmail.com"},"repository":{"url":"git+https://github.com/crimsonsunset/jsg-logger.git","type":"git"},"_npmVersion":"10.8.2","description":"Smart Adaptive Logger with multi-environment support, file-level overrides, and beautiful console formatting","directories":{},"_nodeVersion":"22.7.0","dependencies":{"pino":"^9.7.0"},"_hasShrinkwrap":false,"devDependencies":{"pino-colada":"^2.2.2"},"peerDependencies":{"pino-colada":"^2.2.2"},"_npmOperationalInternal":{"tmp":"tmp/smart-logger_1.0.1_1754522902713_0.518623587551932","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@crimsonsunset/smart-logger","version":"1.0.2","keywords":["logging","pino","browser","cli","server","chrome-extension","adaptive","smart-logger","environment-detection","file-overrides"],"author":{"name":"Joe Sangiorgio","email":"jsangio1@gmail.com"},"license":"ISC","_id":"@crimsonsunset/smart-logger@1.0.2","maintainers":[{"name":"crimsonsunset","email":"jsangio1@gmail.com"}],"homepage":"https://github.com/crimsonsunset/jsg-logger#readme","bugs":{"url":"https://github.com/crimsonsunset/jsg-logger/issues"},"dist":{"shasum":"5dc2474d1eac2083602ec86b4d1d3b36d9412c97","tarball":"https://registry.npmjs.org/@crimsonsunset/smart-logger/-/smart-logger-1.0.2.tgz","fileCount":12,"integrity":"sha512-jfzeVvr1txCJf7aqKb8Bl9xvsjrfzZQ0H0DKgsUSQPvOWFOjTyOgq2T1e0YTK24EpXBNfQbhYIOYPM0MHQ6/pA==","signatures":[{"sig":"MEUCIQDh7sUwTn5zGgBDw5uU1Gf+qJPJd7eHhM1UR+iL3DqI0gIgZYYotwTVButluvAWu+QlX8bA43niikzMHuBDBiIJDgw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64969},"main":"index.js","type":"module","exports":{".":"./index.js","./utils":"./utils/environment-detector.js","./config":"./config/config-manager.js","./stores":"./stores/log-store.js","./examples/*":"./examples/*","./config/default":"./config/default-config.json","./config/manager":"./config/config-manager.js","./config/schemes":"./config/component-schemes.js","./formatters/cli":"./formatters/cli-formatter.js","./stores/log-store":"./stores/log-store.js","./formatters/server":"./formatters/server-formatter.js","./utils/environment":"./utils/environment-detector.js","./formatters/browser":"./formatters/browser-formatter.js"},"gitHead":"a326694f405c5b7ed5dd654af5def8148bb2dcf8","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"crimsonsunset","email":"jsangio1@gmail.com"},"repository":{"url":"git+https://github.com/crimsonsunset/jsg-logger.git","type":"git"},"_npmVersion":"10.8.2","description":"Smart Adaptive Logger with multi-environment support, file-level overrides, and beautiful console formatting","directories":{},"_nodeVersion":"22.7.0","dependencies":{"pino":"^9.7.0"},"_hasShrinkwrap":false,"devDependencies":{"pino-colada":"^2.2.2"},"peerDependencies":{"pino-colada":"^2.2.2"},"_npmOperationalInternal":{"tmp":"tmp/smart-logger_1.0.2_1754522976890_0.3629870603129799","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@crimsonsunset/smart-logger","version":"1.0.3","keywords":["logging","pino","browser","cli","server","chrome-extension","adaptive","smart-logger","environment-detection","file-overrides"],"author":{"name":"Joe Sangiorgio","email":"jsangio1@gmail.com"},"license":"ISC","_id":"@crimsonsunset/smart-logger@1.0.3","maintainers":[{"name":"crimsonsunset","email":"jsangio1@gmail.com"}],"homepage":"https://github.com/crimsonsunset/jsg-logger#readme","bugs":{"url":"https://github.com/crimsonsunset/jsg-logger/issues"},"dist":{"shasum":"70216a47bd62ffeab763915c984c3d05f53f32e9","tarball":"https://registry.npmjs.org/@crimsonsunset/smart-logger/-/smart-logger-1.0.3.tgz","fileCount":12,"integrity":"sha512-G2w7TPk8vrKCmXvlOl1CCuhW4UXnEEMAa3Xf0bmznAXSNxtxVkCPAC4OUPPeKetaAIuufzmQAhS3rT8yNTfaKQ==","signatures":[{"sig":"MEYCIQC2iYCBsrhpoMCdugkNM9aq61u9nM4XloHKxO/9WyLyiQIhAPdZ2q7dWiPmKk/Oomwy1JIjGQooahmptyV1PVRLpcUz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64977},"main":"index.js","type":"module","exports":{".":"./index.js","./utils":"./utils/environment-detector.js","./config":"./config/config-manager.js","./stores":"./stores/log-store.js","./examples/*":"./examples/*","./config/default":"./config/default-config.json","./config/manager":"./config/config-manager.js","./config/schemes":"./config/component-schemes.js","./formatters/cli":"./formatters/cli-formatter.js","./stores/log-store":"./stores/log-store.js","./formatters/server":"./formatters/server-formatter.js","./utils/environment":"./utils/environment-detector.js","./formatters/browser":"./formatters/browser-formatter.js"},"gitHead":"2acfd7f385df346f8731319d6eba157205a4c2d8","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"crimsonsunset","email":"jsangio1@gmail.com"},"repository":{"url":"git+https://github.com/crimsonsunset/jsg-logger.git","type":"git"},"_npmVersion":"10.8.2","description":"Smart Adaptive Logger with multi-environment support, file-level overrides, and beautiful console formatting","directories":{},"_nodeVersion":"22.7.0","dependencies":{"pino":"^9.7.0"},"_hasShrinkwrap":false,"devDependencies":{"pino-colada":"^2.2.2"},"peerDependencies":{"pino-colada":"^2.2.2"},"_npmOperationalInternal":{"tmp":"tmp/smart-logger_1.0.3_1754523043997_0.6717918889443595","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@crimsonsunset/smart-logger","version":"1.0.4","keywords":["logging","pino","browser","cli","server","chrome-extension","adaptive","smart-logger","environment-detection","file-overrides"],"author":{"name":"Joe Sangiorgio","email":"jsangio1@gmail.com"},"license":"ISC","_id":"@crimsonsunset/smart-logger@1.0.4","maintainers":[{"name":"crimsonsunset","email":"jsangio1@gmail.com"}],"homepage":"https://github.com/crimsonsunset/jsg-logger#readme","bugs":{"url":"https://github.com/crimsonsunset/jsg-logger/issues"},"dist":{"shasum":"be16eae34b4f6cdaa5e3a2e0d05216015b899b00","tarball":"https://registry.npmjs.org/@crimsonsunset/smart-logger/-/smart-logger-1.0.4.tgz","fileCount":12,"integrity":"sha512-ZdUOup2thZRkTBnu3l0URGh0OUOu+/ilF6c2eUJOATOh+eMSggV9MpqBenLQU3i1aV9fNj/RuxLZCbrcA6KLXQ==","signatures":[{"sig":"MEUCIQDGFATUCXFmjDVNWORS8qhQ0KztAUWl+krur+8pOKE8HQIgU9ACleSr49t4WFviYipDVqotppCipU1xjL2kn0ZXfEY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64978},"main":"index.js","type":"module","exports":{".":"./index.js","./utils":"./utils/environment-detector.js","./config":"./config/config-manager.js","./stores":"./stores/log-store.js","./examples/*":"./examples/*","./config/default":"./config/default-config.json","./config/manager":"./config/config-manager.js","./config/schemes":"./config/component-schemes.js","./formatters/cli":"./formatters/cli-formatter.js","./stores/log-store":"./stores/log-store.js","./formatters/server":"./formatters/server-formatter.js","./utils/environment":"./utils/environment-detector.js","./formatters/browser":"./formatters/browser-formatter.js"},"gitHead":"2acfd7f385df346f8731319d6eba157205a4c2d8","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"crimsonsunset","email":"jsangio1@gmail.com"},"repository":{"url":"git+https://github.com/crimsonsunset/jsg-logger.git","type":"git"},"_npmVersion":"10.8.2","description":"Smart Adaptive Logger with multi-environment support, file-level overrides, and beautiful console formatting","directories":{},"_nodeVersion":"22.7.0","dependencies":{"pino":"^9.7.0"},"_hasShrinkwrap":false,"devDependencies":{"pino-colada":"^2.2.2"},"peerDependencies":{"pino-colada":"^2.2.2"},"_npmOperationalInternal":{"tmp":"tmp/smart-logger_1.0.4_1754523060430_0.8389951460638181","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@crimsonsunset/smart-logger","version":"1.0.5","keywords":["logging","pino","browser","cli","server","chrome-extension","adaptive","smart-logger","environment-detection","file-overrides"],"author":{"name":"Joe Sangiorgio","email":"jsangio1@gmail.com"},"license":"ISC","_id":"@crimsonsunset/smart-logger@1.0.5","maintainers":[{"name":"crimsonsunset","email":"jsangio1@gmail.com"}],"homepage":"https://github.com/crimsonsunset/jsg-logger#readme","bugs":{"url":"https://github.com/crimsonsunset/jsg-logger/issues"},"dist":{"shasum":"88b0cfe691c88100342ed8b32a8fdd6493cfdae0","tarball":"https://registry.npmjs.org/@crimsonsunset/smart-logger/-/smart-logger-1.0.5.tgz","fileCount":18,"integrity":"sha512-4NOuqfwVhNB2E4d9BWBE/dYKpJTFxeA/1UeJjhVw3ukPXyTTCIb8MiEaUUup/XNMofuzzRRV88hYho6+0UXu0w==","signatures":[{"sig":"MEQCIEBE2WgxYTeHwCLbtC0aEk3ml+tnEEIyPXojKfVLmDPHAiAfzJOCiC82d7USq5lqXsw6BmAaP/a99eCBvA81DYKExQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64502},"main":"index.js","type":"module","exports":{".":"./index.js","./utils":"./utils/environment-detector.js","./config":"./config/config-manager.js","./stores":"./stores/log-store.js","./examples/*":"./examples/*","./config/default":"./config/default-config.json","./config/manager":"./config/config-manager.js","./config/schemes":"./config/component-schemes.js","./formatters/cli":"./formatters/cli-formatter.js","./stores/log-store":"./stores/log-store.js","./formatters/server":"./formatters/server-formatter.js","./utils/environment":"./utils/environment-detector.js","./formatters/browser":"./formatters/browser-formatter.js"},"scripts":{"check":"npm run test && echo 'Package ready for publishing'","release":"npm run release:patch","release:major":"npm version major && npm publish --access public","release:minor":"npm version minor && npm publish --access public","release:patch":"npm version patch && npm publish --access public","publish:public":"npm publish --access public"},"_npmUser":{"name":"crimsonsunset","email":"jsangio1@gmail.com"},"repository":{"url":"git+https://github.com/crimsonsunset/jsg-logger.git","type":"git"},"description":"Smart Adaptive Logger with multi-environment support, file-level overrides, and beautiful console formatting","directories":{},"dependencies":{"pino":"^9.7.0"},"_hasShrinkwrap":false,"devDependencies":{"pino-colada":"^2.2.2"},"peerDependencies":{"pino-colada":"^2.2.2"},"_npmOperationalInternal":{"tmp":"tmp/smart-logger_1.0.5_1754534948001_0.5111438806459936","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@crimsonsunset/smart-logger","version":"1.0.6","keywords":["logging","pino","browser","cli","server","chrome-extension","adaptive","smart-logger","environment-detection","file-overrides"],"author":{"name":"Joe Sangiorgio","email":"jsangio1@gmail.com"},"license":"ISC","_id":"@crimsonsunset/smart-logger@1.0.6","maintainers":[{"name":"crimsonsunset","email":"jsangio1@gmail.com"}],"homepage":"https://github.com/crimsonsunset/jsg-logger#readme","bugs":{"url":"https://github.com/crimsonsunset/jsg-logger/issues"},"dist":{"shasum":"75ef487b9536516fbbd74394afe5ff5c3557c302","tarball":"https://registry.npmjs.org/@crimsonsunset/smart-logger/-/smart-logger-1.0.6.tgz","fileCount":12,"integrity":"sha512-bXCV8YU4EWMQIQYinQWugYR6WHgyQ6nJ67CKYR0t4kGv8XOJgPemq/Av8ew+TW5jFdqUrHmcNO4TELNti70n6g==","signatures":[{"sig":"MEQCIGzETmR2/+cy4fJQfh1HHjuc0esV9o7WfOYzygfq0S5cAiBUd+JatBP5DFgnp4eSG666a37sce8njcExh2pESQID0w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64502},"main":"index.js","type":"module","exports":{".":"./index.js","./utils":"./utils/environment-detector.js","./config":"./config/config-manager.js","./stores":"./stores/log-store.js","./examples/*":"./examples/*","./config/default":"./config/default-config.json","./config/manager":"./config/config-manager.js","./config/schemes":"./config/component-schemes.js","./formatters/cli":"./formatters/cli-formatter.js","./stores/log-store":"./stores/log-store.js","./formatters/server":"./formatters/server-formatter.js","./utils/environment":"./utils/environment-detector.js","./formatters/browser":"./formatters/browser-formatter.js"},"gitHead":"2a49217f15a0b411a136032f7774edc2f23961e9","scripts":{"check":"npm run test && echo 'Package ready for publishing'","release":"npm run release:patch","release:major":"npm version major && npm publish --access public","release:minor":"npm version minor && npm publish --access public","release:patch":"npm version patch && npm publish --access public","publish:public":"npm publish --access public"},"_npmUser":{"name":"crimsonsunset","email":"jsangio1@gmail.com"},"repository":{"url":"git+https://github.com/crimsonsunset/jsg-logger.git","type":"git"},"_npmVersion":"10.8.2","description":"Smart Adaptive Logger with multi-environment support, file-level overrides, and beautiful console formatting","directories":{},"_nodeVersion":"22.7.0","dependencies":{"pino":"^9.7.0"},"_hasShrinkwrap":false,"devDependencies":{"pino-colada":"^2.2.2"},"peerDependencies":{"pino-colada":"^2.2.2"},"_npmOperationalInternal":{"tmp":"tmp/smart-logger_1.0.6_1754535001271_0.18981897686888582","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@crimsonsunset/smart-logger","version":"1.0.7","type":"module","description":"Smart Adaptive Logger with multi-environment support, file-level overrides, and beautiful console formatting","main":"index.js","keywords":["logging","pino","browser","cli","server","chrome-extension","adaptive","smart-logger","environment-detection","file-overrides"],"author":{"name":"Joe Sangiorgio","email":"jsangio1@gmail.com"},"license":"ISC","repository":{"type":"git","url":"git+https://github.com/crimsonsunset/jsg-logger.git"},"bugs":{"url":"https://github.com/crimsonsunset/jsg-logger/issues"},"homepage":"https://github.com/crimsonsunset/jsg-logger#readme","dependencies":{"pino":"^9.7.0"},"devDependencies":{"pino-colada":"^2.2.2"},"peerDependencies":{"pino-colada":"^2.2.2"},"exports":{".":"./index.js","./config":"./config/config-manager.js","./config/manager":"./config/config-manager.js","./config/schemes":"./config/component-schemes.js","./config/default":"./config/default-config.json","./formatters/browser":"./formatters/browser-formatter.js","./formatters/cli":"./formatters/cli-formatter.js","./formatters/server":"./formatters/server-formatter.js","./stores":"./stores/log-store.js","./stores/log-store":"./stores/log-store.js","./utils":"./utils/environment-detector.js","./utils/environment":"./utils/environment-detector.js","./examples/*":"./examples/*"},"scripts":{"release:patch":"npm version patch && npm publish --access public","release:minor":"npm version minor && npm publish --access public","release:major":"npm version major && npm publish --access public","release":"npm run release:patch","publish:public":"npm publish --access public","check":"npm run test && echo 'Package ready for publishing'"},"_id":"@crimsonsunset/smart-logger@1.0.7","gitHead":"2a49217f15a0b411a136032f7774edc2f23961e9","_nodeVersion":"22.7.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-p/9HlX5VaEmW9MAWAypOoeTq4iCa1vTpRMiF++ya4Jl5uMdUU94dm3q+PjbqybX28US2ckRXZUhxW+kbOQx/zQ==","shasum":"928593bee1fb71091b4f5b2aebeae4bf92d6d919","tarball":"https://registry.npmjs.org/@crimsonsunset/smart-logger/-/smart-logger-1.0.7.tgz","fileCount":17,"unpackedSize":83443,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIH9sprg6LISa+dKNMonp0EuxhLtnnnS3p4G1VR5ptqCeAiEAhhqEEHryBuWW/wb+Mo6wN6FOiiA3Nm1yycEdsq65ybE="}]},"_npmUser":{"name":"crimsonsunset","email":"jsangio1@gmail.com"},"directories":{},"maintainers":[{"name":"crimsonsunset","email":"jsangio1@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/smart-logger_1.0.7_1754536143120_0.26433916649131706"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-06T23:21:14.097Z","modified":"2025-08-07T03:09:03.482Z","1.0.0":"2025-08-06T23:21:14.398Z","1.0.1":"2025-08-06T23:28:22.903Z","1.0.2":"2025-08-06T23:29:37.074Z","1.0.3":"2025-08-06T23:30:44.177Z","1.0.4":"2025-08-06T23:31:00.631Z","1.0.5":"2025-08-07T02:49:08.178Z","1.0.6":"2025-08-07T02:50:01.429Z","1.0.7":"2025-08-07T03:09:03.294Z"},"bugs":{"url":"https://github.com/crimsonsunset/jsg-logger/issues"},"author":{"name":"Joe Sangiorgio","email":"jsangio1@gmail.com"},"license":"ISC","homepage":"https://github.com/crimsonsunset/jsg-logger#readme","keywords":["logging","pino","browser","cli","server","chrome-extension","adaptive","smart-logger","environment-detection","file-overrides"],"repository":{"type":"git","url":"git+https://github.com/crimsonsunset/jsg-logger.git"},"description":"Smart Adaptive Logger with multi-environment support, file-level overrides, and beautiful console formatting","maintainers":[{"name":"crimsonsunset","email":"jsangio1@gmail.com"}],"readme":"# Smart Logger\n\n**Intelligent Multi-Environment Logger with Advanced Configuration**\n\nA sophisticated logging system that automatically detects its environment (browser, CLI, server) and provides optimal logging experience for each, with powerful file-level overrides and granular control.\n\n## ✨ Features\n\n- 🧠 **Smart Environment Detection** - Auto-adapts to browser, CLI, or server\n- 🎨 **Beautiful Visual Output** - Emoji, colors, and structured context display\n- 📱 **Multi-Environment** - Browser console, terminal, and production JSON\n- 🏪 **Log Store** - In-memory storage for debugging and popup interfaces\n- ⚙️ **Runtime Controls** - Dynamic log level adjustment and configuration\n- 📊 **Component Organization** - Separate loggers for different system components\n- 🔧 **External Configuration** - JSON-based configuration system\n- 📁 **File-Level Overrides** - Per-file and pattern-based control\n- ⏰ **Timestamp Modes** - Absolute, readable, relative, or disabled\n- 🎛️ **Display Toggles** - Control every aspect of log output\n- 🎯 **Smart Level Resolution** - Hierarchical level determination\n\n## 🚀 Quick Start\n\n```javascript\nimport logger from '@crimsonsunset/smart-logger';\n\n// Use component-specific loggers with smart level resolution\nconst log = logger.api;\nlog.info('API handler initialized', {\n  endpoint: 'https://api.example.com',\n  isReady: true\n});\n\n// Runtime controls\nlogger.controls.enableDebugMode(); // Enable debug for all components\nlogger.controls.setLevel('websocket', 'trace'); // Set specific component level\nlogger.controls.addFileOverride('src/popup.js', { level: 'trace' }); // File-specific control\n```\n\n## 🎯 **Level Resolution Hierarchy**\n\nThe logger uses intelligent level resolution with the following priority:\n\n1. **File Override** - `fileOverrides[\"src/popup.js\"].level`\n2. **Component Level** - `components[\"websocket\"].level` \n3. **Global Level** - `globalLevel`\n\nThis allows surgical debugging - you can turn on trace logging for just one problematic file while keeping everything else quiet.\n\n## ⚙️ **Advanced Configuration**\n\n### **Full Configuration Example**\n\n```json\n{\n  \"projectName\": \"My Advanced Project\",\n  \"globalLevel\": \"info\",\n  \"timestampMode\": \"absolute\",\n  \"display\": {\n    \"timestamp\": true,\n    \"emoji\": true,\n    \"component\": true,\n    \"level\": false,\n    \"message\": true,\n    \"jsonPayload\": true,\n    \"stackTrace\": true\n  },\n  \"components\": {\n    \"api\": { \n      \"emoji\": \"🌐\", \n      \"color\": \"#4A90E2\", \n      \"name\": \"API\",\n      \"level\": \"debug\"\n    },\n    \"database\": { \n      \"emoji\": \"💾\", \n      \"color\": \"#00C896\", \n      \"name\": \"Database\",\n      \"level\": \"warn\"\n    }\n  },\n  \"fileOverrides\": {\n    \"src/auth/login.js\": { \n      \"level\": \"trace\",\n      \"emoji\": \"🔐\",\n      \"display\": {\n        \"level\": true,\n        \"jsonPayload\": true\n      }\n    },\n    \"src/managers/*.js\": { \n      \"level\": \"warn\",\n      \"display\": {\n        \"jsonPayload\": false\n      }\n    },\n    \"src/popup.js\": {\n      \"level\": \"debug\",\n      \"timestampMode\": \"relative\",\n      \"display\": {\n        \"jsonPayload\": false\n      }\n    }\n  }\n}\n```\n\n### **File Override Patterns**\n\nFile overrides support powerful pattern matching:\n\n- **Exact files**: `\"src/popup.js\"`\n- **Wildcards**: `\"src/managers/*.js\"` \n- **Patterns**: `\"src/test-*.js\"`\n- **Directories**: `\"src/sites/*.js\"`\n\nEach override can specify:\n- `level` - Log level for this file/pattern\n- `emoji` - Custom emoji override\n- `timestampMode` - File-specific timestamp mode\n- `display` - Individual display toggles\n\n## ⏰ **Timestamp Modes**\n\nControl how timestamps are displayed:\n\n- **`absolute`** - `22:15:30.123` (default)\n- **`readable`** - `10:15 PM`\n- **`relative`** - `2s ago`, `5m ago`\n- **`disable`** - No timestamp\n\n```javascript\n// Set globally\nlogger.controls.setTimestampMode('relative');\n\n// Or per-file in config\n\"fileOverrides\": {\n  \"src/popup.js\": { \"timestampMode\": \"relative\" }\n}\n```\n\n## 🎛️ **Display Controls**\n\nToggle individual parts of log output:\n\n```javascript\n// Available display options\nconst displayConfig = {\n  timestamp: true,    // Show/hide timestamp\n  emoji: true,        // Show/hide level emoji\n  component: true,    // Show/hide [COMPONENT-NAME]\n  level: false,       // Show/hide level name (DEBUG, INFO, etc.)\n  message: true,      // Show/hide log message\n  jsonPayload: true,  // Show/hide context data trees\n  stackTrace: true    // Show/hide error stack traces\n};\n\n// Runtime control\nlogger.controls.setDisplayOption('jsonPayload', false);\nlogger.controls.toggleDisplayOption('level');\n```\n\n## 🏗️ Architecture\n\n```\nlogger/\n├── index.js                    # Main entry point with smart initialization\n├── config/\n│   ├── config-manager.js       # Smart configuration system\n│   ├── default-config.json     # Default configuration\n│   └── component-schemes.js    # Component styling definitions\n├── formatters/\n│   ├── browser-formatter.js    # Advanced browser console output\n│   ├── cli-formatter.js        # Terminal output with pino-colada\n│   └── server-formatter.js     # Production JSON logging\n├── stores/\n│   └── log-store.js            # In-memory log storage with filtering\n├── utils/\n│   └── environment-detector.js # Environment detection\n└── examples/\n    └── advanced-config.json    # Full configuration example\n```\n\n## 🎯 **Usage Examples**\n\n### **Per-Component Level Control**\n```javascript\n// Different components at different levels\nlogger.controls.setComponentLevel('websocket', 'warn');   // Quiet websocket\nlogger.controls.setComponentLevel('soundcloud', 'trace'); // Verbose SoundCloud\nlogger.controls.setComponentLevel('popup', 'debug');      // Debug popup\n```\n\n### **Surgical File Debugging**\n```javascript\n// Turn on trace logging for just one problematic file\nlogger.controls.addFileOverride('src/sites/soundcloud.js', {\n  level: 'trace',\n  display: { level: true, jsonPayload: true }\n});\n\n// Quiet all manager files\nlogger.controls.addFileOverride('src/managers/*.js', {\n  level: 'warn',\n  display: { jsonPayload: false }\n});\n```\n\n### **Dynamic Display Control**\n```javascript\n// Hide JSON payloads but keep error stacks\nlogger.controls.setDisplayOption('jsonPayload', false);\nlogger.controls.setDisplayOption('stackTrace', true);\n\n// Show level names for debugging\nlogger.controls.setDisplayOption('level', true);\n\n// Use relative timestamps for popup\nlogger.controls.addFileOverride('src/popup.js', {\n  timestampMode: 'relative'\n});\n```\n\n### **Context Data**\n```javascript\nlogger.api.error('Request failed', {\n  url: window.location.href,\n  selectors: {\n    title: '.track-title',\n    artist: '.track-artist'\n  },\n  retryCount: 3,\n  lastError: error.message,\n  userAgent: navigator.userAgent\n});\n\n// With file override for src/sites/soundcloud.js level: \"trace\":\n// 22:15:30.123 🚨 [API] Request failed\n//    ├─ url: https://soundcloud.com/track/example\n//    ├─ selectors: {title: \".track-title\", artist: \".track-artist\"}\n//    ├─ retryCount: 3\n//    ├─ lastError: \"Element not found\"\n//    ├─ userAgent: \"Mozilla/5.0...\"\n```\n\n## 🎛️ **Runtime Controls API**\n\n### **Level Controls**\n```javascript\nlogger.controls.setLevel(component, level)           // Set component level\nlogger.controls.getLevel(component)                  // Get effective level\nlogger.controls.setComponentLevel(component, level)  // Set in config\nlogger.controls.enableDebugMode()                    // All components → debug\nlogger.controls.enableTraceMode()                    // All components → trace\n```\n\n### **File Override Controls**\n```javascript\nlogger.controls.addFileOverride(path, config)       // Add file override\nlogger.controls.removeFileOverride(path)             // Remove override\nlogger.controls.listFileOverrides()                  // List all overrides\n```\n\n### **Display Controls**\n```javascript\nlogger.controls.setDisplayOption(option, enabled)   // Set display option\nlogger.controls.getDisplayConfig()                   // Get current config\nlogger.controls.toggleDisplayOption(option)          // Toggle option\n```\n\n### **Timestamp Controls**\n```javascript\nlogger.controls.setTimestampMode(mode)               // Set timestamp mode\nlogger.controls.getTimestampMode()                   // Get current mode\nlogger.controls.getTimestampModes()                  // List available modes\n```\n\n### **System Controls**\n```javascript\nlogger.controls.refresh()                            // Refresh all loggers\nlogger.controls.reset()                              // Reset to defaults\nlogger.controls.getConfigSummary()                   // Get config summary\nlogger.controls.getStats()                           // Get logging stats\n```\n\n## 📊 **Log Store & Statistics**\n\n### **Advanced Log Filtering**\n```javascript\n// Get recent logs with file context\nconst recentLogs = logger.logStore.getRecent(20);\nconst websocketLogs = logger.logStore.getByComponent('websocket', 10);\nconst errorLogs = logger.logStore.getByLevel(50, 5); // Errors only\n\n// Enhanced log entries include:\n// - filePath: 'src/sites/soundcloud.js'\n// - effectiveLevel: 'trace'\n// - component: 'soundcloud'\n// - displayConfig: { timestamp: true, ... }\n```\n\n### **Real-time Statistics**\n```javascript\nconst stats = logger.controls.getStats();\n// Returns:\n// {\n//   total: 156,\n//   byLevel: { debug: 45, info: 89, warn: 15, error: 7 },\n//   byComponent: { soundcloud: 67, websocket: 23, popup: 66 },\n//   timeRange: { start: 1627846260000, end: 1627846320000 }\n// }\n```\n\n## 🎨 **Output Examples**\n\n### **🚀 BREAKTHROUGH: Perfect Browser Formatting**\n```\n// Direct browser logger with 100% style control:\n12:00 AM 🎯 [CACP-CORE] ✨ CACP Extension v0.3.2 - Logger Ready!\n12:00 AM 🎵 [SOUNDCLOUD] MediaSession track change detected\n   ├─ title: Alt-J - Breezeblocks (Gkat Remix)\n   ├─ artist: Gkat\n   ├─ hasArtwork: true\n12:00 AM 🎯 [CACP-CORE] 🧪 Testing JSON context display\n   ├─ testData: {nested: {...}, simple: 'test string', boolean: true}\n   ├─ location: {href: 'https://soundcloud.com/discover', hostname: 'soundcloud.com'}\n   ├─ timestamp: 2025-07-29T06:00:53.837Z\n```\n\n### **File Override in Action**\n```\n// src/sites/soundcloud.js with level: \"trace\" override:\n12:00 AM 🎵 TRACE [SOUNDCLOUD] Detailed selector matching\n   ├─ selector: \".playButton\"\n   ├─ found: true\n   ├─ timing: 2.3ms\n\n// src/managers/websocket-manager.js with level: \"warn\" (quiet):\n(no debug/info logs shown)\n\n// src/popup.js with timestampMode: \"relative\":\n2s ago 🎛️ [POPUP] User clicked debug button\n   ├─ component: \"soundcloud\"\n```\n\n### **Display Toggles in Action**\n```javascript\n// With display: { level: true, jsonPayload: false }:\n12:00 AM 🚨 ERROR [SOUNDCLOUD] Track extraction failed\n\n// With display: { timestamp: false, level: true, jsonPayload: true }:\n🚨 ERROR [SOUNDCLOUD] Track extraction failed\n   ├─ url: https://soundcloud.com/track/example\n   ├─ retryCount: 3\n```\n\n## 📦 Installation\n\n```bash\nnpm install @cacp/logger\n```\n\n## 🎯 Environment Detection\n\nThe logger automatically detects its environment and uses optimal implementations:\n\n- **Browser**: **🚀 BREAKTHROUGH** - Custom direct logger (bypasses Pino) for 100% console styling control\n- **CLI**: Uses pino-colada for beautiful terminal output  \n- **Server**: Uses structured JSON for production logging\n\n**Why Browser is Different:**\nOur testing revealed that Pino's browser detection was interfering with custom formatters, especially in Chrome extensions. By creating a custom direct browser logger that bypasses Pino entirely, we achieved:\n- Perfect emoji and color display\n- Readable timestamp formatting (`12:00 AM`)\n- Beautiful JSON tree expansion\n- Seamless Chrome extension integration\n- Zero compromises on functionality\n\n## 🚀 Advanced Features\n\n### **Automatic File Detection**\nThe browser formatter automatically detects which file is logging by analyzing the call stack, enabling seamless file override functionality.\n\n### **Smart Level Resolution**\nThe three-tier hierarchy (file → component → global) provides maximum flexibility with sensible defaults.\n\n### **Pattern Matching**\nFile overrides support glob patterns with `*` and `?` wildcards for powerful bulk configuration.\n\n### **Runtime Reconfiguration**\nAll settings can be changed at runtime without restarting, perfect for debugging complex issues.\n\n## 🎯 **Migration from Basic Logger**\n\nIf you're upgrading from a basic logger:\n\n```javascript\n// Before: Simple global level\nlogger.level = 'debug';\n\n// After: Granular control\nlogger.controls.setComponentLevel('websocket', 'warn');     // Quiet websocket\nlogger.controls.addFileOverride('src/popup.js', {           // Debug popup\n  level: 'debug',\n  timestampMode: 'relative'\n});\n```\n\n## 🔧 **Browser Developer Tools**\n\nIn browser environments, runtime controls are available globally:\n\n```javascript\n// Available as window.CACP_Logger\nCACP_Logger.enableDebugMode();\nCACP_Logger.setDisplayOption('level', true);\nCACP_Logger.addFileOverride('src/popup.js', { level: 'trace' });\nCACP_Logger.getStats();\n```\n\n## ⚠️ **Disclaimer**\n\nThis software is provided **\"AS IS\"** without warranty of any kind. Use at your own risk. The author is not responsible for any damages, data loss, or issues that may result from using this logger. See the LICENSE file for full legal terms.\n\n---\n\n**License**: ISC  \n\nThis logger system provides the foundation for sophisticated debugging and monitoring across complex multi-file applications with surgical precision and beautiful output.\n","readmeFilename":"README.md"}