[{"data":1,"prerenderedAt":723},["ShallowReactive",2],{"navigation_docs":3,"-adapters-overview":75,"-adapters-overview-surround":718},[4,30,50],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","/getting-started","1.getting-started",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","/getting-started/introduction","1.getting-started/1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","/getting-started/installation","1.getting-started/2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","/getting-started/quick-start","1.getting-started/3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","/getting-started/agent-skills","1.getting-started/4.agent-skills","i-lucide-sparkles",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Core Concepts","/core-concepts","2.core-concepts",[35,40,45],{"title":36,"path":37,"stem":38,"icon":39},"Wide Events","/core-concepts/wide-events","2.core-concepts/1.wide-events","i-lucide-layers",{"title":41,"path":42,"stem":43,"icon":44},"Structured Errors","/core-concepts/structured-errors","2.core-concepts/2.structured-errors","i-lucide-shield-alert",{"title":46,"path":47,"stem":48,"icon":49},"Best Practices","/core-concepts/best-practices","2.core-concepts/3.best-practices","i-lucide-shield-check",{"title":51,"path":52,"stem":53,"children":54,"page":29},"Adapters","/adapters","3.adapters",[55,60,65,70],{"title":56,"path":57,"stem":58,"icon":59},"Overview","/adapters/overview","3.adapters/1.overview","i-custom-plug",{"title":61,"path":62,"stem":63,"icon":64},"Axiom","/adapters/axiom","3.adapters/2.axiom","i-custom-axiom",{"title":66,"path":67,"stem":68,"icon":69},"OTLP","/adapters/otlp","3.adapters/3.otlp","i-simple-icons-opentelemetry",{"title":71,"path":72,"stem":73,"icon":74},"Custom Adapters","/adapters/custom","3.adapters/4.custom","i-lucide-code",{"id":76,"title":77,"body":78,"description":709,"extension":710,"links":711,"meta":714,"navigation":715,"path":57,"seo":716,"stem":58,"__hash__":717},"docs/3.adapters/1.overview.md","Adapters Overview",{"type":79,"value":80,"toc":702},"minimark",[81,85,90,103,229,233,247,251,254,447,451,458,535,553,557,560,614,698],[82,83,84],"p",{},"Adapters let you send logs to external observability platforms. evlog provides built-in adapters for popular services, and you can create custom adapters for any destination.",[86,87,89],"h2",{"id":88},"how-adapters-work","How Adapters Work",[82,91,92,93,97,98,102],{},"Adapters hook into the ",[94,95,96],"code",{},"evlog:drain"," event, which fires after each request completes. The drain runs in ",[99,100,101],"strong",{},"fire-and-forget"," mode, meaning it never blocks the HTTP response.",[104,105,111],"pre",{"className":106,"code":107,"filename":108,"language":109,"meta":110,"style":110},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createAxiomDrain } from 'evlog/axiom'\n\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', createAxiomDrain())\n})\n","server/plugins/evlog-drain.ts","typescript","",[94,112,113,146,153,185,220],{"__ignoreMap":110},[114,115,118,122,126,130,133,136,139,143],"span",{"class":116,"line":117},"line",1,[114,119,121],{"class":120},"s7zQu","import",[114,123,125],{"class":124},"sMK4o"," {",[114,127,129],{"class":128},"sTEyZ"," createAxiomDrain",[114,131,132],{"class":124}," }",[114,134,135],{"class":120}," from",[114,137,138],{"class":124}," '",[114,140,142],{"class":141},"sfazB","evlog/axiom",[114,144,145],{"class":124},"'\n",[114,147,149],{"class":116,"line":148},2,[114,150,152],{"emptyLinePlaceholder":151},true,"\n",[114,154,156,159,162,166,169,171,175,178,182],{"class":116,"line":155},3,[114,157,158],{"class":120},"export",[114,160,161],{"class":120}," default",[114,163,165],{"class":164},"s2Zo4"," defineNitroPlugin",[114,167,168],{"class":128},"(",[114,170,168],{"class":124},[114,172,174],{"class":173},"sHdIc","nitroApp",[114,176,177],{"class":124},")",[114,179,181],{"class":180},"spNyl"," =>",[114,183,184],{"class":124}," {\n",[114,186,188,191,194,197,199,202,205,208,210,212,215,217],{"class":116,"line":187},4,[114,189,190],{"class":128},"  nitroApp",[114,192,193],{"class":124},".",[114,195,196],{"class":128},"hooks",[114,198,193],{"class":124},[114,200,201],{"class":164},"hook",[114,203,168],{"class":204},"swJcz",[114,206,207],{"class":124},"'",[114,209,96],{"class":141},[114,211,207],{"class":124},[114,213,214],{"class":124},",",[114,216,129],{"class":164},[114,218,219],{"class":204},"())\n",[114,221,223,226],{"class":116,"line":222},5,[114,224,225],{"class":124},"}",[114,227,228],{"class":128},")\n",[86,230,232],{"id":231},"available-adapters","Available Adapters",[234,235,236,240,243],"card-group",{},[237,238,239],"card",{"icon":64,"title":61,"to":62},"Send logs to Axiom for powerful querying and dashboards.",[237,241,242],{"icon":69,"title":66,"to":67},"OpenTelemetry Protocol for Grafana, Datadog, Honeycomb, and more.",[237,244,246],{"icon":74,"title":245,"to":72},"Custom","Build your own adapter for any destination.",[86,248,250],{"id":249},"multiple-destinations","Multiple Destinations",[82,252,253],{},"Send logs to multiple services simultaneously:",[104,255,257],{"className":106,"code":256,"filename":108,"language":109,"meta":110,"style":110},"import { createAxiomDrain } from 'evlog/axiom'\nimport { createOTLPDrain } from 'evlog/otlp'\n\nexport default defineNitroPlugin((nitroApp) => {\n  const axiom = createAxiomDrain()\n  const otlp = createOTLPDrain()\n\n  nitroApp.hooks.hook('evlog:drain', async (ctx) => {\n    await Promise.allSettled([axiom(ctx), otlp(ctx)])\n  })\n})\n",[94,258,259,277,297,301,321,337,351,356,394,432,440],{"__ignoreMap":110},[114,260,261,263,265,267,269,271,273,275],{"class":116,"line":117},[114,262,121],{"class":120},[114,264,125],{"class":124},[114,266,129],{"class":128},[114,268,132],{"class":124},[114,270,135],{"class":120},[114,272,138],{"class":124},[114,274,142],{"class":141},[114,276,145],{"class":124},[114,278,279,281,283,286,288,290,292,295],{"class":116,"line":148},[114,280,121],{"class":120},[114,282,125],{"class":124},[114,284,285],{"class":128}," createOTLPDrain",[114,287,132],{"class":124},[114,289,135],{"class":120},[114,291,138],{"class":124},[114,293,294],{"class":141},"evlog/otlp",[114,296,145],{"class":124},[114,298,299],{"class":116,"line":155},[114,300,152],{"emptyLinePlaceholder":151},[114,302,303,305,307,309,311,313,315,317,319],{"class":116,"line":187},[114,304,158],{"class":120},[114,306,161],{"class":120},[114,308,165],{"class":164},[114,310,168],{"class":128},[114,312,168],{"class":124},[114,314,174],{"class":173},[114,316,177],{"class":124},[114,318,181],{"class":180},[114,320,184],{"class":124},[114,322,323,326,329,332,334],{"class":116,"line":222},[114,324,325],{"class":180},"  const",[114,327,328],{"class":128}," axiom",[114,330,331],{"class":124}," =",[114,333,129],{"class":164},[114,335,336],{"class":204},"()\n",[114,338,340,342,345,347,349],{"class":116,"line":339},6,[114,341,325],{"class":180},[114,343,344],{"class":128}," otlp",[114,346,331],{"class":124},[114,348,285],{"class":164},[114,350,336],{"class":204},[114,352,354],{"class":116,"line":353},7,[114,355,152],{"emptyLinePlaceholder":151},[114,357,359,361,363,365,367,369,371,373,375,377,379,382,385,388,390,392],{"class":116,"line":358},8,[114,360,190],{"class":128},[114,362,193],{"class":124},[114,364,196],{"class":128},[114,366,193],{"class":124},[114,368,201],{"class":164},[114,370,168],{"class":204},[114,372,207],{"class":124},[114,374,96],{"class":141},[114,376,207],{"class":124},[114,378,214],{"class":124},[114,380,381],{"class":180}," async",[114,383,384],{"class":124}," (",[114,386,387],{"class":173},"ctx",[114,389,177],{"class":124},[114,391,181],{"class":180},[114,393,184],{"class":124},[114,395,397,400,404,406,409,412,415,417,419,421,423,425,427,429],{"class":116,"line":396},9,[114,398,399],{"class":120},"    await",[114,401,403],{"class":402},"sBMFI"," Promise",[114,405,193],{"class":124},[114,407,408],{"class":164},"allSettled",[114,410,411],{"class":204},"([",[114,413,414],{"class":164},"axiom",[114,416,168],{"class":204},[114,418,387],{"class":128},[114,420,177],{"class":204},[114,422,214],{"class":124},[114,424,344],{"class":164},[114,426,168],{"class":204},[114,428,387],{"class":128},[114,430,431],{"class":204},")])\n",[114,433,435,438],{"class":116,"line":434},10,[114,436,437],{"class":124},"  }",[114,439,228],{"class":204},[114,441,443,445],{"class":116,"line":442},11,[114,444,225],{"class":124},[114,446,228],{"class":128},[86,448,450],{"id":449},"drain-context","Drain Context",[82,452,453,454,457],{},"Every adapter receives a ",[94,455,456],{},"DrainContext"," with:",[459,460,461,477],"table",{},[462,463,464],"thead",{},[465,466,467,471,474],"tr",{},[468,469,470],"th",{},"Field",[468,472,473],{},"Type",[468,475,476],{},"Description",[478,479,480,496,521],"tbody",{},[465,481,482,488,493],{},[483,484,485],"td",{},[94,486,487],{},"event",[483,489,490],{},[94,491,492],{},"WideEvent",[483,494,495],{},"The complete log event with all accumulated context",[465,497,498,503,508],{},[483,499,500],{},[94,501,502],{},"request",[483,504,505],{},[94,506,507],{},"object",[483,509,510,511,514,515,514,518,177],{},"Request metadata (",[94,512,513],{},"method",", ",[94,516,517],{},"path",[94,519,520],{},"requestId",[465,522,523,528,532],{},[483,524,525],{},[94,526,527],{},"headers",[483,529,530],{},[94,531,507],{},[483,533,534],{},"Safe HTTP headers (sensitive headers are filtered)",[536,537,539,542,543,514,546,514,549,552],"callout",{"color":538,"icon":49},"success",[99,540,541],{},"Security:"," Sensitive headers (",[94,544,545],{},"authorization",[94,547,548],{},"cookie",[94,550,551],{},"x-api-key",", etc.) are automatically filtered and never passed to adapters.",[86,554,556],{"id":555},"zero-config-setup","Zero-Config Setup",[82,558,559],{},"All adapters support automatic configuration via environment variables. No code changes needed when deploying to different environments:",[104,561,566],{"className":562,"code":563,"filename":564,"language":565,"meta":110,"style":110},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Axiom\nNUXT_AXIOM_TOKEN=xaat-xxx\nNUXT_AXIOM_DATASET=my-logs\n\n# OTLP\nNUXT_OTLP_ENDPOINT=https://otlp.example.com\n",".env","bash",[94,567,568,574,585,595,599,604],{"__ignoreMap":110},[114,569,570],{"class":116,"line":117},[114,571,573],{"class":572},"sHwdD","# Axiom\n",[114,575,576,579,582],{"class":116,"line":148},[114,577,578],{"class":128},"NUXT_AXIOM_TOKEN",[114,580,581],{"class":124},"=",[114,583,584],{"class":141},"xaat-xxx\n",[114,586,587,590,592],{"class":116,"line":155},[114,588,589],{"class":128},"NUXT_AXIOM_DATASET",[114,591,581],{"class":124},[114,593,594],{"class":141},"my-logs\n",[114,596,597],{"class":116,"line":187},[114,598,152],{"emptyLinePlaceholder":151},[114,600,601],{"class":116,"line":222},[114,602,603],{"class":572},"# OTLP\n",[114,605,606,609,611],{"class":116,"line":339},[114,607,608],{"class":128},"NUXT_OTLP_ENDPOINT",[114,610,581],{"class":124},[114,612,613],{"class":141},"https://otlp.example.com\n",[104,615,617],{"className":106,"code":616,"filename":108,"language":109,"meta":110,"style":110},"import { createAxiomDrain } from 'evlog/axiom'\n\nexport default defineNitroPlugin((nitroApp) => {\n  // Automatically reads from env vars\n  nitroApp.hooks.hook('evlog:drain', createAxiomDrain())\n})\n",[94,618,619,637,641,661,666,692],{"__ignoreMap":110},[114,620,621,623,625,627,629,631,633,635],{"class":116,"line":117},[114,622,121],{"class":120},[114,624,125],{"class":124},[114,626,129],{"class":128},[114,628,132],{"class":124},[114,630,135],{"class":120},[114,632,138],{"class":124},[114,634,142],{"class":141},[114,636,145],{"class":124},[114,638,639],{"class":116,"line":148},[114,640,152],{"emptyLinePlaceholder":151},[114,642,643,645,647,649,651,653,655,657,659],{"class":116,"line":155},[114,644,158],{"class":120},[114,646,161],{"class":120},[114,648,165],{"class":164},[114,650,168],{"class":128},[114,652,168],{"class":124},[114,654,174],{"class":173},[114,656,177],{"class":124},[114,658,181],{"class":180},[114,660,184],{"class":124},[114,662,663],{"class":116,"line":187},[114,664,665],{"class":572},"  // Automatically reads from env vars\n",[114,667,668,670,672,674,676,678,680,682,684,686,688,690],{"class":116,"line":222},[114,669,190],{"class":128},[114,671,193],{"class":124},[114,673,196],{"class":128},[114,675,193],{"class":124},[114,677,201],{"class":164},[114,679,168],{"class":204},[114,681,207],{"class":124},[114,683,96],{"class":141},[114,685,207],{"class":124},[114,687,214],{"class":124},[114,689,129],{"class":164},[114,691,219],{"class":204},[114,693,694,696],{"class":116,"line":339},[114,695,225],{"class":124},[114,697,228],{"class":128},[699,700,701],"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 .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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":110,"searchDepth":148,"depth":148,"links":703},[704,705,706,707,708],{"id":88,"depth":148,"text":89},{"id":231,"depth":148,"text":232},{"id":249,"depth":148,"text":250},{"id":449,"depth":148,"text":450},{"id":555,"depth":148,"text":556},"Send your logs to external services with evlog adapters. Built-in support for Axiom, OTLP, and custom destinations.","md",[712,713],{"label":61,"icon":64,"to":62},{"label":66,"icon":69,"to":67},{},{"title":56,"icon":59},{"title":77,"description":709},"HyTI0BvKTQMLxUORKOCbqbR8Dzi0Pn_pugZsITn8Mig",[719,721],{"title":46,"path":47,"stem":48,"description":720,"icon":49,"children":-1},"Security guidelines, data sanitization, and production tips for evlog. Learn what not to log and how to protect sensitive data.",{"title":61,"path":62,"stem":63,"description":722,"icon":64,"children":-1},"Send logs to Axiom for powerful querying, dashboards, and alerting. Zero-config setup with environment variables.",1770218711953]