Log locations
Where EasyCC writes logs on each OS.
EasyCC uses structured JSON logging via the Rust tracing crate. Logs are per-device and on disk. This page lists where they are and what's in them.
Paths
| Platform | Log directory |
|---|---|
| Windows | %LOCALAPPDATA%\com.easycc.app\logs\ |
| macOS | ~/Library/Logs/com.easycc.app/ |
| Linux | (not supported in v1) |
Log files are named by date: easycc-2026-04-19.jsonl. One file per day, rotated at midnight UTC.
Retention
| Age | What |
|---|---|
| Today's log | Active, being written to |
| 1–30 days old | Kept on disk |
| 31+ days old | Auto-deleted on next launch |
To extend retention, ship logs to your SIEM or backup target before they auto-delete. See "Shipping logs" below.
Format
Each line is a JSON object:
{
"timestamp": "2026-04-19T18:32:14.123Z",
"level": "INFO",
"target": "easycc::commands::chat",
"thread_id": "main",
"msg": "Chat session created",
"session_id": "abc123",
"agent_path": "/Users/x/EasyCC/Marketing"
}Fields are consistent across log entries. The target field tells you which subsystem wrote the line.
What's in the log
The kinds of events EasyCC logs:
| Category | Example targets | What's logged |
|---|---|---|
| App lifecycle | easycc::lib, easycc::main | Start, quit, init steps |
| Sign-in | easycc::auth | sign-in attempts, refreshes, sign-outs |
| Chat | easycc::chat, easycc::commands::chat | Session create/close, message send (no content), tool call counts |
| Files | easycc::commands::files | File reads/writes (paths only) |
| History | easycc::history | Version saves, restores |
| Safety scanner | easycc::safety | Scan events, flags, blocks |
| Updates | easycc::updater | Check, download, install |
| Bundle apply | easycc::bundle | Discovery, apply per section |
| Managed policy | easycc::managed | Policy fields read on launch |
| Telemetry | easycc::telemetry | Batch sends (when telemetry on) |
| MCP servers | easycc::mcp | Server starts, connection state |
| Network | easycc::net | Outbound URLs (no payloads) |
What's NOT in the log
Never logged:
- Chat message content
- File content
- Personal info beyond email (logged only for sign-in events)
- API keys or tokens
- Tool result bodies
- Anything sensitive that EasyCC processes
The "no chat content" guarantee is intentional and audited. The log is meant for app debugging, not data analysis.
Verbose logs
By default, the log captures INFO-level and above. To enable DEBUG-level for a single launch:
| Approach | How |
|---|---|
| Launch flag | EasyCC.exe --verbose-logs |
| Env var | EASYCC_VERBOSE_LOGS=1 EasyCC.exe |
| Settings | Settings → Advanced → Verbose logging (persists across launches) |
Verbose mode adds:
- Per-IPC-call entries (which command, which agent)
- Detailed safety scanner timing
- Detailed update flow
- MCP protocol exchanges (without payloads)
Verbose mode increases log size meaningfully (5–10x). Turn off when you're done debugging.
Reading the log
The log is JSONL — one JSON object per line. To read:
Tail in real time:
Get-Content -Path "$env:LOCALAPPDATA\com.easycc.app\logs\easycc-$(Get-Date -Format 'yyyy-MM-dd').jsonl" -Waittail -f ~/Library/Logs/com.easycc.app/easycc-$(date +%Y-%m-%d).jsonlFilter by category:
grep '"target":"easycc::safety"' ~/Library/Logs/com.easycc.app/easycc-2026-04-19.jsonl | jq .Find errors:
grep '"level":"ERROR"' ~/Library/Logs/com.easycc.app/easycc-2026-04-19.jsonl | jq .Common queries
"What policies were applied on this launch?"
grep '"target":"easycc::managed"' ~/Library/Logs/com.easycc.app/easycc-$(date +%Y-%m-%d).jsonl | jq ."Did the bundle apply succeed?"
grep '"target":"easycc::bundle"' ~/Library/Logs/com.easycc.app/easycc-$(date +%Y-%m-%d).jsonl | jq ."Why did the update fail?"
grep '"target":"easycc::updater"' ~/Library/Logs/com.easycc.app/easycc-$(date +%Y-%m-%d).jsonl | jq 'select(.level == "ERROR" or .level == "WARN")'"How many chats today?"
grep 'Chat session created' ~/Library/Logs/com.easycc.app/easycc-$(date +%Y-%m-%d).jsonl | wc -lShipping logs to a SIEM
For fleet-wide log aggregation, EasyCC's logs are standard JSON files — any log shipper picks them up:
- Datadog Agent — point at the log directory; map
targetto a tag - Splunk Universal Forwarder — same
- Filebeat (Elastic) — same
- Cribl — same
Configure the shipper to read *.jsonl files in the log directory and forward to your collector.
For SOC 2 evidence, log shipping plus SIEM retention typically provides "centralized log retention for X days" coverage.
Diagnostic bundle
For one-off diagnostics — not fleet-wide aggregation — EasyCC can collect a diagnostic bundle that includes the relevant logs plus app state. See Diagnostic bundle.
Log size
Typical log size:
| Activity | Daily log size |
|---|---|
| Light use (a few chats) | 10–100 KB |
| Active use (many chats, file ops) | 500 KB – 2 MB |
| Heavy use + verbose mode | 5–20 MB |
After 30 days, oldest logs auto-delete. Total disk footprint is typically under 100 MB.
How is this guide?