{"_id":"@drsmile1001/logger","_rev":"3-7570c6ba38c21481ece17a2e467f515e","name":"@drsmile1001/logger","dist-tags":{"latest":"2.0.0"},"versions":{"0.1.0":{"name":"@drsmile1001/logger","version":"0.1.0","_id":"@drsmile1001/logger@0.1.0","maintainers":[{"name":"drsmile1001","email":"drsmile.1001@gmail.com"}],"dist":{"shasum":"9fa59436f515921ffbfc9a2c1116254fe0afc4b8","tarball":"https://registry.npmjs.org/@drsmile1001/logger/-/logger-0.1.0.tgz","fileCount":7,"integrity":"sha512-gMqvYFMOcI/x2bETmcgzFSxaZvon27G2RWl8k9J9AwXbeLrFgZy/We/sGiKuJDNuT7kLwTMrl67I0qclGRWMvQ==","signatures":[{"sig":"MEUCIQDtW6i9Y73q1OGiC94ANUHPWaEP/d7gdjkDzHVsskbgYwIgKqZu+ONKHGhpmS8GcrUxlyOIxaIzjT5T1icqR7VbZtY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23888},"shasum":"9fa59436f515921ffbfc9a2c1116254fe0afc4b8","_npmUser":{"name":"drsmile1001","email":"drsmile.1001@gmail.com"},"_integrity":"sha512-gMqvYFMOcI/x2bETmcgzFSxaZvon27G2RWl8k9J9AwXbeLrFgZy/We/sGiKuJDNuT7kLwTMrl67I0qclGRWMvQ==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"kleur":"^4.1.5","rotating-file-stream":"^3.2.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest"},"_npmOperationalInternal":{"tmp":"tmp/logger_0.1.0_1768749180880_0.9488564234556174","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@drsmile1001/logger","version":"1.0.0","_id":"@drsmile1001/logger@1.0.0","maintainers":[{"name":"drsmile1001","email":"drsmile.1001@gmail.com"}],"dist":{"shasum":"716f9ff4394461d08762b768399bfbc2671ef6fe","tarball":"https://registry.npmjs.org/@drsmile1001/logger/-/logger-1.0.0.tgz","fileCount":7,"integrity":"sha512-tCF0uCtHwesP4V5bQllEMHSaxZ3MJTzJyW4RAOsrtKHX28QwKJRgqG6yzcCZea5A6uDjKKprV4AV6cqzqxVqvg==","signatures":[{"sig":"MEUCIGT2UNOZRr0c3Harh13g7KWF574EPtds55/qTBwGWeHvAiEAkIlLU/qAnEX4JQS4Fz19AjIGqGhj1iUde4oHLUfZUkQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24145},"types":"index.ts","exports":{".":"./index.ts"},"gitHead":"8c7b44efb6c90d2a42db862026891eb0c626aa83","scripts":{"typecheck":"bunx tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"drsmile1001","email":"drsmile.1001@gmail.com"},"_npmVersion":"10.9.4","directories":{},"_nodeVersion":"22.22.0","dependencies":{"kleur":"^4.1.5","rotating-file-stream":"^3.2.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","@sinclair/typebox":"^0.34.47","@drsmile1001/utils":"^1.0.0","@drsmile1001/config-factory":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/logger_1.0.0_1772271813187_0.26595483463649283","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@drsmile1001/logger","version":"2.0.0","dependencies":{"kleur":"^4.1.5","rotating-file-stream":"^3.2.7"},"devDependencies":{"@drsmile1001/config-factory":"^1.0.0","@drsmile1001/utils":"^1.0.0","@sinclair/typebox":"^0.34.47","@types/bun":"latest"},"types":"index.ts","exports":{".":"./index.ts"},"scripts":{"typecheck":"bunx tsc -p tsconfig.json --noEmit"},"license":"MIT","_id":"@drsmile1001/logger@2.0.0","gitHead":"bcb01b19052758245ff6a84ce708428a9af6fd19","description":"`@drsmile1001/logger` 提供以 `LoggerCore + Transport` 為核心的結構化日誌工具。","_nodeVersion":"22.22.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-ncyk4CtU/h5Z1JdINwWCCwsgRb6OxbHWMvZGl/FdJ8jre8E9+B86Aii+UmebmBae+qxkRWyAVFTuCAQvvW0bCw==","shasum":"f11e8c5334afe302f95d05f520ba6178f1354bb3","tarball":"https://registry.npmjs.org/@drsmile1001/logger/-/logger-2.0.0.tgz","fileCount":10,"unpackedSize":32344,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAE4Fi+uxUtVoExnwUBrIcaFi/eeb8TadrkvR7TdG+yoAiBz9u8462kAAu18B0EMbDXtZFBHYuOJ7FnheyXJ+rMwMQ=="}]},"_npmUser":{"name":"drsmile1001","email":"drsmile.1001@gmail.com"},"directories":{},"maintainers":[{"name":"drsmile1001","email":"drsmile.1001@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/logger_2.0.0_1772283555771_0.4273083692323467"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-18T15:13:00.803Z","modified":"2026-02-28T12:59:16.046Z","0.1.0":"2026-01-18T15:13:01.026Z","1.0.0":"2026-02-28T09:43:33.323Z","2.0.0":"2026-02-28T12:59:15.928Z"},"maintainers":[{"name":"drsmile1001","email":"drsmile.1001@gmail.com"}],"readme":"# @drsmile1001/logger\n\n`@drsmile1001/logger` 提供以 `LoggerCore + Transport` 為核心的結構化日誌工具。\n\n## 安裝\n\n```bash\nbun add @drsmile1001/logger\n```\n\n## 快速開始\n\n```ts\nimport { ConsoleTransport, LoggerCore } from \"@drsmile1001/logger\";\n\nconst logger = new LoggerCore({ level: \"info\" });\nlogger.attachTransport(\n  new ConsoleTransport({\n    levelFloor: \"debug\",\n    withEmoji: true,\n    withColor: true,\n    withContext: \"inline\",\n  })\n);\n\nlogger.info({ event: \"start\", userId: \"u1\" }, \"啟動\");\nlogger.extend(\"worker\").warn(\"任務耗時偏高\");\nlogger.error({ error: new Error(\"boom\") }, \"處理失敗\");\n```\n\n## 核心概念\n\n- `LoggerCore`：負責 level、namespace 與 context 判斷\n- `LogTransport`：負責輸出，支援同時掛多個 transport\n- `extend(namespace)`：建立子 logger，形成 `path` 階層\n- `append(context)`：附加共用 context\n\n## 常用 API\n\n- `new LoggerCore(options)`\n  - `level?: LogLevel`（預設 `\"info\"`）\n  - `path?: string[]`\n  - `context?: LoggerContext`\n  - `allowNamespaces?: string[]`\n  - `allowLevel?: LogLevel`（預設 `\"info\"`）\n  - `blockNamespaces?: string[]`\n  - `blockLevel?: LogLevel`（預設 `\"warn\"`）\n- `logger.attachTransport(transport)`\n- `logger.listTransports()`\n- `await logger.flushTransports()`\n\n## 預設 logger（讀取環境變數）\n\n```ts\nimport { createDefaultLoggerFromEnv } from \"@drsmile1001/logger\";\n\nconst logger = createDefaultLoggerFromEnv();\nlogger.info(\"hello\");\n```\n\n支援的 env：\n\n- `LOG_LEVEL`：LoggerCore 全域門檻（預設 `info`）\n- `LOG_CONSOLE_LEVEL`：ConsoleTransport 門檻（預設 `debug`）\n- `LOG_ALLOW_NAMESPACE`：allow prefix 清單（`,` 分隔）\n- `LOG_ALLOW_LEVEL`：allow 觸發門檻（預設 `info`）\n- `LOG_BLOCK_NAMESPACE`：block prefix 清單（`,` 分隔）\n- `LOG_BLOCK_LEVEL`：block 觸發門檻（預設 `warn`）\n- `LOG_WITH_CONTEXT`：`inline` 或 `object`\n\n## Namespace 過濾規則\n\n- `allow` 優先於 `block`\n- namespace 以 prefix 比對（不解析 `*`）\n- 建議 prefix 以 `:` 結尾，例如：`\"nats:\"`、`\"svc:worker:\"`\n- 若未以 `:` 結尾，初始化時會印出警告（避免匹配範圍過大）\n\n## Breaking Change\n\n主要破壞性變更是 `LoggerConsole` 移除，對外改為 `LoggerCore + Transport` 組合：\n\n- `LoggerConsole` 不再 export\n- `createDefaultLoggerFromEnv()` 回傳 `LoggerCore`（內部已附加 `ConsoleTransport`）\n- 若原本直接 `new LoggerConsole(...)`，需改為 `new LoggerCore(...)` 並手動 `attachTransport(...)`\n\n遷移範例：\n\n```ts\n// before\n// import { LoggerConsole } from \"@drsmile1001/logger\";\n// const logger = new LoggerConsole(\"info\", [], {}, emojiMap, true, true, \"inline\");\n// after\nimport { ConsoleTransport, LoggerCore } from \"@drsmile1001/logger\";\n\nconst logger = new LoggerCore({ level: \"info\" });\nlogger.attachTransport(\n  new ConsoleTransport({\n    levelFloor: \"debug\",\n    withEmoji: true,\n    withColor: true,\n    withContext: \"inline\",\n  })\n);\n```\n","readmeFilename":"README.md","description":"`@drsmile1001/logger` 提供以 `LoggerCore + Transport` 為核心的結構化日誌工具。","license":"MIT"}