evlog doctor
evlog doctor answers "is evlog actually wired up here?" — the question you have when you followed the setup guide and nothing is showing up.
evlog doctor
pnpm workspace
ENVIRONMENT
│ ✓ node v24.18.0
│ ✓ project evlog-playground · pnpm · apps/playground
│ ✓ stack nuxt
EVLOG
│ ✓ evlog v2.22.3 (workspace:*)
│ ✓ logs 1 file · .evlog/logs
5 ok · 0 warn · 0 fail
What it checks
| Check | Passes when | Warns or fails when |
|---|---|---|
node | Node 20 or later | Older than 20 — the CLI will not run reliably (fail) |
project | A package.json was resolved | None found above the working directory |
stack | A framework was detected and evlog is installed | A framework was detected but evlog is not wired to it |
evlog | evlog resolves from node_modules | Declared in package.json but not installed, or missing entirely |
logs | A local sink exists under .evlog/logs | Nothing has been written yet |
In a workspace, the header names the workspace kind and project shows which package was resolved — the fastest way to notice you are diagnosing the repo root instead of your app.
An empty logs sink is not a problem in itself: the directory is created on first write by the fs drain. It is only a signal when you expected local logs and there are none.
Exit code
0 when nothing failed, 1 when any check failed. Warnings do not fail the command — a project that has not written logs yet is not broken.
JSON
evlog doctor --json | jq '.checks'
The payload carries the resolved project (cwd, root, packageDir, workspace kind, package name, detected stack), every check with its status, and the summary counts.
Each warning and failure also carries a code from the CLI's own error catalog — cli.EVLOG_NOT_FOUND, cli.EVLOG_DECLARED_NOT_INSTALLED, cli.LOGS_SINK_MISSING, cli.NODE_TOO_OLD, cli.PROJECT_NO_PACKAGE — each with a why and a fix, the same way structured errors work in your app.
Options
| Flag | What it does |
|---|---|
--cwd <dir> | Diagnose another directory |
--json | Machine-readable output on stdout |
--debug | Print the steps the command went through |
--noHeader | Skip the branded header |
Next
- Installation — wire evlog into your framework
evlog map— once it is installed, see where it is missing
CI
Gate a pull request on your observability score with --min-score, read the JSON contract, and keep the map file out of the way. Exit codes, GitHub Actions, and jq recipes.
telemetry
What the evlog CLI collects about its own usage, how to see it, and the three ways to turn it off — DO_NOT_TRACK, EVLOG_TELEMETRY=0, or evlog telemetry disable.