[{"data":1,"prerenderedAt":1562},["ShallowReactive",2],{"navigation_docs":3,"-compare-pino":567,"-compare-pino-surround":1557},[4,30,80,133,313,444,503,542],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Start","\u002Fstart","1.start",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Learn","\u002Flearn","2.learn",[35,40,45,50,55,60,65,70,75],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":61,"path":62,"stem":63,"icon":64},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":66,"path":67,"stem":68,"icon":69},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":71,"path":72,"stem":73,"icon":74},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":76,"path":77,"stem":78,"icon":79},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":81,"path":82,"stem":83,"children":84,"page":29},"CLI","\u002Fcli","3.cli",[85,88,93,98,103,108,113,118,123,128],{"title":36,"path":86,"stem":87,"icon":44},"\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":89,"path":90,"stem":91,"icon":92},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":94,"path":95,"stem":96,"icon":97},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":99,"path":100,"stem":101,"icon":102},"Rules","\u002Fcli\u002Frules","3.cli\u002F3.rules","i-lucide-list-checks",{"title":104,"path":105,"stem":106,"icon":107},"Scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring","i-lucide-gauge",{"title":109,"path":110,"stem":111,"icon":112},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":114,"path":115,"stem":116,"icon":117},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":119,"path":120,"stem":121,"icon":122},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":124,"path":125,"stem":126,"icon":127},"agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents","i-lucide-bot",{"title":129,"path":130,"stem":131,"icon":132},"Observability Score","\u002Fcli\u002Fobservability-score","3.cli\u002F9.observability-score","i-lucide-activity",{"title":134,"path":135,"stem":136,"children":137,"page":29},"Integrate","\u002Fintegrate","4.integrate",[138,142,225],{"title":36,"path":139,"stem":140,"icon":141},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":143,"path":144,"stem":145,"children":146,"page":29},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[147,150,180,205],{"title":36,"path":148,"stem":149,"icon":39},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":151,"path":152,"stem":153,"children":154,"page":29},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[155,160,165,170,175],{"title":156,"path":157,"stem":158,"icon":159},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":161,"path":162,"stem":163,"icon":164},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":166,"path":167,"stem":168,"icon":169},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":171,"path":172,"stem":173,"icon":174},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":176,"path":177,"stem":178,"icon":179},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":181,"path":182,"stem":183,"children":184,"page":29},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[185,190,195,200],{"title":186,"path":187,"stem":188,"icon":189},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":191,"path":192,"stem":193,"icon":194},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":196,"path":197,"stem":198,"icon":199},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":201,"path":202,"stem":203,"icon":204},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":206,"path":207,"stem":208,"children":209,"page":29},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[210,215,220],{"title":211,"path":212,"stem":213,"icon":214},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":216,"path":217,"stem":218,"icon":219},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":221,"path":222,"stem":223,"icon":224},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":226,"path":227,"stem":228,"children":229,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[230,234,239,244,249,254,259,264,269,274,279,284,289,294,298,303,308],{"title":36,"path":231,"stem":232,"icon":233},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":235,"path":236,"stem":237,"icon":238},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":240,"path":241,"stem":242,"icon":243},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":245,"path":246,"stem":247,"icon":248},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":250,"path":251,"stem":252,"icon":253},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":255,"path":256,"stem":257,"icon":258},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":260,"path":261,"stem":262,"icon":263},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":265,"path":266,"stem":267,"icon":268},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":270,"path":271,"stem":272,"icon":273},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":275,"path":276,"stem":277,"icon":278},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":280,"path":281,"stem":282,"icon":283},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":285,"path":286,"stem":287,"icon":288},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":290,"path":291,"stem":292,"icon":293},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":295,"path":296,"stem":297,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":299,"path":300,"stem":301,"icon":302},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":304,"path":305,"stem":306,"icon":307},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":309,"path":310,"stem":311,"icon":312},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":314,"path":315,"stem":316,"children":317,"page":29},"Use Cases","\u002Fuse-cases","5.use-cases",[318,321,326,354,381,413,434,439],{"title":36,"path":319,"stem":320,"icon":102},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":322,"path":323,"stem":324,"icon":325},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":327,"icon":328,"path":329,"stem":330,"children":331,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[332,335,340,345,350],{"title":36,"path":333,"stem":334,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":336,"path":337,"stem":338,"icon":339},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":341,"path":342,"stem":343,"icon":344},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":346,"path":347,"stem":348,"icon":349},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":351,"path":352,"stem":353,"icon":132},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry",{"title":355,"icon":356,"path":357,"stem":358,"children":359,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[360,363,368,373,377],{"title":36,"path":361,"stem":362,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":364,"path":365,"stem":366,"icon":367},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":369,"path":370,"stem":371,"icon":372},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":374,"path":375,"stem":376,"icon":325},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":378,"path":379,"stem":380,"icon":107},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":382,"icon":383,"path":384,"stem":385,"children":386,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[387,390,395,400,405,409],{"title":36,"path":388,"stem":389,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":391,"path":392,"stem":393,"icon":394},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":396,"path":397,"stem":398,"icon":399},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":401,"path":402,"stem":403,"icon":404},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":406,"path":407,"stem":408,"icon":383},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":410,"path":411,"stem":412,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":351,"icon":107,"path":414,"stem":415,"children":416,"page":29},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[417,420,425,430],{"title":36,"path":418,"stem":419,"icon":39},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":421,"path":422,"stem":423,"icon":424},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":426,"path":427,"stem":428,"icon":429},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":431,"path":432,"stem":433,"icon":79},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":435,"path":436,"stem":437,"icon":438},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":440,"path":441,"stem":442,"icon":443},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":445,"path":446,"stem":447,"children":448,"page":29},"Extend","\u002Fextend","6.extend",[449,453,458,463,467,472,476,480,484,488,493,498],{"title":36,"path":450,"stem":451,"icon":452},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":454,"path":455,"stem":456,"icon":457},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":459,"path":460,"stem":461,"icon":462},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":464,"path":465,"stem":466,"icon":457},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":468,"path":469,"stem":470,"icon":471},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":410,"path":473,"stem":474,"icon":475},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":477,"path":478,"stem":479,"icon":452},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":481,"path":482,"stem":483,"icon":438},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":485,"path":486,"stem":487,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":489,"path":490,"stem":491,"icon":492},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":494,"path":495,"stem":496,"icon":497},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":499,"path":500,"stem":501,"icon":502},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":431,"path":504,"stem":505,"children":506,"page":29},"\u002Freference","7.reference",[507,511,516,519,524,528,533,537],{"title":36,"path":508,"stem":509,"icon":510},"\u002Freference\u002Foverview","7.reference\u002F0.overview","i-lucide-book-marked",{"title":512,"path":513,"stem":514,"icon":515},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":378,"path":517,"stem":518,"icon":107},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":520,"path":521,"stem":522,"icon":523},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":525,"path":526,"stem":527,"icon":383},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":529,"path":530,"stem":531,"icon":532},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":534,"path":535,"stem":536,"icon":438},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":538,"path":539,"stem":540,"icon":541},"Cost","\u002Freference\u002Fcost","7.reference\u002F7.cost","i-lucide-receipt",{"title":543,"path":544,"stem":545,"children":546,"page":29},"Compare","\u002Fcompare","8.compare",[547,551,555,559,563],{"title":548,"path":549,"stem":550,"icon":532},"evlog vs Pino","\u002Fcompare\u002Fpino","8.compare\u002F1.pino",{"title":552,"path":553,"stem":554,"icon":199},"evlog vs OpenTelemetry","\u002Fcompare\u002Fopentelemetry","8.compare\u002F2.opentelemetry",{"title":556,"path":557,"stem":558,"icon":532},"evlog vs LogTape","\u002Fcompare\u002Flogtape","8.compare\u002F3.logtape",{"title":560,"path":561,"stem":562,"icon":532},"evlog vs Winston: formats and request events","\u002Fcompare\u002Fwinston","8.compare\u002F4.winston",{"title":564,"path":565,"stem":566,"icon":532},"evlog vs Consola: reporters and request context","\u002Fcompare\u002Fconsola","8.compare\u002F5.consola",{"id":568,"title":569,"body":570,"description":1543,"extension":1544,"links":1545,"meta":1553,"navigation":1554,"path":549,"seo":1555,"stem":550,"__hash__":1556},"docs\u002F8.compare\u002F1.pino.md","evlog vs Pino: request context and migration",{"type":571,"value":572,"toc":1537},"minimark",[573,577,582,712,729,733,747,754,1169,1175,1491,1502,1506,1509,1512,1516,1527,1533],[574,575,576],"p",{},"Your Pino setup already ships JSON logs. The next decision is how your application assembles request context. evlog provides an accumulator and a lifecycle for that context. Pino provides JSON logging, bindings, serializers, and transports that you can keep if they already fit your application.",[578,579,581],"h2",{"id":580},"compare-the-work-you-maintain","Compare the work you maintain",[583,584,585,601],"table",{},[586,587,588],"thead",{},[589,590,591,595,598],"tr",{},[592,593,594],"th",{},"Concern",[592,596,597],{},"evlog",[592,599,600],{},"Pino",[602,603,604,630,646,675,686,701],"tbody",{},[589,605,606,610,624],{},[607,608,609],"td",{},"Request context",[607,611,612,616,617,620,621],{},[613,614,615],"code",{},"createLogger()"," and typed ",[613,618,619],{},"set()"," calls accumulate fields until ",[613,622,623],{},"emit()",[607,625,626,629],{},[613,627,628],{},"child()"," attaches bindings to records. The application can accumulate an object and log it once.",[589,631,632,635,640],{},[607,633,634],{},"Adding bindings",[607,636,637,639],{},[613,638,619],{}," merges fields into the pending event",[607,641,642,645],{},[613,643,644],{},"setBindings()"," adds bindings after creation. It does not overwrite existing keys and can introduce duplicate keys.",[589,647,648,651,668],{},[607,649,650],{},"Error fields",[607,652,653,656,657,660,661,664,665],{},[613,654,655],{},"createError()"," carries ",[613,658,659],{},"why",", ",[613,662,663],{},"fix",", and ",[613,666,667],{},"link",[607,669,670,671,674],{},"Error serializers, including ",[613,672,673],{},"pino.stdSerializers.err",", shape error records.",[589,676,677,680,683],{},[607,678,679],{},"Extensibility",[607,681,682],{},"Plugins and enrichers hook into the event lifecycle",[607,684,685],{},"Per-key serializers, formatters, and transports",[589,687,688,691,698],{},[607,689,690],{},"Levels",[607,692,693,694,697],{},"Four severities, global ",[613,695,696],{},"minLevel",", sampling for wide events",[607,699,700],{},"Built-in and custom levels, mutable logger level",[589,702,703,706,709],{},[607,704,705],{},"Delivery",[607,707,708],{},"Drain adapters and configurable batching\u002Fretry",[607,710,711],{},"Destinations and transports, including worker-thread transports",[574,713,714,715,722,723,728],{},"Pino documents these contracts in its ",[716,717,721],"a",{"href":718,"rel":719},"https:\u002F\u002Fgithub.com\u002Fpinojs\u002Fpino\u002Fblob\u002Fmain\u002Fdocs\u002Fapi.md",[720],"nofollow","API reference",". A worker transport moves transport processing and delivery to a worker. The logger still performs the initial JSON serialization on the calling thread. See ",[716,724,727],{"href":725,"rel":726},"https:\u002F\u002Fgithub.com\u002Fpinojs\u002Fpino\u002Fblob\u002Fmain\u002Fdocs\u002Ftransports.md",[720],"Pino transports",".",[578,730,732],{"id":731},"compare-one-completed-operation","Compare one completed operation",[574,734,735,736,739,740,742,743,746],{},"Both libraries can emit one structured record for an operation. Install ",[613,737,738],{},"pino"," or ",[613,741,597],{}," and run the corresponding TypeScript file with Node.js 24. The ",[613,744,745],{},"decline"," argument exercises the failure path. These examples simulate the same checkout decision without calling a payment provider.",[574,748,749,750,753],{},"With Pino, the application owns the accumulated context and emits it in ",[613,751,752],{},"finally",":",[755,756,762],"pre",{"className":757,"code":758,"filename":759,"language":760,"meta":761,"style":761},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import pino from 'pino'\n\nconst logger = pino()\nconst context = { orderId: 'order-123', amount: 2999, outcome: 'pending' }\nlet failure: Error | undefined\n\ntry {\n  if (process.argv.includes('decline')) throw new Error('Payment declined')\n  context.outcome = 'paid'\n} catch (error) {\n  failure = error instanceof Error ? error : new Error(String(error))\n  context.outcome = 'declined'\n  process.exitCode = 1\n} finally {\n  if (failure) logger.error({ ...context, err: failure }, 'checkout completed')\n  else logger.info(context, 'checkout completed')\n}\n","checkout-pino.ts","typescript","",[613,763,764,790,797,817,873,894,899,908,962,983,998,1039,1057,1073,1083,1135,1163],{"__ignoreMap":761},[765,766,769,773,777,780,784,787],"span",{"class":767,"line":768},"line",1,[765,770,772],{"class":771},"s7zQu","import",[765,774,776],{"class":775},"sTEyZ"," pino ",[765,778,779],{"class":771},"from",[765,781,783],{"class":782},"sMK4o"," '",[765,785,738],{"class":786},"sfazB",[765,788,789],{"class":782},"'\n",[765,791,793],{"class":767,"line":792},2,[765,794,796],{"emptyLinePlaceholder":795},true,"\n",[765,798,800,804,807,810,814],{"class":767,"line":799},3,[765,801,803],{"class":802},"spNyl","const",[765,805,806],{"class":775}," logger ",[765,808,809],{"class":782},"=",[765,811,813],{"class":812},"s2Zo4"," pino",[765,815,816],{"class":775},"()\n",[765,818,820,822,825,827,830,834,836,838,841,844,847,850,852,856,858,861,863,865,868,870],{"class":767,"line":819},4,[765,821,803],{"class":802},[765,823,824],{"class":775}," context ",[765,826,809],{"class":782},[765,828,829],{"class":782}," {",[765,831,833],{"class":832},"swJcz"," orderId",[765,835,753],{"class":782},[765,837,783],{"class":782},[765,839,840],{"class":786},"order-123",[765,842,843],{"class":782},"'",[765,845,846],{"class":782},",",[765,848,849],{"class":832}," amount",[765,851,753],{"class":782},[765,853,855],{"class":854},"sbssI"," 2999",[765,857,846],{"class":782},[765,859,860],{"class":832}," outcome",[765,862,753],{"class":782},[765,864,783],{"class":782},[765,866,867],{"class":786},"pending",[765,869,843],{"class":782},[765,871,872],{"class":782}," }\n",[765,874,876,879,882,884,888,891],{"class":767,"line":875},5,[765,877,878],{"class":802},"let",[765,880,881],{"class":775}," failure",[765,883,753],{"class":782},[765,885,887],{"class":886},"sBMFI"," Error",[765,889,890],{"class":782}," |",[765,892,893],{"class":886}," undefined\n",[765,895,897],{"class":767,"line":896},6,[765,898,796],{"emptyLinePlaceholder":795},[765,900,902,905],{"class":767,"line":901},7,[765,903,904],{"class":771},"try",[765,906,907],{"class":782}," {\n",[765,909,911,914,917,920,922,925,927,930,933,935,937,939,942,945,948,950,952,954,957,959],{"class":767,"line":910},8,[765,912,913],{"class":771},"  if",[765,915,916],{"class":832}," (",[765,918,919],{"class":775},"process",[765,921,728],{"class":782},[765,923,924],{"class":775},"argv",[765,926,728],{"class":782},[765,928,929],{"class":812},"includes",[765,931,932],{"class":832},"(",[765,934,843],{"class":782},[765,936,745],{"class":786},[765,938,843],{"class":782},[765,940,941],{"class":832},")) ",[765,943,944],{"class":771},"throw",[765,946,947],{"class":782}," new",[765,949,887],{"class":812},[765,951,932],{"class":832},[765,953,843],{"class":782},[765,955,956],{"class":786},"Payment declined",[765,958,843],{"class":782},[765,960,961],{"class":832},")\n",[765,963,965,968,970,973,976,978,981],{"class":767,"line":964},9,[765,966,967],{"class":775},"  context",[765,969,728],{"class":782},[765,971,972],{"class":775},"outcome",[765,974,975],{"class":782}," =",[765,977,783],{"class":782},[765,979,980],{"class":786},"paid",[765,982,789],{"class":782},[765,984,986,989,992,995],{"class":767,"line":985},10,[765,987,988],{"class":782},"}",[765,990,991],{"class":771}," catch",[765,993,994],{"class":775}," (error) ",[765,996,997],{"class":782},"{\n",[765,999,1001,1004,1006,1009,1012,1014,1017,1019,1022,1024,1026,1028,1031,1033,1036],{"class":767,"line":1000},11,[765,1002,1003],{"class":775},"  failure",[765,1005,975],{"class":782},[765,1007,1008],{"class":775}," error",[765,1010,1011],{"class":782}," instanceof",[765,1013,887],{"class":886},[765,1015,1016],{"class":782}," ?",[765,1018,1008],{"class":775},[765,1020,1021],{"class":782}," :",[765,1023,947],{"class":782},[765,1025,887],{"class":812},[765,1027,932],{"class":832},[765,1029,1030],{"class":812},"String",[765,1032,932],{"class":832},[765,1034,1035],{"class":775},"error",[765,1037,1038],{"class":832},"))\n",[765,1040,1042,1044,1046,1048,1050,1052,1055],{"class":767,"line":1041},12,[765,1043,967],{"class":775},[765,1045,728],{"class":782},[765,1047,972],{"class":775},[765,1049,975],{"class":782},[765,1051,783],{"class":782},[765,1053,1054],{"class":786},"declined",[765,1056,789],{"class":782},[765,1058,1060,1063,1065,1068,1070],{"class":767,"line":1059},13,[765,1061,1062],{"class":775},"  process",[765,1064,728],{"class":782},[765,1066,1067],{"class":775},"exitCode",[765,1069,975],{"class":782},[765,1071,1072],{"class":854}," 1\n",[765,1074,1076,1078,1081],{"class":767,"line":1075},14,[765,1077,988],{"class":782},[765,1079,1080],{"class":771}," finally",[765,1082,907],{"class":782},[765,1084,1086,1088,1090,1093,1096,1099,1101,1103,1105,1108,1111,1114,1116,1119,1121,1123,1126,1128,1131,1133],{"class":767,"line":1085},15,[765,1087,913],{"class":771},[765,1089,916],{"class":832},[765,1091,1092],{"class":775},"failure",[765,1094,1095],{"class":832},") ",[765,1097,1098],{"class":775},"logger",[765,1100,728],{"class":782},[765,1102,1035],{"class":812},[765,1104,932],{"class":832},[765,1106,1107],{"class":782},"{",[765,1109,1110],{"class":782}," ...",[765,1112,1113],{"class":775},"context",[765,1115,846],{"class":782},[765,1117,1118],{"class":832}," err",[765,1120,753],{"class":782},[765,1122,881],{"class":775},[765,1124,1125],{"class":782}," },",[765,1127,783],{"class":782},[765,1129,1130],{"class":786},"checkout completed",[765,1132,843],{"class":782},[765,1134,961],{"class":832},[765,1136,1138,1141,1144,1146,1149,1151,1153,1155,1157,1159,1161],{"class":767,"line":1137},16,[765,1139,1140],{"class":771},"  else",[765,1142,1143],{"class":775}," logger",[765,1145,728],{"class":782},[765,1147,1148],{"class":812},"info",[765,1150,932],{"class":832},[765,1152,1113],{"class":775},[765,1154,846],{"class":782},[765,1156,783],{"class":782},[765,1158,1130],{"class":786},[765,1160,843],{"class":782},[765,1162,961],{"class":832},[765,1164,1166],{"class":767,"line":1165},17,[765,1167,1168],{"class":782},"}\n",[574,1170,1171,1172,753],{},"With evlog, the logger owns the accumulator and selects error severity after ",[613,1173,1174],{},"error()",[755,1176,1179],{"className":757,"code":1177,"filename":1178,"language":760,"meta":761,"style":761},"import { createLogger, initLogger } from 'evlog'\n\ninitLogger({ env: { service: 'checkout' }, pretty: false })\nconst log = createLogger({ orderId: 'order-123', amount: 2999, outcome: 'pending' })\n\ntry {\n  if (process.argv.includes('decline')) throw new Error('Payment declined')\n  log.set({ outcome: 'paid' })\n} catch (error) {\n  log.error(error instanceof Error ? error : new Error(String(error)))\n  log.set({ outcome: 'declined' })\n  process.exitCode = 1\n} finally {\n  log.emit()\n}\n","checkout-evlog.ts",[613,1180,1181,1207,1211,1254,1303,1307,1313,1355,1383,1393,1430,1456,1468,1476,1487],{"__ignoreMap":761},[765,1182,1183,1185,1187,1190,1192,1195,1198,1201,1203,1205],{"class":767,"line":768},[765,1184,772],{"class":771},[765,1186,829],{"class":782},[765,1188,1189],{"class":775}," createLogger",[765,1191,846],{"class":782},[765,1193,1194],{"class":775}," initLogger",[765,1196,1197],{"class":782}," }",[765,1199,1200],{"class":771}," from",[765,1202,783],{"class":782},[765,1204,597],{"class":786},[765,1206,789],{"class":782},[765,1208,1209],{"class":767,"line":792},[765,1210,796],{"emptyLinePlaceholder":795},[765,1212,1213,1216,1218,1220,1223,1225,1227,1230,1232,1234,1237,1239,1241,1244,1246,1250,1252],{"class":767,"line":799},[765,1214,1215],{"class":812},"initLogger",[765,1217,932],{"class":775},[765,1219,1107],{"class":782},[765,1221,1222],{"class":832}," env",[765,1224,753],{"class":782},[765,1226,829],{"class":782},[765,1228,1229],{"class":832}," service",[765,1231,753],{"class":782},[765,1233,783],{"class":782},[765,1235,1236],{"class":786},"checkout",[765,1238,843],{"class":782},[765,1240,1125],{"class":782},[765,1242,1243],{"class":832}," pretty",[765,1245,753],{"class":782},[765,1247,1249],{"class":1248},"sfNiH"," false",[765,1251,1197],{"class":782},[765,1253,961],{"class":775},[765,1255,1256,1258,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301],{"class":767,"line":819},[765,1257,803],{"class":802},[765,1259,1260],{"class":775}," log ",[765,1262,809],{"class":782},[765,1264,1189],{"class":812},[765,1266,932],{"class":775},[765,1268,1107],{"class":782},[765,1270,833],{"class":832},[765,1272,753],{"class":782},[765,1274,783],{"class":782},[765,1276,840],{"class":786},[765,1278,843],{"class":782},[765,1280,846],{"class":782},[765,1282,849],{"class":832},[765,1284,753],{"class":782},[765,1286,855],{"class":854},[765,1288,846],{"class":782},[765,1290,860],{"class":832},[765,1292,753],{"class":782},[765,1294,783],{"class":782},[765,1296,867],{"class":786},[765,1298,843],{"class":782},[765,1300,1197],{"class":782},[765,1302,961],{"class":775},[765,1304,1305],{"class":767,"line":875},[765,1306,796],{"emptyLinePlaceholder":795},[765,1308,1309,1311],{"class":767,"line":896},[765,1310,904],{"class":771},[765,1312,907],{"class":782},[765,1314,1315,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353],{"class":767,"line":901},[765,1316,913],{"class":771},[765,1318,916],{"class":832},[765,1320,919],{"class":775},[765,1322,728],{"class":782},[765,1324,924],{"class":775},[765,1326,728],{"class":782},[765,1328,929],{"class":812},[765,1330,932],{"class":832},[765,1332,843],{"class":782},[765,1334,745],{"class":786},[765,1336,843],{"class":782},[765,1338,941],{"class":832},[765,1340,944],{"class":771},[765,1342,947],{"class":782},[765,1344,887],{"class":812},[765,1346,932],{"class":832},[765,1348,843],{"class":782},[765,1350,956],{"class":786},[765,1352,843],{"class":782},[765,1354,961],{"class":832},[765,1356,1357,1360,1362,1365,1367,1369,1371,1373,1375,1377,1379,1381],{"class":767,"line":910},[765,1358,1359],{"class":775},"  log",[765,1361,728],{"class":782},[765,1363,1364],{"class":812},"set",[765,1366,932],{"class":832},[765,1368,1107],{"class":782},[765,1370,860],{"class":832},[765,1372,753],{"class":782},[765,1374,783],{"class":782},[765,1376,980],{"class":786},[765,1378,843],{"class":782},[765,1380,1197],{"class":782},[765,1382,961],{"class":832},[765,1384,1385,1387,1389,1391],{"class":767,"line":964},[765,1386,988],{"class":782},[765,1388,991],{"class":771},[765,1390,994],{"class":775},[765,1392,997],{"class":782},[765,1394,1395,1397,1399,1401,1403,1405,1407,1409,1411,1413,1415,1417,1419,1421,1423,1425,1427],{"class":767,"line":985},[765,1396,1359],{"class":775},[765,1398,728],{"class":782},[765,1400,1035],{"class":812},[765,1402,932],{"class":832},[765,1404,1035],{"class":775},[765,1406,1011],{"class":782},[765,1408,887],{"class":886},[765,1410,1016],{"class":782},[765,1412,1008],{"class":775},[765,1414,1021],{"class":782},[765,1416,947],{"class":782},[765,1418,887],{"class":812},[765,1420,932],{"class":832},[765,1422,1030],{"class":812},[765,1424,932],{"class":832},[765,1426,1035],{"class":775},[765,1428,1429],{"class":832},")))\n",[765,1431,1432,1434,1436,1438,1440,1442,1444,1446,1448,1450,1452,1454],{"class":767,"line":1000},[765,1433,1359],{"class":775},[765,1435,728],{"class":782},[765,1437,1364],{"class":812},[765,1439,932],{"class":832},[765,1441,1107],{"class":782},[765,1443,860],{"class":832},[765,1445,753],{"class":782},[765,1447,783],{"class":782},[765,1449,1054],{"class":786},[765,1451,843],{"class":782},[765,1453,1197],{"class":782},[765,1455,961],{"class":832},[765,1457,1458,1460,1462,1464,1466],{"class":767,"line":1041},[765,1459,1062],{"class":775},[765,1461,728],{"class":782},[765,1463,1067],{"class":775},[765,1465,975],{"class":782},[765,1467,1072],{"class":854},[765,1469,1470,1472,1474],{"class":767,"line":1059},[765,1471,988],{"class":782},[765,1473,1080],{"class":771},[765,1475,907],{"class":782},[765,1477,1478,1480,1482,1485],{"class":767,"line":1075},[765,1479,1359],{"class":775},[765,1481,728],{"class":782},[765,1483,1484],{"class":812},"emit",[765,1486,816],{"class":832},[765,1488,1489],{"class":767,"line":1085},[765,1490,1168],{"class":782},[574,1492,1493,1494,1497,1498,1501],{},"Each version emits one record on either path. Their envelopes differ: Pino uses a numeric level and its error serializer, while evlog adds its event metadata and duration. evlog's ",[716,1495,1496],{"href":47},"wide-event model"," becomes useful when several layers contribute fields and framework integrations own the request lifecycle. Pino's ",[613,1499,1500],{},"pino-http"," also provides automatic HTTP request logging.",[578,1503,1505],{"id":1504},"migrate-one-handler-before-changing-the-whole-application","Migrate one handler before changing the whole application",[574,1507,1508],{},"Inventory the fields your dashboards query, custom levels, serializers, and transport configuration. Map them explicitly before switching output. Pino serializers do not transfer unchanged into evlog plugins, and a custom transport may need a new drain.",[574,1510,1511],{},"Keep the existing Pino path for unrelated handlers while you validate one evlog integration. Avoid emitting duplicate records for the same request through both paths unless you deliberately account for that in queries and ingestion costs. Test successful requests, thrown errors, shutdown, and redaction using the same assertions about required fields.",[578,1513,1515],{"id":1514},"read-benchmark-conditions-before-choosing-on-speed","Read benchmark conditions before choosing on speed",[574,1517,1518,1519,1522,1523,1526],{},"The repository's historical comparison uses silent evlog event construction, Pino JSON writes to ",[613,1520,1521],{},"\u002Fdev\u002Fnull",", and different output counts in the request-lifecycle scenario. It does not establish an equivalent-output throughput ranking. The ",[716,1524,1525],{"href":517},"Performance reference"," records the workloads and how to measure your own configuration.",[574,1528,1529,1530,728],{},"Keep Pino when its serializers, ecosystem integrations, or worker transports already solve your problem. Choose evlog when its context accumulator, structured errors, and framework lifecycle remove application code you would otherwise maintain. For other choices, use ",[716,1531,1532],{"href":530},"evlog vs other loggers",[1534,1535,1536],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":761,"searchDepth":792,"depth":792,"links":1538},[1539,1540,1541,1542],{"id":580,"depth":792,"text":581},{"id":731,"depth":792,"text":732},{"id":1504,"depth":792,"text":1505},{"id":1514,"depth":792,"text":1515},"Compare request context, serializers, transports, and migration costs before moving a Pino application to evlog.","md",[1546,1550,1552],{"label":1547,"icon":107,"to":517,"color":1548,"variant":1549},"Performance Benchmarks","neutral","subtle",{"label":529,"icon":1551,"to":530,"color":1548,"variant":1549},"i-lucide-git-compare-arrows",{"label":46,"icon":49,"to":47,"color":1548,"variant":1549},{},{"title":548,"icon":532},{"title":569,"description":1543},"GGJ7RiFkbMN5JacsFz1FhX8_G1ZejM1V-YeLZyXXE54",[1558,1560],{"title":538,"path":539,"stem":540,"description":1559,"icon":541,"children":-1},"One request leaves one event instead of four lines: 56% fewer bytes, 75% fewer events. Which number moves your bill depends on your provider.",{"title":552,"path":553,"stem":554,"description":1561,"icon":199,"children":-1},"Send evlog events to an OpenTelemetry Collector over OTLP HTTP and attach the active trace context without replacing tracing.",1788901571514]