Skip to content

Remote Debugging

Debugging production issues is painful. Players can’t send you log files. Crashes happen on devices you don’t own. “It works on my machine” doesn’t help when 500 players are stuck. Quest Data gives you remote eyes into your game — logs, crash reports, pre-crash telemetry, and alerts.

  • How to send logs from your game to the dashboard
  • How to track crashes with automatic stack traces
  • How to use the Flight Recorder (60s of pre-crash data)
  • How to set up alerts for error spikes
  • How to configure log levels for production vs. development

Send debug, info, warning, and error logs from your game to the dashboard. View them in real-time without asking players for anything.

Logs viewer with level filter and search

  • Player reports a bug? Search their logs by player ID
  • Mysterious crash? Filter by error level and see what happened
  • Performance issue? Check warning logs for slow operations
  • Production debugging? No need to ship a debug build
# Log at different levels
QuestData.log_error("Save file corrupted", {"path": "user://save.dat"})
QuestData.log_warning("Low memory: 45MB free", {"scene": "boss_arena"})
QuestData.log_info("Player reached level 5", {"playtime": 1200})
QuestData.log_debug("Physics tick: 142 bodies", {"sleeping": 58})

Logs are batched (50 per batch, every 10 seconds) and persisted to disk if offline. They’re not lost even if the game crashes.

FeatureWhat it does
Level filterShow only errors, or only warnings
Player filterSearch logs from a specific player
Full-text searchFind logs containing specific words
Context searchFilter by structured context fields (JSON)
ExportDownload logs as CSV or JSON

See Remote Logging SDK Reference for full details.


Track crashes and errors with automatic stack traces. The SDK captures the full GDScript call stack and groups similar errors together.

Error detail view with stack trace

func load_config(path: String) -> Dictionary:
var file = FileAccess.open(path, FileAccess.READ)
if file == null:
QuestData.track_error("ConfigLoadFailed", "Cannot open: " + path)
return {}
var data = JSON.parse_string(file.get_as_text())
if data == null:
QuestData.track_error("ConfigParseFailed", "Invalid JSON in: " + path)
return {}
return data
  • Error grouping — Same errors are grouped by error_name
  • Occurrence count — How often each error happens
  • Stack trace — Full call stack + short snippet
  • Device info — OS, game version
  • Flight Recorder data — 60 seconds of telemetry before the crash

See Error Tracking SDK Reference for full details.


The Flight Recorder is a black box for your game. It continuously captures FPS, memory usage, active scene, and recent events — keeping the last 60 seconds in a circular buffer. When track_error() is called, this data is attached to the error.

DataWhy it matters
FPSWas the game lagging before the crash?
Memory (MB)Was memory running out?
Active sceneWhich scene was loaded?
Recent eventsWhat did the player do right before?

The Flight Recorder runs automatically. Just use QuestData.track_error() and the data is included.


Get notified when something goes wrong — before players complain. Set up Discord or email alerts for error spikes.

Alert configuration

  1. Go to Configuration > Alerts
  2. Click New Alert
  3. Choose type: Log Error Spike
  4. Set threshold (e.g. 200% — alert when errors double vs. baseline)
  5. Add your Discord webhook URL or email
Alert TypeTriggers when
Crash SpikeError events increase significantly
Log Error SpikeLog errors/warnings spike above baseline
Revenue DropDaily revenue drops below threshold
DAU DropDaily active users decline
Retention DropRetention metrics fall

Control which logs reach the server to save bandwidth and storage. In production, you probably only want errors and warnings. During a debugging session, you can temporarily enable debug logs.

  1. Go to Configuration > Logs
  2. Set the minimum log level (Debug / Info / Warning / Error)
  3. The SDK automatically filters on the client side
LevelProductionDebugging
ErrorAlways onAlways on
WarningRecommendedAlways on
InfoOptionalOn
DebugOffOn

Logs are automatically cleaned up based on level:

LevelRetention
Debug7 days
Info14 days
Warning30 days
Error90 days