lograil 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +38 -0
- package/LICENSE +21 -0
- package/README.md +40 -0
- package/dist/cjs/context/async-context.browser.d.ts +16 -0
- package/dist/cjs/context/async-context.browser.d.ts.map +1 -0
- package/dist/cjs/context/async-context.browser.js +29 -0
- package/dist/cjs/context/async-context.browser.js.map +1 -0
- package/dist/cjs/context/async-context.d.ts +10 -0
- package/dist/cjs/context/async-context.d.ts.map +1 -0
- package/dist/cjs/context/async-context.js +37 -0
- package/dist/cjs/context/async-context.js.map +1 -0
- package/dist/cjs/context/context.d.ts +33 -0
- package/dist/cjs/context/context.d.ts.map +1 -0
- package/dist/cjs/context/context.js +57 -0
- package/dist/cjs/context/context.js.map +1 -0
- package/dist/cjs/context/index.d.ts +3 -0
- package/dist/cjs/context/index.d.ts.map +1 -0
- package/dist/cjs/context/index.js +19 -0
- package/dist/cjs/context/index.js.map +1 -0
- package/dist/cjs/core/entry.d.ts +30 -0
- package/dist/cjs/core/entry.d.ts.map +1 -0
- package/dist/cjs/core/entry.js +37 -0
- package/dist/cjs/core/entry.js.map +1 -0
- package/dist/cjs/core/index.d.ts +7 -0
- package/dist/cjs/core/index.d.ts.map +1 -0
- package/dist/cjs/core/index.js +24 -0
- package/dist/cjs/core/index.js.map +1 -0
- package/dist/cjs/core/level.d.ts +12 -0
- package/dist/cjs/core/level.d.ts.map +1 -0
- package/dist/cjs/core/level.js +31 -0
- package/dist/cjs/core/level.js.map +1 -0
- package/dist/cjs/core/logger.d.ts +271 -0
- package/dist/cjs/core/logger.d.ts.map +1 -0
- package/dist/cjs/core/logger.js +751 -0
- package/dist/cjs/core/logger.js.map +1 -0
- package/dist/cjs/core/printf.d.ts +34 -0
- package/dist/cjs/core/printf.d.ts.map +1 -0
- package/dist/cjs/core/printf.js +133 -0
- package/dist/cjs/core/printf.js.map +1 -0
- package/dist/cjs/index.d.ts +40 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +56 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/pipeline/filter.d.ts +10 -0
- package/dist/cjs/pipeline/filter.d.ts.map +1 -0
- package/dist/cjs/pipeline/filter.js +16 -0
- package/dist/cjs/pipeline/filter.js.map +1 -0
- package/dist/cjs/pipeline/formatter.d.ts +19 -0
- package/dist/cjs/pipeline/formatter.d.ts.map +1 -0
- package/dist/cjs/pipeline/formatter.js +183 -0
- package/dist/cjs/pipeline/formatter.js.map +1 -0
- package/dist/cjs/pipeline/index.d.ts +6 -0
- package/dist/cjs/pipeline/index.d.ts.map +1 -0
- package/dist/cjs/pipeline/index.js +22 -0
- package/dist/cjs/pipeline/index.js.map +1 -0
- package/dist/cjs/pipeline/pipeline.d.ts +45 -0
- package/dist/cjs/pipeline/pipeline.d.ts.map +1 -0
- package/dist/cjs/pipeline/pipeline.js +80 -0
- package/dist/cjs/pipeline/pipeline.js.map +1 -0
- package/dist/cjs/pipeline/processor.d.ts +67 -0
- package/dist/cjs/pipeline/processor.d.ts.map +1 -0
- package/dist/cjs/pipeline/processor.js +284 -0
- package/dist/cjs/pipeline/processor.js.map +1 -0
- package/dist/cjs/pipeline/sampler.d.ts +45 -0
- package/dist/cjs/pipeline/sampler.d.ts.map +1 -0
- package/dist/cjs/pipeline/sampler.js +62 -0
- package/dist/cjs/pipeline/sampler.js.map +1 -0
- package/dist/cjs/plugin/index.d.ts +4 -0
- package/dist/cjs/plugin/index.d.ts.map +1 -0
- package/dist/cjs/plugin/index.js +20 -0
- package/dist/cjs/plugin/index.js.map +1 -0
- package/dist/cjs/plugin/manager.d.ts +38 -0
- package/dist/cjs/plugin/manager.d.ts.map +1 -0
- package/dist/cjs/plugin/manager.js +79 -0
- package/dist/cjs/plugin/manager.js.map +1 -0
- package/dist/cjs/plugin/otel-trace.d.ts +19 -0
- package/dist/cjs/plugin/otel-trace.d.ts.map +1 -0
- package/dist/cjs/plugin/otel-trace.js +91 -0
- package/dist/cjs/plugin/otel-trace.js.map +1 -0
- package/dist/cjs/plugin/plugin.d.ts +41 -0
- package/dist/cjs/plugin/plugin.d.ts.map +1 -0
- package/dist/cjs/plugin/plugin.js +3 -0
- package/dist/cjs/plugin/plugin.js.map +1 -0
- package/dist/cjs/runtime/adapter.d.ts +81 -0
- package/dist/cjs/runtime/adapter.d.ts.map +1 -0
- package/dist/cjs/runtime/adapter.js +3 -0
- package/dist/cjs/runtime/adapter.js.map +1 -0
- package/dist/cjs/runtime/defaults.d.ts +27 -0
- package/dist/cjs/runtime/defaults.d.ts.map +1 -0
- package/dist/cjs/runtime/defaults.js +30 -0
- package/dist/cjs/runtime/defaults.js.map +1 -0
- package/dist/cjs/runtime/electron-binding.browser.d.ts +10 -0
- package/dist/cjs/runtime/electron-binding.browser.d.ts.map +1 -0
- package/dist/cjs/runtime/electron-binding.browser.js +18 -0
- package/dist/cjs/runtime/electron-binding.browser.js.map +1 -0
- package/dist/cjs/runtime/electron-binding.d.ts +24 -0
- package/dist/cjs/runtime/electron-binding.d.ts.map +1 -0
- package/dist/cjs/runtime/electron-binding.js +49 -0
- package/dist/cjs/runtime/electron-binding.js.map +1 -0
- package/dist/cjs/runtime/electron-lifecycle.d.ts +17 -0
- package/dist/cjs/runtime/electron-lifecycle.d.ts.map +1 -0
- package/dist/cjs/runtime/electron-lifecycle.js +47 -0
- package/dist/cjs/runtime/electron-lifecycle.js.map +1 -0
- package/dist/cjs/runtime/electron-main.d.ts +24 -0
- package/dist/cjs/runtime/electron-main.d.ts.map +1 -0
- package/dist/cjs/runtime/electron-main.js +102 -0
- package/dist/cjs/runtime/electron-main.js.map +1 -0
- package/dist/cjs/runtime/electron-renderer.d.ts +26 -0
- package/dist/cjs/runtime/electron-renderer.d.ts.map +1 -0
- package/dist/cjs/runtime/electron-renderer.js +33 -0
- package/dist/cjs/runtime/electron-renderer.js.map +1 -0
- package/dist/cjs/runtime/electron.d.ts +20 -0
- package/dist/cjs/runtime/electron.d.ts.map +1 -0
- package/dist/cjs/runtime/electron.js +27 -0
- package/dist/cjs/runtime/electron.js.map +1 -0
- package/dist/cjs/runtime/index.d.ts +21 -0
- package/dist/cjs/runtime/index.d.ts.map +1 -0
- package/dist/cjs/runtime/index.js +41 -0
- package/dist/cjs/runtime/index.js.map +1 -0
- package/dist/cjs/runtime/node.d.ts +27 -0
- package/dist/cjs/runtime/node.d.ts.map +1 -0
- package/dist/cjs/runtime/node.js +126 -0
- package/dist/cjs/runtime/node.js.map +1 -0
- package/dist/cjs/runtime/process-lifecycle.d.ts +13 -0
- package/dist/cjs/runtime/process-lifecycle.d.ts.map +1 -0
- package/dist/cjs/runtime/process-lifecycle.js +80 -0
- package/dist/cjs/runtime/process-lifecycle.js.map +1 -0
- package/dist/cjs/runtime/web-lifecycle.d.ts +13 -0
- package/dist/cjs/runtime/web-lifecycle.d.ts.map +1 -0
- package/dist/cjs/runtime/web-lifecycle.js +39 -0
- package/dist/cjs/runtime/web-lifecycle.js.map +1 -0
- package/dist/cjs/runtime/web.d.ts +14 -0
- package/dist/cjs/runtime/web.d.ts.map +1 -0
- package/dist/cjs/runtime/web.js +61 -0
- package/dist/cjs/runtime/web.js.map +1 -0
- package/dist/cjs/shims/index.browser.d.ts +26 -0
- package/dist/cjs/shims/index.browser.d.ts.map +1 -0
- package/dist/cjs/shims/index.browser.js +67 -0
- package/dist/cjs/shims/index.browser.js.map +1 -0
- package/dist/cjs/shims/index.d.ts +15 -0
- package/dist/cjs/shims/index.d.ts.map +1 -0
- package/dist/cjs/shims/index.js +39 -0
- package/dist/cjs/shims/index.js.map +1 -0
- package/dist/cjs/transport/cluster-ipc.d.ts +36 -0
- package/dist/cjs/transport/cluster-ipc.d.ts.map +1 -0
- package/dist/cjs/transport/cluster-ipc.js +76 -0
- package/dist/cjs/transport/cluster-ipc.js.map +1 -0
- package/dist/cjs/transport/console.d.ts +28 -0
- package/dist/cjs/transport/console.d.ts.map +1 -0
- package/dist/cjs/transport/console.js +48 -0
- package/dist/cjs/transport/console.js.map +1 -0
- package/dist/cjs/transport/electron-ipc.d.ts +69 -0
- package/dist/cjs/transport/electron-ipc.d.ts.map +1 -0
- package/dist/cjs/transport/electron-ipc.js +153 -0
- package/dist/cjs/transport/electron-ipc.js.map +1 -0
- package/dist/cjs/transport/file.d.ts +190 -0
- package/dist/cjs/transport/file.d.ts.map +1 -0
- package/dist/cjs/transport/file.js +666 -0
- package/dist/cjs/transport/file.js.map +1 -0
- package/dist/cjs/transport/index.d.ts +9 -0
- package/dist/cjs/transport/index.d.ts.map +1 -0
- package/dist/cjs/transport/index.js +25 -0
- package/dist/cjs/transport/index.js.map +1 -0
- package/dist/cjs/transport/live.d.ts +72 -0
- package/dist/cjs/transport/live.d.ts.map +1 -0
- package/dist/cjs/transport/live.js +104 -0
- package/dist/cjs/transport/live.js.map +1 -0
- package/dist/cjs/transport/otlp.d.ts +97 -0
- package/dist/cjs/transport/otlp.d.ts.map +1 -0
- package/dist/cjs/transport/otlp.js +194 -0
- package/dist/cjs/transport/otlp.js.map +1 -0
- package/dist/cjs/transport/rotating-file.d.ts +67 -0
- package/dist/cjs/transport/rotating-file.d.ts.map +1 -0
- package/dist/cjs/transport/rotating-file.js +179 -0
- package/dist/cjs/transport/rotating-file.js.map +1 -0
- package/dist/cjs/transport/transport.d.ts +35 -0
- package/dist/cjs/transport/transport.d.ts.map +1 -0
- package/dist/cjs/transport/transport.js +3 -0
- package/dist/cjs/transport/transport.js.map +1 -0
- package/dist/cjs/transport/worker-ipc.d.ts +43 -0
- package/dist/cjs/transport/worker-ipc.d.ts.map +1 -0
- package/dist/cjs/transport/worker-ipc.js +106 -0
- package/dist/cjs/transport/worker-ipc.js.map +1 -0
- package/dist/cjs/types.d.ts +72 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +45 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/esm/context/async-context.browser.d.ts +16 -0
- package/dist/esm/context/async-context.browser.d.ts.map +1 -0
- package/dist/esm/context/async-context.browser.js +25 -0
- package/dist/esm/context/async-context.browser.js.map +1 -0
- package/dist/esm/context/async-context.d.ts +10 -0
- package/dist/esm/context/async-context.d.ts.map +1 -0
- package/dist/esm/context/async-context.js +33 -0
- package/dist/esm/context/async-context.js.map +1 -0
- package/dist/esm/context/context.d.ts +33 -0
- package/dist/esm/context/context.d.ts.map +1 -0
- package/dist/esm/context/context.js +52 -0
- package/dist/esm/context/context.js.map +1 -0
- package/dist/esm/context/index.d.ts +3 -0
- package/dist/esm/context/index.d.ts.map +1 -0
- package/dist/esm/context/index.js +3 -0
- package/dist/esm/context/index.js.map +1 -0
- package/dist/esm/core/entry.d.ts +30 -0
- package/dist/esm/core/entry.d.ts.map +1 -0
- package/dist/esm/core/entry.js +34 -0
- package/dist/esm/core/entry.js.map +1 -0
- package/dist/esm/core/index.d.ts +7 -0
- package/dist/esm/core/index.d.ts.map +1 -0
- package/dist/esm/core/index.js +6 -0
- package/dist/esm/core/index.js.map +1 -0
- package/dist/esm/core/level.d.ts +12 -0
- package/dist/esm/core/level.d.ts.map +1 -0
- package/dist/esm/core/level.js +25 -0
- package/dist/esm/core/level.js.map +1 -0
- package/dist/esm/core/logger.d.ts +271 -0
- package/dist/esm/core/logger.d.ts.map +1 -0
- package/dist/esm/core/logger.js +747 -0
- package/dist/esm/core/logger.js.map +1 -0
- package/dist/esm/core/printf.d.ts +34 -0
- package/dist/esm/core/printf.d.ts.map +1 -0
- package/dist/esm/core/printf.js +129 -0
- package/dist/esm/core/printf.js.map +1 -0
- package/dist/esm/index.d.ts +40 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +38 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/pipeline/filter.d.ts +10 -0
- package/dist/esm/pipeline/filter.d.ts.map +1 -0
- package/dist/esm/pipeline/filter.js +11 -0
- package/dist/esm/pipeline/filter.js.map +1 -0
- package/dist/esm/pipeline/formatter.d.ts +19 -0
- package/dist/esm/pipeline/formatter.d.ts.map +1 -0
- package/dist/esm/pipeline/formatter.js +179 -0
- package/dist/esm/pipeline/formatter.js.map +1 -0
- package/dist/esm/pipeline/index.d.ts +6 -0
- package/dist/esm/pipeline/index.d.ts.map +1 -0
- package/dist/esm/pipeline/index.js +6 -0
- package/dist/esm/pipeline/index.js.map +1 -0
- package/dist/esm/pipeline/pipeline.d.ts +45 -0
- package/dist/esm/pipeline/pipeline.d.ts.map +1 -0
- package/dist/esm/pipeline/pipeline.js +76 -0
- package/dist/esm/pipeline/pipeline.js.map +1 -0
- package/dist/esm/pipeline/processor.d.ts +67 -0
- package/dist/esm/pipeline/processor.d.ts.map +1 -0
- package/dist/esm/pipeline/processor.js +277 -0
- package/dist/esm/pipeline/processor.js.map +1 -0
- package/dist/esm/pipeline/sampler.d.ts +45 -0
- package/dist/esm/pipeline/sampler.d.ts.map +1 -0
- package/dist/esm/pipeline/sampler.js +59 -0
- package/dist/esm/pipeline/sampler.js.map +1 -0
- package/dist/esm/plugin/index.d.ts +4 -0
- package/dist/esm/plugin/index.d.ts.map +1 -0
- package/dist/esm/plugin/index.js +4 -0
- package/dist/esm/plugin/index.js.map +1 -0
- package/dist/esm/plugin/manager.d.ts +38 -0
- package/dist/esm/plugin/manager.d.ts.map +1 -0
- package/dist/esm/plugin/manager.js +75 -0
- package/dist/esm/plugin/manager.js.map +1 -0
- package/dist/esm/plugin/otel-trace.d.ts +19 -0
- package/dist/esm/plugin/otel-trace.d.ts.map +1 -0
- package/dist/esm/plugin/otel-trace.js +55 -0
- package/dist/esm/plugin/otel-trace.js.map +1 -0
- package/dist/esm/plugin/plugin.d.ts +41 -0
- package/dist/esm/plugin/plugin.d.ts.map +1 -0
- package/dist/esm/plugin/plugin.js +2 -0
- package/dist/esm/plugin/plugin.js.map +1 -0
- package/dist/esm/runtime/adapter.d.ts +81 -0
- package/dist/esm/runtime/adapter.d.ts.map +1 -0
- package/dist/esm/runtime/adapter.js +2 -0
- package/dist/esm/runtime/adapter.js.map +1 -0
- package/dist/esm/runtime/defaults.d.ts +27 -0
- package/dist/esm/runtime/defaults.d.ts.map +1 -0
- package/dist/esm/runtime/defaults.js +27 -0
- package/dist/esm/runtime/defaults.js.map +1 -0
- package/dist/esm/runtime/electron-binding.browser.d.ts +10 -0
- package/dist/esm/runtime/electron-binding.browser.d.ts.map +1 -0
- package/dist/esm/runtime/electron-binding.browser.js +13 -0
- package/dist/esm/runtime/electron-binding.browser.js.map +1 -0
- package/dist/esm/runtime/electron-binding.d.ts +24 -0
- package/dist/esm/runtime/electron-binding.d.ts.map +1 -0
- package/dist/esm/runtime/electron-binding.js +44 -0
- package/dist/esm/runtime/electron-binding.js.map +1 -0
- package/dist/esm/runtime/electron-lifecycle.d.ts +17 -0
- package/dist/esm/runtime/electron-lifecycle.d.ts.map +1 -0
- package/dist/esm/runtime/electron-lifecycle.js +44 -0
- package/dist/esm/runtime/electron-lifecycle.js.map +1 -0
- package/dist/esm/runtime/electron-main.d.ts +24 -0
- package/dist/esm/runtime/electron-main.d.ts.map +1 -0
- package/dist/esm/runtime/electron-main.js +99 -0
- package/dist/esm/runtime/electron-main.js.map +1 -0
- package/dist/esm/runtime/electron-renderer.d.ts +26 -0
- package/dist/esm/runtime/electron-renderer.d.ts.map +1 -0
- package/dist/esm/runtime/electron-renderer.js +30 -0
- package/dist/esm/runtime/electron-renderer.js.map +1 -0
- package/dist/esm/runtime/electron.d.ts +20 -0
- package/dist/esm/runtime/electron.d.ts.map +1 -0
- package/dist/esm/runtime/electron.js +21 -0
- package/dist/esm/runtime/electron.js.map +1 -0
- package/dist/esm/runtime/index.d.ts +21 -0
- package/dist/esm/runtime/index.d.ts.map +1 -0
- package/dist/esm/runtime/index.js +29 -0
- package/dist/esm/runtime/index.js.map +1 -0
- package/dist/esm/runtime/node.d.ts +27 -0
- package/dist/esm/runtime/node.d.ts.map +1 -0
- package/dist/esm/runtime/node.js +123 -0
- package/dist/esm/runtime/node.js.map +1 -0
- package/dist/esm/runtime/process-lifecycle.d.ts +13 -0
- package/dist/esm/runtime/process-lifecycle.d.ts.map +1 -0
- package/dist/esm/runtime/process-lifecycle.js +77 -0
- package/dist/esm/runtime/process-lifecycle.js.map +1 -0
- package/dist/esm/runtime/web-lifecycle.d.ts +13 -0
- package/dist/esm/runtime/web-lifecycle.d.ts.map +1 -0
- package/dist/esm/runtime/web-lifecycle.js +36 -0
- package/dist/esm/runtime/web-lifecycle.js.map +1 -0
- package/dist/esm/runtime/web.d.ts +14 -0
- package/dist/esm/runtime/web.d.ts.map +1 -0
- package/dist/esm/runtime/web.js +58 -0
- package/dist/esm/runtime/web.js.map +1 -0
- package/dist/esm/shims/index.browser.d.ts +26 -0
- package/dist/esm/shims/index.browser.d.ts.map +1 -0
- package/dist/esm/shims/index.browser.js +54 -0
- package/dist/esm/shims/index.browser.js.map +1 -0
- package/dist/esm/shims/index.d.ts +15 -0
- package/dist/esm/shims/index.d.ts.map +1 -0
- package/dist/esm/shims/index.js +22 -0
- package/dist/esm/shims/index.js.map +1 -0
- package/dist/esm/transport/cluster-ipc.d.ts +36 -0
- package/dist/esm/transport/cluster-ipc.d.ts.map +1 -0
- package/dist/esm/transport/cluster-ipc.js +71 -0
- package/dist/esm/transport/cluster-ipc.js.map +1 -0
- package/dist/esm/transport/console.d.ts +28 -0
- package/dist/esm/transport/console.d.ts.map +1 -0
- package/dist/esm/transport/console.js +44 -0
- package/dist/esm/transport/console.js.map +1 -0
- package/dist/esm/transport/electron-ipc.d.ts +69 -0
- package/dist/esm/transport/electron-ipc.d.ts.map +1 -0
- package/dist/esm/transport/electron-ipc.js +146 -0
- package/dist/esm/transport/electron-ipc.js.map +1 -0
- package/dist/esm/transport/file.d.ts +190 -0
- package/dist/esm/transport/file.d.ts.map +1 -0
- package/dist/esm/transport/file.js +662 -0
- package/dist/esm/transport/file.js.map +1 -0
- package/dist/esm/transport/index.d.ts +9 -0
- package/dist/esm/transport/index.d.ts.map +1 -0
- package/dist/esm/transport/index.js +9 -0
- package/dist/esm/transport/index.js.map +1 -0
- package/dist/esm/transport/live.d.ts +72 -0
- package/dist/esm/transport/live.d.ts.map +1 -0
- package/dist/esm/transport/live.js +100 -0
- package/dist/esm/transport/live.js.map +1 -0
- package/dist/esm/transport/otlp.d.ts +97 -0
- package/dist/esm/transport/otlp.d.ts.map +1 -0
- package/dist/esm/transport/otlp.js +190 -0
- package/dist/esm/transport/otlp.js.map +1 -0
- package/dist/esm/transport/rotating-file.d.ts +67 -0
- package/dist/esm/transport/rotating-file.d.ts.map +1 -0
- package/dist/esm/transport/rotating-file.js +175 -0
- package/dist/esm/transport/rotating-file.js.map +1 -0
- package/dist/esm/transport/transport.d.ts +35 -0
- package/dist/esm/transport/transport.d.ts.map +1 -0
- package/dist/esm/transport/transport.js +2 -0
- package/dist/esm/transport/transport.js.map +1 -0
- package/dist/esm/transport/worker-ipc.d.ts +43 -0
- package/dist/esm/transport/worker-ipc.d.ts.map +1 -0
- package/dist/esm/transport/worker-ipc.js +101 -0
- package/dist/esm/transport/worker-ipc.js.map +1 -0
- package/dist/esm/types.d.ts +72 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +39 -0
- package/dist/esm/types.js.map +1 -0
- package/package.json +128 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). This file is generated from git history by `scripts/gen-changelog.mjs` (run via `yarn changelog`) and refreshed automatically on each release.
|
|
6
|
+
|
|
7
|
+
## [Unreleased] - 2026-08-29
|
|
8
|
+
|
|
9
|
+
- fix(docs): 更新 GitHub 链接以指向正确的仓库
|
|
10
|
+
- feat: define immutable LogEntry contract and zero-copy IPC transfer
|
|
11
|
+
- feat(logger): 添加异步插件拦截顺序处理,确保传输队列独立,避免阻塞
|
|
12
|
+
- feat: add P1 features (stderrLevels, JSON flatten, serializer/redact presets, env level & namespace filter, OTel trace plugin)
|
|
13
|
+
- feat(logger): 添加全局错误处理和超时机制,确保内部错误不会导致调用方崩溃
|
|
14
|
+
- feat(docs): 更新文档以添加新功能和示例,包括上下文导出、传输器过滤器和生产模式示例
|
|
15
|
+
- feat(sampler): 添加采样器以降低日志量,支持概率采样和限速策略
|
|
16
|
+
- feat(logger): 添加子 logger 支持,合并上下文并允许级别覆盖 feat(otlp): 映射 traceId/spanId 上下文到 OTLP 追踪字段 test: 添加子 logger 和 OTLP 传输器的单元测试
|
|
17
|
+
- feat(transport): 添加 onError 钩子以处理写入失败的情况
|
|
18
|
+
- feat(transport): 添加 OtlpTransport 以支持通过 OTLP HTTP/JSON 转发日志
|
|
19
|
+
- feat(processor): 添加序列化处理器以在格式化前归一化值
|
|
20
|
+
- feat(transport): add optional minimum level for transports to filter log entries
|
|
21
|
+
- feat(core): add crash capture, console bridge and exit auto-flush
|
|
22
|
+
- feat(context): ambient async context via AsyncLocalStorage with browser no-op
|
|
23
|
+
- feat(redact): support path/wildcard redaction over context, metadata and args
|
|
24
|
+
- test: 更新日志文件名称检查以确保包含 Lograil 和文件类型
|
|
25
|
+
- feat: 更新 Electron 运行时以支持主进程和渲染进程的独立日志文件
|
|
26
|
+
- feat: 增加 logo
|
|
27
|
+
- feat: refactor CI and release workflows to use a shared verification pipeline
|
|
28
|
+
- test: increase timeout for daily log rotation test
|
|
29
|
+
- chore: add lint:fix and format scripts to package.json
|
|
30
|
+
- fix: update GitHub token reference in workflows for docs deployment
|
|
31
|
+
- feat: add release workflow for versioned publishing and docs deployment
|
|
32
|
+
- feat: add AGENTS.md for AI coding agent guidance and project setup
|
|
33
|
+
- docs: update repository references from electron-logger to lograil
|
|
34
|
+
- chore: update electron dev deps
|
|
35
|
+
- feat: add .gitattributes for consistent line endings and binary file handling
|
|
36
|
+
- feat: init
|
|
37
|
+
- Create README.md
|
|
38
|
+
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Axetroy
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
<img src="./logo.svg" alt="lograil" width="128" height="128" />
|
|
3
|
+
</div>
|
|
4
|
+
|
|
5
|
+
# lograil
|
|
6
|
+
|
|
7
|
+
Structured, secure logging for **Web**, **Node.js**, and **Electron** — three first-class runtimes, one zero-config `logger`, pluggable transports, filters, processors, formatters, and plugins. Extend to any other platform through the plugin and runtime-adapter APIs.
|
|
8
|
+
|
|
9
|
+
The same `import { logger } from 'lograil'` works untouched in every runtime. On Electron, the main process writes logs to the console **and** daily rotating files, and renderer logs are forwarded over IPC automatically; on Node it persists to a rotating file by default; in the browser it speaks the console and any remote transport you add.
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install lograil
|
|
15
|
+
# yarn / pnpm / bun add lograil
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Quick start
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
import { logger } from 'lograil';
|
|
22
|
+
|
|
23
|
+
logger.info('app started', { version: '1.0.0' });
|
|
24
|
+
logger.error(new Error('something went wrong'));
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Need custom behavior? Use `createLogger({ level, pipeline, transports, runtime })` and the plugin API.
|
|
28
|
+
|
|
29
|
+
## Documentation
|
|
30
|
+
|
|
31
|
+
Full guides, API reference, and examples are on the **docs site**:
|
|
32
|
+
|
|
33
|
+
**https://axetroy.github.io/lograil/**
|
|
34
|
+
|
|
35
|
+
- Getting started · Configuration · Transports · Plugins
|
|
36
|
+
- Runtimes (Web, Node.js, Electron) & extending to others via plugins
|
|
37
|
+
|
|
38
|
+
## License
|
|
39
|
+
|
|
40
|
+
MIT
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type AmbientContext = Record<string, unknown>;
|
|
2
|
+
/**
|
|
3
|
+
* Browser / non-Node stub. `AsyncLocalStorage` is unavailable here, so ambient
|
|
4
|
+
* context is a no-op — logs are unaffected and no context propagates. The real
|
|
5
|
+
* implementation (`async-context.ts`) is selected over this file in Node builds
|
|
6
|
+
* via the `browser` field in `package.json`.
|
|
7
|
+
*/
|
|
8
|
+
export declare const asyncContext: {
|
|
9
|
+
run<T>(fn: () => T, _context: AmbientContext): T;
|
|
10
|
+
runAsync<T>(fn: () => Promise<T>, _context: AmbientContext): Promise<T>;
|
|
11
|
+
get(): AmbientContext;
|
|
12
|
+
supported(): boolean;
|
|
13
|
+
};
|
|
14
|
+
/** Run `fn` with `context` active as the ambient logging context (no-op outside Node). */
|
|
15
|
+
export declare function runWithContext<T>(fn: () => T, _context: AmbientContext): T;
|
|
16
|
+
//# sourceMappingURL=async-context.browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-context.browser.d.ts","sourceRoot":"","sources":["../../../src/context/async-context.browser.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAErD;;;;;GAKG;AACH,eAAO,MAAM,YAAY;QACnB,CAAC,MAAM,MAAM,CAAC,YAAY,cAAc,GAAG,CAAC;aAGvC,CAAC,MAAM,MAAM,OAAO,CAAC,CAAC,CAAC,YAAY,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;WAGhE,cAAc;iBAGR,OAAO;CAGrB,CAAC;AAEF,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,cAAc,GAAG,CAAC,CAE1E"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.asyncContext = void 0;
|
|
4
|
+
exports.runWithContext = runWithContext;
|
|
5
|
+
/**
|
|
6
|
+
* Browser / non-Node stub. `AsyncLocalStorage` is unavailable here, so ambient
|
|
7
|
+
* context is a no-op — logs are unaffected and no context propagates. The real
|
|
8
|
+
* implementation (`async-context.ts`) is selected over this file in Node builds
|
|
9
|
+
* via the `browser` field in `package.json`.
|
|
10
|
+
*/
|
|
11
|
+
exports.asyncContext = {
|
|
12
|
+
run(fn, _context) {
|
|
13
|
+
return fn();
|
|
14
|
+
},
|
|
15
|
+
runAsync(fn, _context) {
|
|
16
|
+
return fn();
|
|
17
|
+
},
|
|
18
|
+
get() {
|
|
19
|
+
return {};
|
|
20
|
+
},
|
|
21
|
+
supported() {
|
|
22
|
+
return false;
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
/** Run `fn` with `context` active as the ambient logging context (no-op outside Node). */
|
|
26
|
+
function runWithContext(fn, _context) {
|
|
27
|
+
return fn();
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=async-context.browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-context.browser.js","sourceRoot":"","sources":["../../../src/context/async-context.browser.ts"],"names":[],"mappings":";;;AAwBA,wCAEC;AAxBD;;;;;GAKG;AACU,QAAA,YAAY,GAAG;IAC1B,GAAG,CAAI,EAAW,EAAE,QAAwB;QAC1C,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;IACD,QAAQ,CAAI,EAAoB,EAAE,QAAwB;QACxD,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;IACD,GAAG;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,SAAS;QACP,OAAO,KAAK,CAAC;IACf,CAAC;CACF,CAAC;AAEF,0FAA0F;AAC1F,SAAgB,cAAc,CAAI,EAAW,EAAE,QAAwB;IACrE,OAAO,EAAE,EAAE,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type AmbientContext = Record<string, unknown>;
|
|
2
|
+
export declare const asyncContext: {
|
|
3
|
+
run<T>(fn: () => T, context: AmbientContext): T;
|
|
4
|
+
runAsync<T>(fn: () => Promise<T>, context: AmbientContext): Promise<T>;
|
|
5
|
+
get(): AmbientContext;
|
|
6
|
+
supported(): boolean;
|
|
7
|
+
};
|
|
8
|
+
/** Run `fn` with `context` active as the ambient logging context. */
|
|
9
|
+
export declare function runWithContext<T>(fn: () => T, context: AmbientContext): T;
|
|
10
|
+
//# sourceMappingURL=async-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-context.d.ts","sourceRoot":"","sources":["../../../src/context/async-context.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAerD,eAAO,MAAM,YAAY;QACnB,CAAC,MAAM,MAAM,CAAC,WAAW,cAAc,GAAG,CAAC;aAGtC,CAAC,MAAM,MAAM,OAAO,CAAC,CAAC,CAAC,WAAW,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;WAG/D,cAAc;iBAGR,OAAO;CAGrB,CAAC;AAIF,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,cAAc,GAAG,CAAC,CAEzE"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.asyncContext = void 0;
|
|
4
|
+
exports.runWithContext = runWithContext;
|
|
5
|
+
const node_async_hooks_1 = require("node:async_hooks");
|
|
6
|
+
/**
|
|
7
|
+
* Ambient (request-scoped) context propagation.
|
|
8
|
+
*
|
|
9
|
+
* Built on `AsyncLocalStorage`, so a context set with {@link runWithContext}
|
|
10
|
+
* is automatically visible to **every** log call inside `fn` — including those
|
|
11
|
+
* reached after `await` — without manual plumbing. In non-Node runtimes this
|
|
12
|
+
* module is swapped for `async-context.browser.js` (via `package.json` `browser`)
|
|
13
|
+
* which is a no-op, so the API is safe to call everywhere.
|
|
14
|
+
*/
|
|
15
|
+
// Shared frozen empty object returned when no async store is active, so the
|
|
16
|
+
// common (no ambient context) path allocates nothing on every `get()`.
|
|
17
|
+
const EMPTY_AMBIENT = Object.freeze({});
|
|
18
|
+
exports.asyncContext = {
|
|
19
|
+
run(fn, context) {
|
|
20
|
+
return storage.run(context, fn);
|
|
21
|
+
},
|
|
22
|
+
runAsync(fn, context) {
|
|
23
|
+
return storage.run(context, fn);
|
|
24
|
+
},
|
|
25
|
+
get() {
|
|
26
|
+
return storage.getStore() ?? EMPTY_AMBIENT;
|
|
27
|
+
},
|
|
28
|
+
supported() {
|
|
29
|
+
return true;
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
const storage = new node_async_hooks_1.AsyncLocalStorage();
|
|
33
|
+
/** Run `fn` with `context` active as the ambient logging context. */
|
|
34
|
+
function runWithContext(fn, context) {
|
|
35
|
+
return exports.asyncContext.run(fn, context);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=async-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-context.js","sourceRoot":"","sources":["../../../src/context/async-context.ts"],"names":[],"mappings":";;;AAmCA,wCAEC;AArCD,uDAAqD;AAIrD;;;;;;;;GAQG;AACH,4EAA4E;AAC5E,uEAAuE;AACvE,MAAM,aAAa,GAAmB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAE3C,QAAA,YAAY,GAAG;IAC1B,GAAG,CAAI,EAAW,EAAE,OAAuB;QACzC,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAClC,CAAC;IACD,QAAQ,CAAI,EAAoB,EAAE,OAAuB;QACvD,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAClC,CAAC;IACD,GAAG;QACD,OAAO,OAAO,CAAC,QAAQ,EAAE,IAAI,aAAa,CAAC;IAC7C,CAAC;IACD,SAAS;QACP,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,oCAAiB,EAAkB,CAAC;AAExD,qEAAqE;AACrE,SAAgB,cAAc,CAAI,EAAW,EAAE,OAAuB;IACpE,OAAO,oBAAY,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context module.
|
|
3
|
+
*
|
|
4
|
+
* Manages structured contextual data (request id, user id, window id, etc.)
|
|
5
|
+
* that is attached to every log entry. Contexts are hierarchical:
|
|
6
|
+
* a global context provides defaults for all loggers, and child loggers
|
|
7
|
+
* can carry their own scoped context.
|
|
8
|
+
*/
|
|
9
|
+
export interface ContextStore {
|
|
10
|
+
/** Read the full context object. */
|
|
11
|
+
get(): Record<string, unknown>;
|
|
12
|
+
/** Set a single key. */
|
|
13
|
+
set(key: string, value: unknown): void;
|
|
14
|
+
/** Merge multiple keys at once. Returns the store for chaining. */
|
|
15
|
+
merge(values: Record<string, unknown>): ContextStore;
|
|
16
|
+
/** Remove a single key. */
|
|
17
|
+
delete(key: string): void;
|
|
18
|
+
/** Reset the store to empty. */
|
|
19
|
+
clear(): void;
|
|
20
|
+
/** Create a child store seeded with the current values. */
|
|
21
|
+
child(): ContextStore;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* A shared, frozen empty record. Returned by `ContextStore.get()` when empty
|
|
25
|
+
* and used as the default `metadata` for every entry, so the hot path never
|
|
26
|
+
* allocates an empty object — and `freezeEntry` can recognise it as a sentinel
|
|
27
|
+
* and skip cloning/freezing entirely.
|
|
28
|
+
*/
|
|
29
|
+
export declare const EMPTY_RECORD: Record<string, unknown>;
|
|
30
|
+
/** True when the record has no own enumerable keys. */
|
|
31
|
+
export declare function isEmptyRecord(o: Record<string, unknown>): boolean;
|
|
32
|
+
export declare function createContextStore(initial?: Record<string, unknown>): ContextStore;
|
|
33
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/context/context.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,YAAY;IAC3B,oCAAoC;IACpC,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,wBAAwB;IACxB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACvC,mEAAmE;IACnE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAAC;IACrD,2BAA2B;IAC3B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,gCAAgC;IAChC,KAAK,IAAI,IAAI,CAAC;IACd,2DAA2D;IAC3D,KAAK,IAAI,YAAY,CAAC;CACvB;AAID;;;;;GAKG;AACH,eAAO,MAAM,YAAY,yBAAgB,CAAC;AAE1C,uDAAuD;AACvD,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAGjE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CA6BlF"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Context module.
|
|
4
|
+
*
|
|
5
|
+
* Manages structured contextual data (request id, user id, window id, etc.)
|
|
6
|
+
* that is attached to every log entry. Contexts are hierarchical:
|
|
7
|
+
* a global context provides defaults for all loggers, and child loggers
|
|
8
|
+
* can carry their own scoped context.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.EMPTY_RECORD = void 0;
|
|
12
|
+
exports.isEmptyRecord = isEmptyRecord;
|
|
13
|
+
exports.createContextStore = createContextStore;
|
|
14
|
+
const EMPTY_CONTEXT = Object.freeze({});
|
|
15
|
+
/**
|
|
16
|
+
* A shared, frozen empty record. Returned by `ContextStore.get()` when empty
|
|
17
|
+
* and used as the default `metadata` for every entry, so the hot path never
|
|
18
|
+
* allocates an empty object — and `freezeEntry` can recognise it as a sentinel
|
|
19
|
+
* and skip cloning/freezing entirely.
|
|
20
|
+
*/
|
|
21
|
+
exports.EMPTY_RECORD = EMPTY_CONTEXT;
|
|
22
|
+
/** True when the record has no own enumerable keys. */
|
|
23
|
+
function isEmptyRecord(o) {
|
|
24
|
+
for (const _k in o)
|
|
25
|
+
return false;
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
function createContextStore(initial) {
|
|
29
|
+
let data = { ...(initial ?? {}) };
|
|
30
|
+
const store = {
|
|
31
|
+
get() {
|
|
32
|
+
// Avoid cloning (and allocating) when the store is empty — the shared
|
|
33
|
+
// frozen object can never be mutated by callers.
|
|
34
|
+
for (const _k in data)
|
|
35
|
+
return { ...data };
|
|
36
|
+
return EMPTY_CONTEXT;
|
|
37
|
+
},
|
|
38
|
+
set(key, value) {
|
|
39
|
+
data[key] = value;
|
|
40
|
+
},
|
|
41
|
+
merge(values) {
|
|
42
|
+
data = { ...data, ...values };
|
|
43
|
+
return store;
|
|
44
|
+
},
|
|
45
|
+
delete(key) {
|
|
46
|
+
delete data[key];
|
|
47
|
+
},
|
|
48
|
+
clear() {
|
|
49
|
+
data = {};
|
|
50
|
+
},
|
|
51
|
+
child() {
|
|
52
|
+
return createContextStore(data);
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
return store;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/context/context.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AA4BH,sCAGC;AAED,gDA6BC;AA7CD,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAA4B,CAAC;AAEnE;;;;;GAKG;AACU,QAAA,YAAY,GAAG,aAAa,CAAC;AAE1C,uDAAuD;AACvD,SAAgB,aAAa,CAAC,CAA0B;IACtD,KAAK,MAAM,EAAE,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACjC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,kBAAkB,CAAC,OAAiC;IAClE,IAAI,IAAI,GAA4B,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;IAE3D,MAAM,KAAK,GAAiB;QAC1B,GAAG;YACD,sEAAsE;YACtE,iDAAiD;YACjD,KAAK,MAAM,EAAE,IAAI,IAAI;gBAAE,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;YAC1C,OAAO,aAAa,CAAC;QACvB,CAAC;QACD,GAAG,CAAC,GAAG,EAAE,KAAK;YACZ,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACpB,CAAC;QACD,KAAK,CAAC,MAAM;YACV,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,CAAC,GAAG;YACR,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,KAAK;YACH,IAAI,GAAG,EAAE,CAAC;QACZ,CAAC;QACD,KAAK;YACH,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;KACF,CAAC;IAEF,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/context/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./context.js"), exports);
|
|
18
|
+
__exportStar(require("./async-context.js"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/context/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,qDAAmC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { LogEntry } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* An entry that has crossed the immutability boundary: the entry itself and its
|
|
4
|
+
* `context`, `metadata` and `args` containers are frozen. Nested values are
|
|
5
|
+
* intentionally NOT deep-frozen (that would defeat the zero-copy goal) and must
|
|
6
|
+
* be treated as immutable by convention.
|
|
7
|
+
*/
|
|
8
|
+
export type FrozenLogEntry = Readonly<LogEntry> & {
|
|
9
|
+
readonly context: Readonly<Record<string, unknown>>;
|
|
10
|
+
readonly metadata: Readonly<Record<string, unknown>>;
|
|
11
|
+
readonly args: readonly unknown[];
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Freeze a {@link LogEntry} at its transport boundary so it can be shared by
|
|
15
|
+
* reference (zero-copy) across all transports, plugins and formatters without
|
|
16
|
+
* any of them being able to mutate it.
|
|
17
|
+
*
|
|
18
|
+
* Behaviour:
|
|
19
|
+
* - The entry and its `context` / `metadata` / `args` containers are frozen.
|
|
20
|
+
* - When `context` is the logger's *live* ambient context (not already a frozen,
|
|
21
|
+
* safe object) it is first copied into a fresh frozen snapshot. This prevents
|
|
22
|
+
* us from freezing the logger's shared state and ensures an already-emitted
|
|
23
|
+
* entry can never be mutated by a later `setContext`.
|
|
24
|
+
* - It is a no-op (and idempotent) when the entry is already frozen.
|
|
25
|
+
*
|
|
26
|
+
* Nested values are left unfrozen on purpose: deep-freezing a potentially large
|
|
27
|
+
* object graph on every log call would erase the zero-copy performance benefit.
|
|
28
|
+
*/
|
|
29
|
+
export declare function freezeEntry<T extends LogEntry>(entry: T): T & FrozenLogEntry;
|
|
30
|
+
//# sourceMappingURL=entry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../../../src/core/entry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG;IAChD,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,CAAC;CACnC,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,QAAQ,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,cAAc,CAiB5E"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.freezeEntry = freezeEntry;
|
|
4
|
+
const context_js_1 = require("../context/context.js");
|
|
5
|
+
/**
|
|
6
|
+
* Freeze a {@link LogEntry} at its transport boundary so it can be shared by
|
|
7
|
+
* reference (zero-copy) across all transports, plugins and formatters without
|
|
8
|
+
* any of them being able to mutate it.
|
|
9
|
+
*
|
|
10
|
+
* Behaviour:
|
|
11
|
+
* - The entry and its `context` / `metadata` / `args` containers are frozen.
|
|
12
|
+
* - When `context` is the logger's *live* ambient context (not already a frozen,
|
|
13
|
+
* safe object) it is first copied into a fresh frozen snapshot. This prevents
|
|
14
|
+
* us from freezing the logger's shared state and ensures an already-emitted
|
|
15
|
+
* entry can never be mutated by a later `setContext`.
|
|
16
|
+
* - It is a no-op (and idempotent) when the entry is already frozen.
|
|
17
|
+
*
|
|
18
|
+
* Nested values are left unfrozen on purpose: deep-freezing a potentially large
|
|
19
|
+
* object graph on every log call would erase the zero-copy performance benefit.
|
|
20
|
+
*/
|
|
21
|
+
function freezeEntry(entry) {
|
|
22
|
+
if (Object.isFrozen(entry))
|
|
23
|
+
return entry;
|
|
24
|
+
const ctx = entry.context;
|
|
25
|
+
const meta = entry.metadata;
|
|
26
|
+
entry.context =
|
|
27
|
+
ctx === context_js_1.EMPTY_RECORD || Object.isFrozen(ctx) ? ctx : Object.freeze({ ...ctx });
|
|
28
|
+
// Skip cloning/freezing when empty: the shared `EMPTY_RECORD` sentinel is
|
|
29
|
+
// already frozen and reused by reference, so the common (no-metadata) path
|
|
30
|
+
// allocates nothing here.
|
|
31
|
+
entry.metadata =
|
|
32
|
+
meta === context_js_1.EMPTY_RECORD || Object.isFrozen(meta) ? meta : Object.freeze({ ...meta });
|
|
33
|
+
if (!Object.isFrozen(entry.args))
|
|
34
|
+
Object.freeze(entry.args);
|
|
35
|
+
return Object.freeze(entry);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry.js","sourceRoot":"","sources":["../../../src/core/entry.ts"],"names":[],"mappings":";;AA+BA,kCAiBC;AA/CD,sDAAqD;AAcrD;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,WAAW,CAAqB,KAAQ;IACtD,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAA2B,CAAC;IAE/D,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC;IAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC3B,KAA8C,CAAC,OAAO;QACrD,GAAG,KAAK,yBAAY,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;IAEjF,0EAA0E;IAC1E,2EAA2E;IAC3E,0BAA0B;IACzB,KAA+C,CAAC,QAAQ;QACvD,IAAI,KAAK,yBAAY,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IAErF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE5D,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAuB,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './level.js';
|
|
2
|
+
export * from './logger.js';
|
|
3
|
+
export * from './entry.js';
|
|
4
|
+
export * from './printf.js';
|
|
5
|
+
export { Pipeline } from '../pipeline/pipeline.js';
|
|
6
|
+
export type { PipelineOptions } from '../pipeline/pipeline.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.Pipeline = void 0;
|
|
18
|
+
__exportStar(require("./level.js"), exports);
|
|
19
|
+
__exportStar(require("./logger.js"), exports);
|
|
20
|
+
__exportStar(require("./entry.js"), exports);
|
|
21
|
+
__exportStar(require("./printf.js"), exports);
|
|
22
|
+
var pipeline_js_1 = require("../pipeline/pipeline.js");
|
|
23
|
+
Object.defineProperty(exports, "Pipeline", { enumerable: true, get: function () { return pipeline_js_1.Pipeline; } });
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,8CAA4B;AAC5B,6CAA2B;AAC3B,8CAA4B;AAC5B,uDAAmD;AAA1C,uGAAA,QAAQ,OAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { LogLevelName, LogLevelValue, LogLevelInput } from '../types.js';
|
|
2
|
+
import { LOG_LEVELS } from '../types.js';
|
|
3
|
+
export { LOG_LEVELS };
|
|
4
|
+
export type { LogLevelName, LogLevelValue, LogLevelInput };
|
|
5
|
+
/**
|
|
6
|
+
* Resolve a level name from a numeric value, falling back to the closest
|
|
7
|
+
* lower-known level when the exact value is not registered.
|
|
8
|
+
*/
|
|
9
|
+
export declare function levelNameFromValue(value: LogLevelValue): LogLevelName;
|
|
10
|
+
export declare function compareLevel(a: LogLevelInput, b: LogLevelInput): number;
|
|
11
|
+
export declare function isLevelEnabled(configured: LogLevelInput, candidate: LogLevelInput): boolean;
|
|
12
|
+
//# sourceMappingURL=level.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"level.d.ts","sourceRoot":"","sources":["../../../src/core/level.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAkB,MAAM,aAAa,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,CAAC;AAEtB,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;AAE3D;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,YAAY,CAWrE;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,MAAM,CAEvE;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,GAAG,OAAO,CAE3F"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LOG_LEVELS = void 0;
|
|
4
|
+
exports.levelNameFromValue = levelNameFromValue;
|
|
5
|
+
exports.compareLevel = compareLevel;
|
|
6
|
+
exports.isLevelEnabled = isLevelEnabled;
|
|
7
|
+
const types_js_1 = require("../types.js");
|
|
8
|
+
Object.defineProperty(exports, "LOG_LEVELS", { enumerable: true, get: function () { return types_js_1.LOG_LEVELS; } });
|
|
9
|
+
/**
|
|
10
|
+
* Resolve a level name from a numeric value, falling back to the closest
|
|
11
|
+
* lower-known level when the exact value is not registered.
|
|
12
|
+
*/
|
|
13
|
+
function levelNameFromValue(value) {
|
|
14
|
+
let best = 'trace';
|
|
15
|
+
let bestValue = -Infinity;
|
|
16
|
+
for (const name of Object.keys(types_js_1.LOG_LEVELS)) {
|
|
17
|
+
const lv = types_js_1.LOG_LEVELS[name];
|
|
18
|
+
if (lv <= value && lv > bestValue) {
|
|
19
|
+
best = name;
|
|
20
|
+
bestValue = lv;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return best;
|
|
24
|
+
}
|
|
25
|
+
function compareLevel(a, b) {
|
|
26
|
+
return (0, types_js_1.normalizeLevel)(a) - (0, types_js_1.normalizeLevel)(b);
|
|
27
|
+
}
|
|
28
|
+
function isLevelEnabled(configured, candidate) {
|
|
29
|
+
return (0, types_js_1.normalizeLevel)(candidate) >= (0, types_js_1.normalizeLevel)(configured);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=level.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"level.js","sourceRoot":"","sources":["../../../src/core/level.ts"],"names":[],"mappings":";;;AAWA,gDAWC;AAED,oCAEC;AAED,wCAEC;AA7BD,0CAAyD;AAEhD,2FAFA,qBAAU,OAEA;AAInB;;;GAGG;AACH,SAAgB,kBAAkB,CAAC,KAAoB;IACrD,IAAI,IAAI,GAAiB,OAAO,CAAC;IACjC,IAAI,SAAS,GAAG,CAAC,QAAQ,CAAC;IAC1B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,qBAAU,CAAmB,EAAE,CAAC;QAC7D,MAAM,EAAE,GAAG,qBAAU,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,GAAG,SAAS,EAAE,CAAC;YAClC,IAAI,GAAG,IAAI,CAAC;YACZ,SAAS,GAAG,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,YAAY,CAAC,CAAgB,EAAE,CAAgB;IAC7D,OAAO,IAAA,yBAAc,EAAC,CAAC,CAAC,GAAG,IAAA,yBAAc,EAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,SAAgB,cAAc,CAAC,UAAyB,EAAE,SAAwB;IAChF,OAAO,IAAA,yBAAc,EAAC,SAAS,CAAC,IAAI,IAAA,yBAAc,EAAC,UAAU,CAAC,CAAC;AACjE,CAAC"}
|