[{"data":1,"prerenderedAt":1706},["ShallowReactive",2],{"navigation_docs":3,"-learn-overview":451,"-learn-overview-surround":1701},[4,30,80,245,365,420],{"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},"Integrate","\u002Fintegrate","3.integrate",[85,89,157],{"title":36,"path":86,"stem":87,"icon":88},"\u002Fintegrate\u002Foverview","3.integrate\u002F0.overview","i-lucide-plug",{"title":90,"path":91,"stem":92,"children":93,"page":29},"Adapters","\u002Fintegrate\u002Fadapters","3.integrate\u002Fadapters",[94,97,137],{"title":36,"path":95,"stem":96,"icon":39},"\u002Fintegrate\u002Fadapters\u002Foverview","3.integrate\u002Fadapters\u002F01.overview",{"title":98,"path":99,"stem":100,"children":101,"page":29},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","3.integrate\u002Fadapters\u002Fcloud",[102,107,112,117,122,127,132],{"title":103,"path":104,"stem":105,"icon":106},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","3.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":108,"path":109,"stem":110,"icon":111},"OTLP","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fotlp","3.integrate\u002Fadapters\u002Fcloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":113,"path":114,"stem":115,"icon":116},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","3.integrate\u002Fadapters\u002Fcloud\u002F03.posthog","i-simple-icons-posthog",{"title":118,"path":119,"stem":120,"icon":121},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","3.integrate\u002Fadapters\u002Fcloud\u002F04.sentry","i-simple-icons-sentry",{"title":123,"path":124,"stem":125,"icon":126},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","3.integrate\u002Fadapters\u002Fcloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":128,"path":129,"stem":130,"icon":131},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","3.integrate\u002Fadapters\u002Fcloud\u002F06.datadog","i-simple-icons-datadog",{"title":133,"path":134,"stem":135,"icon":136},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fhyperdx","3.integrate\u002Fadapters\u002Fcloud\u002F07.hyperdx","i-custom-hyperdx",{"title":138,"path":139,"stem":140,"children":141,"page":29},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","3.integrate\u002Fadapters\u002Fself-hosted",[142,147,152],{"title":143,"path":144,"stem":145,"icon":146},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","3.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":148,"path":149,"stem":150,"icon":151},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","3.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":153,"path":154,"stem":155,"icon":156},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","3.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":158,"path":159,"stem":160,"children":161,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","3.integrate\u002Fframeworks",[162,166,171,176,181,186,191,196,201,206,211,216,221,226,230,235,240],{"title":36,"path":163,"stem":164,"icon":165},"\u002Fintegrate\u002Fframeworks\u002Foverview","3.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":167,"path":168,"stem":169,"icon":170},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","3.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":172,"path":173,"stem":174,"icon":175},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","3.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":177,"path":178,"stem":179,"icon":180},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","3.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":182,"path":183,"stem":184,"icon":185},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","3.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":187,"path":188,"stem":189,"icon":190},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","3.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":192,"path":193,"stem":194,"icon":195},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","3.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":197,"path":198,"stem":199,"icon":200},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","3.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":202,"path":203,"stem":204,"icon":205},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","3.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":207,"path":208,"stem":209,"icon":210},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","3.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":212,"path":213,"stem":214,"icon":215},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","3.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":217,"path":218,"stem":219,"icon":220},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","3.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":222,"path":223,"stem":224,"icon":225},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","3.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":227,"path":228,"stem":229,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","3.integrate\u002Fframeworks\u002F13.standalone",{"title":231,"path":232,"stem":233,"icon":234},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","3.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":236,"path":237,"stem":238,"icon":239},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","3.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":241,"path":242,"stem":243,"icon":244},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","3.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":246,"path":247,"stem":248,"children":249,"page":29},"Use Cases","\u002Fuse-cases","4.use-cases",[250,254,259,288,316,348,353,358],{"title":36,"path":251,"stem":252,"icon":253},"\u002Fuse-cases\u002Foverview","4.use-cases\u002F0.overview","i-lucide-list-checks",{"title":255,"path":256,"stem":257,"icon":258},"Client Logging","\u002Fuse-cases\u002Fclient-logging","4.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":260,"icon":261,"path":262,"stem":263,"children":264,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","4.use-cases\u002F2.ai-sdk",[265,268,273,278,283],{"title":36,"path":266,"stem":267,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","4.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":269,"path":270,"stem":271,"icon":272},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","4.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":274,"path":275,"stem":276,"icon":277},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","4.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":279,"path":280,"stem":281,"icon":282},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","4.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":284,"path":285,"stem":286,"icon":287},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","4.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":289,"icon":290,"path":291,"stem":292,"children":293,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","4.use-cases\u002F3.better-auth",[294,297,302,307,311],{"title":36,"path":295,"stem":296,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","4.use-cases\u002F3.better-auth\u002F01.overview",{"title":298,"path":299,"stem":300,"icon":301},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","4.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":303,"path":304,"stem":305,"icon":306},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","4.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":308,"path":309,"stem":310,"icon":258},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","4.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":312,"path":313,"stem":314,"icon":315},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","4.use-cases\u002F3.better-auth\u002F05.performance","i-lucide-gauge",{"title":317,"icon":318,"path":319,"stem":320,"children":321,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","4.use-cases\u002F4.audit",[322,325,330,335,340,344],{"title":36,"path":323,"stem":324,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","4.use-cases\u002F4.audit\u002F01.overview",{"title":326,"path":327,"stem":328,"icon":329},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","4.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":331,"path":332,"stem":333,"icon":334},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","4.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":336,"path":337,"stem":338,"icon":339},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","4.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":341,"path":342,"stem":343,"icon":318},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","4.use-cases\u002F4.audit\u002F05.compliance",{"title":345,"path":346,"stem":347,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","4.use-cases\u002F4.audit\u002F06.recipes",{"title":349,"path":350,"stem":351,"icon":352},"Enrichers","\u002Fuse-cases\u002Fenrichers","4.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":354,"path":355,"stem":356,"icon":357},"eve","\u002Fuse-cases\u002Feve","4.use-cases\u002F5.eve","i-custom-eve",{"title":284,"path":359,"stem":360,"children":361,"page":29},"\u002Fuse-cases\u002Ftelemetry","4.use-cases\u002F6.telemetry",[362],{"title":284,"path":363,"stem":364,"icon":315},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","4.use-cases\u002F6.telemetry\u002F01.overview",{"title":366,"path":367,"stem":368,"children":369,"page":29},"Extend","\u002Fextend","5.extend",[370,374,379,384,389,393,397,401,405,410,415],{"title":36,"path":371,"stem":372,"icon":373},"\u002Fextend\u002Foverview","5.extend\u002F0.overview","i-lucide-blocks",{"title":375,"path":376,"stem":377,"icon":378},"Stream","\u002Fextend\u002Fstream","5.extend\u002F1.stream","i-lucide-radio-tower",{"title":380,"path":381,"stem":382,"icon":383},"Custom framework","\u002Fextend\u002Fcustom-framework","5.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":385,"path":386,"stem":387,"icon":388},"FS reader","\u002Fextend\u002Ffs-reader","5.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":345,"path":390,"stem":391,"icon":392},"\u002Fextend\u002Fconsumer-recipes","5.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":394,"path":395,"stem":396,"icon":373},"Plugins","\u002Fextend\u002Fplugins","5.extend\u002F4.plugins",{"title":398,"path":399,"stem":400,"icon":352},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","5.extend\u002F5.custom-enrichers",{"title":402,"path":403,"stem":404,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","5.extend\u002F6.tail-sampling",{"title":406,"path":407,"stem":408,"icon":409},"Identity headers","\u002Fextend\u002Fidentity-headers","5.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":411,"path":412,"stem":413,"icon":414},"Custom drains","\u002Fextend\u002Fcustom-drains","5.extend\u002F8.custom-drains","i-lucide-share-2",{"title":416,"path":417,"stem":418,"icon":419},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","5.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":421,"path":422,"stem":423,"children":424,"page":29},"Reference","\u002Freference","6.reference",[425,430,433,438,442,447],{"title":426,"path":427,"stem":428,"icon":429},"Configuration","\u002Freference\u002Fconfiguration","6.reference\u002F1.configuration","i-lucide-settings",{"title":312,"path":431,"stem":432,"icon":315},"\u002Freference\u002Fperformance","6.reference\u002F2.performance",{"title":434,"path":435,"stem":436,"icon":437},"Vite Plugin","\u002Freference\u002Fvite-plugin","6.reference\u002F3.vite-plugin","i-custom-vite",{"title":439,"path":440,"stem":441,"icon":318},"Best Practices","\u002Freference\u002Fbest-practices","6.reference\u002F4.best-practices",{"title":443,"path":444,"stem":445,"icon":446},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","6.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":448,"path":449,"stem":450,"icon":352},"Agent Skills","\u002Freference\u002Fagent-skills","6.reference\u002F6.agent-skills",{"id":452,"title":453,"body":454,"description":1690,"extension":1691,"links":1692,"meta":1697,"navigation":1698,"path":37,"seo":1699,"stem":38,"__hash__":1700},"docs\u002F2.learn\u002F0.overview.md","Learn evlog",{"type":455,"value":456,"toc":1675},"minimark",[457,466,469,474,487,492,526,530,539,542,684,695,698,964,982,986,993,1149,1167,1171,1285,1289,1512,1521,1525,1528,1589,1593,1596,1665,1671],[458,459,460,461,465],"p",{},"This section is the ",[462,463,464],"strong",{},"mental model"," of evlog. By the end, you'll know exactly what evlog does, when each API fits, and how an event flows from your code to your drain.",[458,467,468],{},"If you're new, read it in order. If you've already shipped with evlog, jump to the page that matches your question.",[470,471,473],"callout",{"color":472,"icon":13},"info","All three modes coexist in the same logger. Pick per call — there's no upgrade path, no advanced mode, no toggle to flip. Same drains, same redaction, same types underneath.",[470,475,478,479,483,484,486],{"color":476,"icon":477},"neutral","i-lucide-globe","Not running an HTTP framework? See ",[480,481,482],"a",{"href":228},"Standalone TypeScript"," and ",[480,485,222],{"href":223},".",[488,489,491],"h2",{"id":490},"the-three-logging-modes","The three logging modes",[493,494,495,518,521],"card-group",{},[496,497,498,499,503,504,507,508,507,511,507,514,517],"card",{"color":476,"icon":44,"title":41,"to":42},"A fully-featured general-purpose logger. Replaces ",[500,501,502],"code",{},"console.log",", consola, pino, or winston with ",[500,505,506],{},"log.info",", ",[500,509,510],{},"log.error",[500,512,513],{},"log.warn",[500,515,516],{},"log.debug"," — same level filtering, drain pipeline, redaction, and pretty\u002FJSON output.",[496,519,520],{"color":476,"icon":49,"title":46,"to":47},"Accumulate context over a unit of work (a script, job, queue task, or request) then emit a single comprehensive event.",[496,522,525],{"color":476,"icon":523,"title":524,"to":163},"i-lucide-git-branch","Request Logging","Auto-managed wide events scoped to HTTP requests. Framework middleware creates the logger and emits it for you.",[488,527,529],{"id":528},"quick-comparison","Quick comparison",[531,532,534,535,538],"h3",{"id":533},"simple-logging-log","Simple Logging (",[500,536,537],{},"log",")",[458,540,541],{},"One event per call. No accumulation, no lifecycle management.",[543,544,550],"pre",{"className":545,"code":546,"filename":547,"language":548,"meta":549,"style":549},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { log } from 'evlog'\n\nlog.info('auth', 'User logged in')\nlog.error({ action: 'payment', error: 'card_declined', userId: 42 })\n","src\u002Findex.ts","typescript","",[500,551,552,585,592,626],{"__ignoreMap":549},[553,554,557,561,565,569,572,575,578,582],"span",{"class":555,"line":556},"line",1,[553,558,560],{"class":559},"s7zQu","import",[553,562,564],{"class":563},"sMK4o"," {",[553,566,568],{"class":567},"sTEyZ"," log",[553,570,571],{"class":563}," }",[553,573,574],{"class":559}," from",[553,576,577],{"class":563}," '",[553,579,581],{"class":580},"sfazB","evlog",[553,583,584],{"class":563},"'\n",[553,586,588],{"class":555,"line":587},2,[553,589,591],{"emptyLinePlaceholder":590},true,"\n",[553,593,595,597,599,602,605,608,611,613,616,618,621,623],{"class":555,"line":594},3,[553,596,537],{"class":567},[553,598,486],{"class":563},[553,600,472],{"class":601},"s2Zo4",[553,603,604],{"class":567},"(",[553,606,607],{"class":563},"'",[553,609,610],{"class":580},"auth",[553,612,607],{"class":563},[553,614,615],{"class":563},",",[553,617,577],{"class":563},[553,619,620],{"class":580},"User logged in",[553,622,607],{"class":563},[553,624,625],{"class":567},")\n",[553,627,629,631,633,636,638,641,645,648,650,653,655,657,660,662,664,667,669,671,674,676,680,682],{"class":555,"line":628},4,[553,630,537],{"class":567},[553,632,486],{"class":563},[553,634,635],{"class":601},"error",[553,637,604],{"class":567},[553,639,640],{"class":563},"{",[553,642,644],{"class":643},"swJcz"," action",[553,646,647],{"class":563},":",[553,649,577],{"class":563},[553,651,652],{"class":580},"payment",[553,654,607],{"class":563},[553,656,615],{"class":563},[553,658,659],{"class":643}," error",[553,661,647],{"class":563},[553,663,577],{"class":563},[553,665,666],{"class":580},"card_declined",[553,668,607],{"class":563},[553,670,615],{"class":563},[553,672,673],{"class":643}," userId",[553,675,647],{"class":563},[553,677,679],{"class":678},"sbssI"," 42",[553,681,571],{"class":563},[553,683,625],{"class":567},[531,685,687,688,691,692,538],{"id":686},"wide-events-createlogger-createrequestlogger","Wide Events (",[500,689,690],{},"createLogger"," \u002F ",[500,693,694],{},"createRequestLogger",[458,696,697],{},"One event per unit of work. Accumulate context progressively, emit when done.",[699,700,701,834],"code-group",{},[543,702,705],{"className":545,"code":703,"filename":704,"language":548,"meta":549,"style":549},"import { createLogger } from 'evlog'\n\nconst log = createLogger({ jobId: 'sync-001', queue: 'emails' })\nlog.set({ batch: { size: 50, processed: 50 } })\nlog.emit()\n","scripts\u002Fsync-job.ts",[500,706,707,726,730,778,821],{"__ignoreMap":549},[553,708,709,711,713,716,718,720,722,724],{"class":555,"line":556},[553,710,560],{"class":559},[553,712,564],{"class":563},[553,714,715],{"class":567}," createLogger",[553,717,571],{"class":563},[553,719,574],{"class":559},[553,721,577],{"class":563},[553,723,581],{"class":580},[553,725,584],{"class":563},[553,727,728],{"class":555,"line":587},[553,729,591],{"emptyLinePlaceholder":590},[553,731,732,736,739,742,744,746,748,751,753,755,758,760,762,765,767,769,772,774,776],{"class":555,"line":594},[553,733,735],{"class":734},"spNyl","const",[553,737,738],{"class":567}," log ",[553,740,741],{"class":563},"=",[553,743,715],{"class":601},[553,745,604],{"class":567},[553,747,640],{"class":563},[553,749,750],{"class":643}," jobId",[553,752,647],{"class":563},[553,754,577],{"class":563},[553,756,757],{"class":580},"sync-001",[553,759,607],{"class":563},[553,761,615],{"class":563},[553,763,764],{"class":643}," queue",[553,766,647],{"class":563},[553,768,577],{"class":563},[553,770,771],{"class":580},"emails",[553,773,607],{"class":563},[553,775,571],{"class":563},[553,777,625],{"class":567},[553,779,780,782,784,787,789,791,794,796,798,801,803,806,808,811,813,815,817,819],{"class":555,"line":628},[553,781,537],{"class":567},[553,783,486],{"class":563},[553,785,786],{"class":601},"set",[553,788,604],{"class":567},[553,790,640],{"class":563},[553,792,793],{"class":643}," batch",[553,795,647],{"class":563},[553,797,564],{"class":563},[553,799,800],{"class":643}," size",[553,802,647],{"class":563},[553,804,805],{"class":678}," 50",[553,807,615],{"class":563},[553,809,810],{"class":643}," processed",[553,812,647],{"class":563},[553,814,805],{"class":678},[553,816,571],{"class":563},[553,818,571],{"class":563},[553,820,625],{"class":567},[553,822,824,826,828,831],{"class":555,"line":823},5,[553,825,537],{"class":567},[553,827,486],{"class":563},[553,829,830],{"class":601},"emit",[553,832,833],{"class":567},"()\n",[543,835,838],{"className":545,"code":836,"filename":837,"language":548,"meta":549,"style":549},"import { createRequestLogger } from 'evlog'\n\nconst log = createRequestLogger({ method: 'POST', path: '\u002Fapi\u002Fcheckout' })\nlog.set({ user: { id: 1, plan: 'pro' } })\nlog.emit()\n","src\u002Fworker.ts",[500,839,840,859,863,907,954],{"__ignoreMap":549},[553,841,842,844,846,849,851,853,855,857],{"class":555,"line":556},[553,843,560],{"class":559},[553,845,564],{"class":563},[553,847,848],{"class":567}," createRequestLogger",[553,850,571],{"class":563},[553,852,574],{"class":559},[553,854,577],{"class":563},[553,856,581],{"class":580},[553,858,584],{"class":563},[553,860,861],{"class":555,"line":587},[553,862,591],{"emptyLinePlaceholder":590},[553,864,865,867,869,871,873,875,877,880,882,884,887,889,891,894,896,898,901,903,905],{"class":555,"line":594},[553,866,735],{"class":734},[553,868,738],{"class":567},[553,870,741],{"class":563},[553,872,848],{"class":601},[553,874,604],{"class":567},[553,876,640],{"class":563},[553,878,879],{"class":643}," method",[553,881,647],{"class":563},[553,883,577],{"class":563},[553,885,886],{"class":580},"POST",[553,888,607],{"class":563},[553,890,615],{"class":563},[553,892,893],{"class":643}," path",[553,895,647],{"class":563},[553,897,577],{"class":563},[553,899,900],{"class":580},"\u002Fapi\u002Fcheckout",[553,902,607],{"class":563},[553,904,571],{"class":563},[553,906,625],{"class":567},[553,908,909,911,913,915,917,919,922,924,926,929,931,934,936,939,941,943,946,948,950,952],{"class":555,"line":628},[553,910,537],{"class":567},[553,912,486],{"class":563},[553,914,786],{"class":601},[553,916,604],{"class":567},[553,918,640],{"class":563},[553,920,921],{"class":643}," user",[553,923,647],{"class":563},[553,925,564],{"class":563},[553,927,928],{"class":643}," id",[553,930,647],{"class":563},[553,932,933],{"class":678}," 1",[553,935,615],{"class":563},[553,937,938],{"class":643}," plan",[553,940,647],{"class":563},[553,942,577],{"class":563},[553,944,945],{"class":580},"pro",[553,947,607],{"class":563},[553,949,571],{"class":563},[553,951,571],{"class":563},[553,953,625],{"class":567},[553,955,956,958,960,962],{"class":555,"line":823},[553,957,537],{"class":567},[553,959,486],{"class":563},[553,961,830],{"class":601},[553,963,833],{"class":567},[458,965,966,968,969,971,972,507,975,978,979,486],{},[500,967,694],{}," is a thin wrapper around ",[500,970,690],{}," that pre-populates ",[500,973,974],{},"method",[500,976,977],{},"path",", and ",[500,980,981],{},"requestId",[531,983,985],{"id":984},"request-logging-framework-middleware","Request Logging (framework middleware)",[458,987,988,989,992],{},"Framework integrations create a wide event logger automatically on each request. ",[500,990,991],{},"useLogger(event)"," retrieves the logger that's already attached to the request context:",[543,994,997],{"className":545,"code":995,"filename":996,"language":548,"meta":549,"style":549},"import { useLogger } from 'evlog'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n  log.set({ user: { id: 1, plan: 'pro' } })\n  return { success: true }\n  \u002F\u002F auto-emitted on response end\n})\n","server\u002Fapi\u002Fcheckout.post.ts",[500,998,999,1018,1022,1053,1071,1114,1134,1141],{"__ignoreMap":549},[553,1000,1001,1003,1005,1008,1010,1012,1014,1016],{"class":555,"line":556},[553,1002,560],{"class":559},[553,1004,564],{"class":563},[553,1006,1007],{"class":567}," useLogger",[553,1009,571],{"class":563},[553,1011,574],{"class":559},[553,1013,577],{"class":563},[553,1015,581],{"class":580},[553,1017,584],{"class":563},[553,1019,1020],{"class":555,"line":587},[553,1021,591],{"emptyLinePlaceholder":590},[553,1023,1024,1027,1030,1033,1035,1038,1041,1045,1047,1050],{"class":555,"line":594},[553,1025,1026],{"class":559},"export",[553,1028,1029],{"class":559}," default",[553,1031,1032],{"class":601}," defineEventHandler",[553,1034,604],{"class":567},[553,1036,1037],{"class":734},"async",[553,1039,1040],{"class":563}," (",[553,1042,1044],{"class":1043},"sHdIc","event",[553,1046,538],{"class":563},[553,1048,1049],{"class":734}," =>",[553,1051,1052],{"class":563}," {\n",[553,1054,1055,1058,1060,1063,1065,1067,1069],{"class":555,"line":628},[553,1056,1057],{"class":734},"  const",[553,1059,568],{"class":567},[553,1061,1062],{"class":563}," =",[553,1064,1007],{"class":601},[553,1066,604],{"class":643},[553,1068,1044],{"class":567},[553,1070,625],{"class":643},[553,1072,1073,1076,1078,1080,1082,1084,1086,1088,1090,1092,1094,1096,1098,1100,1102,1104,1106,1108,1110,1112],{"class":555,"line":823},[553,1074,1075],{"class":567},"  log",[553,1077,486],{"class":563},[553,1079,786],{"class":601},[553,1081,604],{"class":643},[553,1083,640],{"class":563},[553,1085,921],{"class":643},[553,1087,647],{"class":563},[553,1089,564],{"class":563},[553,1091,928],{"class":643},[553,1093,647],{"class":563},[553,1095,933],{"class":678},[553,1097,615],{"class":563},[553,1099,938],{"class":643},[553,1101,647],{"class":563},[553,1103,577],{"class":563},[553,1105,945],{"class":580},[553,1107,607],{"class":563},[553,1109,571],{"class":563},[553,1111,571],{"class":563},[553,1113,625],{"class":643},[553,1115,1117,1120,1122,1125,1127,1131],{"class":555,"line":1116},6,[553,1118,1119],{"class":559},"  return",[553,1121,564],{"class":563},[553,1123,1124],{"class":643}," success",[553,1126,647],{"class":563},[553,1128,1130],{"class":1129},"sfNiH"," true",[553,1132,1133],{"class":563}," }\n",[553,1135,1137],{"class":555,"line":1136},7,[553,1138,1140],{"class":1139},"sHwdD","  \u002F\u002F auto-emitted on response end\n",[553,1142,1144,1147],{"class":555,"line":1143},8,[553,1145,1146],{"class":563},"}",[553,1148,625],{"class":567},[470,1150,1151,1153,1154,507,1157,507,1160,1163,1164,1166],{"color":472,"icon":13},[500,1152,991],{}," doesn't create a logger, it retrieves the one the framework middleware already attached to the event. Each framework has its own way to access it (",[500,1155,1156],{},"useLogger",[500,1158,1159],{},"req.log",[500,1161,1162],{},"c.get('log')",", etc.). In Nuxt, ",[500,1165,1156],{}," is auto-imported.",[488,1168,1170],{"id":1169},"when-to-use-what","When to use what",[1172,1173,1174,1196],"table",{},[1175,1176,1177],"thead",{},[1178,1179,1180,1183,1187,1193],"tr",{},[1181,1182],"th",{},[1181,1184,1185],{},[500,1186,537],{},[1181,1188,1189,691,1191],{},[500,1190,690],{},[500,1192,694],{},[1181,1194,1195],{},"Framework middleware",[1197,1198,1199,1216,1236,1255,1270],"tbody",{},[1178,1200,1201,1207,1210,1213],{},[1202,1203,1204],"td",{},[462,1205,1206],{},"Use case",[1202,1208,1209],{},"Quick one-off events",[1202,1211,1212],{},"Scripts, jobs, workers, queues, HTTP without a framework",[1202,1214,1215],{},"API routes with a framework integration",[1178,1217,1218,1223,1226,1232],{},[1202,1219,1220],{},[462,1221,1222],{},"Context",[1202,1224,1225],{},"Single call",[1202,1227,1228,1229],{},"Accumulate with ",[500,1230,1231],{},"set()",[1202,1233,1228,1234],{},[500,1235,1231],{},[1178,1237,1238,1243,1246,1252],{},[1202,1239,1240],{},[462,1241,1242],{},"Emit",[1202,1244,1245],{},"Immediate",[1202,1247,1248,1249],{},"Manual ",[500,1250,1251],{},"emit()",[1202,1253,1254],{},"Automatic on response end",[1178,1256,1257,1261,1264,1267],{},[1202,1258,1259],{},[462,1260,56],{},[1202,1262,1263],{},"None",[1202,1265,1266],{},"You manage it",[1202,1268,1269],{},"Framework manages it",[1178,1271,1272,1277,1280,1282],{},[1202,1273,1274],{},[462,1275,1276],{},"Output",[1202,1278,1279],{},"Console + drain",[1202,1281,1279],{},[1202,1283,1284],{},"Console + drain + enrich",[531,1286,1288],{"id":1287},"by-context","By context",[1172,1290,1291,1303],{},[1175,1292,1293],{},[1178,1294,1295,1297,1300],{},[1181,1296,1222],{},[1181,1298,1299],{},"Best fit",[1181,1301,1302],{},"Why",[1197,1304,1305,1323,1338,1359,1380,1398,1422,1440,1456,1476,1491],{},[1178,1306,1307,1312,1320],{},[1202,1308,1309],{},[462,1310,1311],{},"HTTP route in Nuxt \u002F Next \u002F Hono \u002F Express \u002F …",[1202,1313,1314,1316,1317],{},[500,1315,991],{}," via ",[480,1318,1319],{"href":163},"framework integration",[1202,1321,1322],{},"One wide event per request, auto-emitted on response end",[1178,1324,1325,1330,1335],{},[1202,1326,1327],{},[462,1328,1329],{},"HTTP handler without a framework",[1202,1331,1332],{},[500,1333,1334],{},"createRequestLogger({ method, path })",[1202,1336,1337],{},"Same shape as framework middleware, manual emit",[1178,1339,1340,1345,1356],{},[1202,1341,1342],{},[462,1343,1344],{},"CLI tool \u002F one-shot script",[1202,1346,1347,1350,1351,1353,1354],{},[500,1348,1349],{},"log.*"," for steps + ",[500,1352,690],{}," for the run summary — see ",[480,1355,227],{"href":228},[1202,1357,1358],{},"Pretty in dev, structured in CI, one summary event for the whole run",[1178,1360,1361,1366,1377],{},[1202,1362,1363],{},[462,1364,1365],{},"Published library",[1202,1367,1368,1370,1371,1374,1375],{},[500,1369,690],{}," only — never ",[500,1372,1373],{},"initLogger"," — see ",[480,1376,227],{"href":228},[1202,1378,1379],{},"Don't pollute the host app's global config or force a drain on consumers",[1178,1381,1382,1387,1395],{},[1202,1383,1384],{},[462,1385,1386],{},"Background job \u002F queue worker \u002F cron",[1202,1388,1389,1392,1393],{},[500,1390,1391],{},"createLogger({ jobId, queue })"," per invocation — see ",[480,1394,227],{"href":228},[1202,1396,1397],{},"One wide event per job run, perfect for retry analysis",[1178,1399,1400,1405,1415],{},[1202,1401,1402],{},[462,1403,1404],{},"Cloudflare Worker \u002F edge function",[1202,1406,1407,1410,1411,1374,1413],{},[500,1408,1409],{},"createWorkersLogger(req)"," or ",[500,1412,694],{},[480,1414,222],{"href":223},[1202,1416,1417,1418,1421],{},"Per-request event, no ",[500,1419,1420],{},"process"," globals required",[1178,1423,1424,1428,1437],{},[1202,1425,1426],{},[462,1427,241],{},[1202,1429,1430,1432,1433,1392,1435],{},[500,1431,1373],{}," once + ",[500,1434,690],{},[480,1436,241],{"href":242},[1202,1438,1439],{},"Cold-start init, per-event scope, drain flush in the handler",[1178,1441,1442,1447,1453],{},[1202,1443,1444],{},[462,1445,1446],{},"Batch \u002F pipeline step",[1202,1448,1449,1452],{},[500,1450,1451],{},"createLogger({ step })"," per stage",[1202,1454,1455],{},"One event per stage with inputs and outputs side by side",[1178,1457,1458,1463,1473],{},[1202,1459,1460],{},[462,1461,1462],{},"AI agent \u002F LLM call",[1202,1464,1465,1467,1468],{},[500,1466,690],{}," + ",[480,1469,1470],{"href":266},[500,1471,1472],{},"createAILogger",[1202,1474,1475],{},"Token usage, tool calls, streaming metrics on the same wide event",[1178,1477,1478,1483,1488],{},[1202,1479,1480],{},[462,1481,1482],{},"Library function called inside a request",[1202,1484,1485,1487],{},[500,1486,991],{}," from caller, or accept a logger as argument",[1202,1489,1490],{},"Inherit the parent's request context, contribute to the same wide event",[1178,1492,1493,1498,1503],{},[1202,1494,1495],{},[462,1496,1497],{},"Shared workspace package",[1202,1499,1500,1501],{},"Treat it like a library — see ",[480,1502,227],{"href":228},[1202,1504,1505,1506,1508,1509,1511],{},"Host app owns ",[500,1507,1373],{}," \u002F drain; packages use ",[500,1510,690],{}," or accept a logger",[470,1513,1515,1516,483,1518,1520],{"color":472,"icon":1514},"i-lucide-lightbulb","None of these is an \"upgrade\" of another. Use ",[500,1517,537],{},[500,1519,690],{}," in the same file when it makes sense — they share the global drain, redaction, and types.",[488,1522,1524],{"id":1523},"shared-foundation","Shared foundation",[458,1526,1527],{},"All three modes share the same foundation:",[1529,1530,1531,1542,1550,1572,1577,1583],"ul",{},[1532,1533,1534,1537,1538,1541],"li",{},[462,1535,1536],{},"Pretty output"," in development, ",[462,1539,1540],{},"JSON"," in production (default, no configuration needed)",[1532,1543,1544,1546,1547],{},[462,1545,416],{}," to send events to Axiom, Sentry, PostHog, and more — see ",[480,1548,1549],{"href":95},"Integrate \u002F Adapters",[1532,1551,1552,1555,1556,507,1559,978,1562,1565,1566,1571],{},[462,1553,1554],{},"Structured errors"," with ",[500,1557,1558],{},"why",[500,1560,1561],{},"fix",[500,1563,1564],{},"link",", plus optional backend-only ",[462,1567,1568],{},[500,1569,1570],{},"internal"," for logs",[1532,1573,1574,1576],{},[462,1575,61],{}," (head + tail) to control log volume in production",[1532,1578,1579,1582],{},[462,1580,1581],{},"Redaction"," that wipes secrets before they ever leave the process",[1532,1584,1585,1588],{},[462,1586,1587],{},"Zero dependencies",", ~6 kB gzip",[488,1590,1592],{"id":1591},"the-rest-of-this-section","The rest of this section",[458,1594,1595],{},"After the three modes, the rest of Learn covers the concepts that show up across every mode:",[1529,1597,1598,1619,1624,1632,1637,1650],{},[1532,1599,1600,1602,1603,507,1605,507,1607,507,1609,1611,1612,1615,1616],{},[480,1601,51],{"href":52}," — ",[500,1604,1558],{},[500,1606,1561],{},[500,1608,1564],{},[500,1610,1570],{},", and how ",[500,1613,1614],{},"createError"," differs from ",[500,1617,1618],{},"throw new Error",[1532,1620,1621,1623],{},[480,1622,76],{"href":77}," — typed error \u002F audit catalogs that survive refactors",[1532,1625,1626,1628,1629,1631],{},[480,1627,56],{"href":57}," — exactly what happens between ",[500,1630,1251],{}," and your drain",[1532,1633,1634,1636],{},[480,1635,61],{"href":62}," — keep all errors and slow requests; drop healthy noise",[1532,1638,1639,1641,1642,1645,1646,1649],{},[480,1640,71],{"href":72}," — augment ",[500,1643,1644],{},"RequestLogger"," so ",[500,1647,1648],{},"log.set"," is autocompleted",[1532,1651,1652,1654,1655,507,1658,507,1661,1664],{},[480,1653,1581],{"href":67}," — the rules that strip ",[500,1656,1657],{},"authorization",[500,1659,1660],{},"password",[500,1662,1663],{},"token",", etc. before drain",[458,1666,1667,1668,1670],{},"When you're done with Learn, head to ",[480,1669,81],{"href":163}," to wire evlog into your stack.",[1672,1673,1674],"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":549,"searchDepth":587,"depth":587,"links":1676},[1677,1678,1685,1688,1689],{"id":490,"depth":587,"text":491},{"id":528,"depth":587,"text":529,"children":1679},[1680,1682,1684],{"id":533,"depth":594,"text":1681},"Simple Logging (log)",{"id":686,"depth":594,"text":1683},"Wide Events (createLogger \u002F createRequestLogger)",{"id":984,"depth":594,"text":985},{"id":1169,"depth":587,"text":1170,"children":1686},[1687],{"id":1287,"depth":594,"text":1288},{"id":1523,"depth":587,"text":1524},{"id":1591,"depth":587,"text":1592},"The mental model — three logging modes, the wide event lifecycle, sampling, typed fields, and redaction. Read this section in order if you're new; pick what you need if you're not.","md",[1693,1695,1696],{"label":41,"icon":44,"to":42,"color":476,"variant":1694},"subtle",{"label":46,"icon":49,"to":47,"color":476,"variant":1694},{"label":56,"icon":59,"to":57,"color":476,"variant":1694},{},{"title":36,"icon":39},{"title":453,"description":1690},"WMNTSgSQfP0skAIEfnjcFO4oVQUsiarxSK4ykHrypPk",[1702,1704],{"title":25,"path":26,"stem":27,"description":1703,"icon":28,"children":-1},"Get up and running with evlog in minutes. Learn the log API, createLogger for wide events, useLogger for requests, and structured errors.",{"title":41,"path":42,"stem":43,"description":1705,"icon":44,"children":-1},"evlog's general-purpose logger. A drop-in for console.log, pino, or consola, with the same level filtering, drain pipeline, redaction, and pretty\u002FJSON output as wide events.",1784142029722]