Documentation

CLI

qiklog send, watch, tail-file, and key management from the terminal.

The qiklog CLI ships and receives logs from your terminal — useful for scripts, CI, live tail, and tailing local files.

Install / run from source

From the repository (requires .NET 9 SDK), install a global qiklog on your PATH:

make install-cli
# → ~/.local/bin/qiklog  (override: make install-cli PREFIX=/usr/local/bin)
qiklog --help

Remove with make uninstall-cli. Or run without installing:

dotnet run --project src/QikLog.Cli -- --help

Homebrew / Scoop packages are planned later.

Global options

OptionEnv varDefaultDescription
--apihttp://localhost:5080API base URL
--key / -kQIKLOG_API_KEYAPI key when auth is enabled

send — one log line

dotnet run --project src/QikLog.Cli -- send \
  --source demo \
  --message "deploy finished" \
  --level info

With an API key:

dotnet run --project src/QikLog.Cli -- send \
  -s demo -m "deploy finished" \
  --key "$QIKLOG_API_KEY"

Against the hosted API (invite beta):

export QIKLOG_API_KEY='ql_…'   # from Manage or an invite
dotnet run --project src/QikLog.Cli -- send \
  --api https://qiklog-api.up.railway.app \
  -s demo -m "hello from the CLI" -l info

The CLI sends Authorization: Bearer <key> (same credential the API also accepts as X-QikLog-API-Key). There is no interactive OAuth login for send / watch / tail-file — that is intentional for agent-style ingest.

Exit code 0 on 202 Accepted; non-zero on failure with stderr details.

watch — live-tail a source

Connects to the same SignalR hub as the browser (/hubs/logs), calls Subscribe for a source, and prints each LogReceived line to stdout:

dotnet run --project src/QikLog.Cli -- watch \
  --source demo \
  --api https://api.qiklog.com \
  --key "$QIKLOG_API_KEY"

Press Ctrl+C to stop. Lines look like HH:mm:ss.fff LEVEL source message.

No history on subscribe. The hub joins the source group only; it does not replay the buffer. Open a watch session first, then send (or curl) to the same source to see lines. For past entries, use the browser tail page or GET /v1/sources/{source}/logs.

Wrong or missing keys fail with a clear stderr message (exit code 1), not a hung connection.

tail-file — ship a local file

Follows a file like tail -f and POSTs each new line:

dotnet run --project src/QikLog.Cli -- tail-file ./app.log --source mybox

Press Ctrl+C to stop. Useful for dev boxes and quick demos without changing application code.

key create — development only

Creates a key via POST /v1/dev/keys (API must be in Development):

dotnet run --project src/QikLog.Cli -- key create --name "local dev"

Prints JSON with the new key. Store it in QIKLOG_API_KEY or your password manager.

Typical workflows

Smoke test after deploy

qiklog send -s production -m "release v1.2.3 live" -l info --api https://api.qiklog.com --key "$QIKLOG_API_KEY"

Watch live (CLI or browser)

qiklog watch -s production --api https://api.qiklog.com --key "$QIKLOG_API_KEY"

Or open /tail/production on the web app while shipping logs.

Next steps

You are through the core docs. Wire a .NET app with Serilog, revisit Getting started for the mental model, or run Quickstart again on a fresh machine.