Skip to content

Combat Log

github-actions[bot] edited this page Oct 15, 2026 · 2 revisions

Combat Log

While combat logging is on (/combatlog in game), the client appends one timestamped event per line to a file under Logs/. wowlab can read it, stream it and follow it live. It is read only: wowlab never writes to or rotates your logs.

Commands

uv run wowlab log tail                     # the last 10 lines of the newest log, tokenized
uv run wowlab log tail -n 200              # the last 200 (up to 100,000)
uv run wowlab log tail --follow            # keep printing as the client writes
uv run wowlab log tail --follow --json     # one JSON object per line

wowlab reads the newest WoWCombatLog*.txt under the flavor's Logs/ folder. -n is short for --lines and -f for --follow. Every option is in the CLI Reference.

--follow keeps going, including into a new log file when the client starts one, until you interrupt it. New log files are read in turn, oldest first. If there is no log yet, it waits for one and reads the first one it finds from the start.

In text output, a line ==> Logs/<file> <== says which file the next lines come from, and why it switched (a new log file, or a file that shrank or was replaced and is read again from the start). A line wowlab could not tokenize is printed as (not tokenized: <reason>) followed by its text.

The client adds to the file in batches, and only while combat logging is on, so the latest events may not be on disk yet; wowlab says so on stderr. A last line still being written is not shown.

What "tokenized" means

Each line is split into its timestamp, event name and comma-separated fields, with quoted strings and nested lists handled. wowlab keeps every field as text; it does not decide what each field means for you. The format has a header line naming the combat-log version and whether advanced logging is on, and events differ in field count. The reference is docs/LAB_FORMATS.md §8.

A line wowlab cannot parse is kept as raw text and marked unparsed, with the reason, never dropped. Nothing is converted to a number, and the timestamp is checked for shape only, never read as a date. Following survives the client truncating, replacing or rotating the file; a partial line left behind by one of those is shown as unparsed, never as an event.

Lines are kept byte for byte. One owner-granted exception exists for safety: a single line longer than 1 MiB keeps only its first 1 MiB, flagged as truncated with its true length, so a crafted file cannot exhaust memory.

Things to know

  • Logs name other players. A combat log from a group or open world contains other people's names. wowlab reads it locally, but do not post one publicly. The project's own test corpus of combat logs was pseudonymised by a scrub tool before it was committed.
  • Performance. The reader (wowlab_core.combatlog) streams large logs one chunk at a time, with bounded memory, rather than loading them whole. It opens each log read-only and closes it between polls.
  • Turn logging on in game with /combatlog, off with /combatlog again.

What is planned

Fight replays, generative art from logs, and per-session dashboards are on the Roadmap menu; none is built yet.

Clone this wiki locally