These docs cover apps running on Galaxy Metal and Web Apps. If your app runs on Galaxy Legacy, visit the legacy docs.
Galaxy

Runtime Logs

Watch your app's output in real time, search back through 7 days of history, and drill into any event with a single click.

Runtime Logs capture everything your deployed app prints while it's running: every console.log, every console.error, every line emitted by a library. Open your app and click the Runtime Logs tab to get started.


Reading the Page

The page has four main areas stacked vertically: the toolbar at the top, a filter bar below it, a volume histogram, and the log list.

Toolbar: Stream selector (All / App / Errors), time presets (15m / 1h / 6h / 24h / 7d), the Dates picker, the Live button, Download, the share icon, and view settings.

Filter bar: Shows active filter chips. Use + Add filter to narrow by pod or severity, and the search box to match text across loaded logs.

Volume histogram: A bar chart showing how many events happened over time, colored by severity. Hover any bar for a breakdown. Click a bar to zoom into that time window.

Log list: One row per log event, newest at the bottom in Live mode.


Anatomy of a Log Row

Each row has the same structure, left to right:

Severity stripe: A colored bar on the left edge that encodes how serious the event is. Click it to filter to that severity.

ColorLevelWhat it means
๐Ÿ”ด RederrorSomething went wrong: exceptions, failed requests, crashes.
๐ŸŸ  OrangewarnWorth noticing, but not broken.
๐Ÿ”ต BlueinfoNormal operational output.
โšช GreydebugDeveloper-level detail, usually off in production.

Pod short ID: A 5-character ID, identifying which running container produced the log. Galaxy can run multiple pods in parallel for scale and redundancy, and each one logs independently. Click the badge to filter to that pod only. Hover it to see the full pod ID.

Timestamp: The exact date and time, shown in your local time zone with millisecond precision. Hover for UTC, local, and relative (for example, "36s ago") versions.

Message: The log content. Plain text is shown as-is, with ANSI color codes rendered as color and URLs as clickable links. If your app uses structured (JSON) logging, you'll see a compact key/value preview like msg: "handshake" userId: "abc123". The full object is available in the event drawer.

Hovering a row reveals three action icons on the right:

  • View in context: opens an unfiltered window of events around this one, across all pods.
  • Copy line: copies the raw message to your clipboard.
  • Open details: opens the event drawer with full event properties and raw JSON. Clicking anywhere on the row body does the same.

Live Mode

When you open Runtime Logs with no time range selected, you're in Live mode. The page polls for new events every 5 seconds, and the list auto-scrolls to the bottom as they arrive.

If you scroll up to read something, auto-scroll pauses and a floating pill appears: โ†“ N new events. Click it to jump back to the newest entry. Auto-scroll re-engages as soon as you're at the bottom again.

Click the Live button to pause polling entirely. Useful when you need to read through logs without the list moving. Click Paused to resume.

Live mode turns off automatically when you pick a time range or enter Context view.

Watching your app start up?

Turn on Live mode before your app restarts and you'll see startup errors, failed connections, and boot crashes the moment they happen.


Filtering and Searching

Stream

The All / App / Errors selector at the top-left of the toolbar controls which output stream you see:

All: Both streams interleaved. This is the default.

App: Normal output only (stdout). Most of your app's logs appear here.

Errors: Error output only (stderr). Crashes, uncaught exceptions, and library errors.

Time Presets and Custom Range

Click any preset (15m, 1h, 6h, 24h, 7d) to jump to that window. For a custom range, click Dates to open the calendar picker, set a From and To date/time, and click Apply. Click Clear to go back to live tailing.

Galaxy keeps runtime logs for up to 7 days. Ranges wider than that are automatically trimmed.

Add Filter

Click + Add filter to narrow by:

  • Pod: filter to one specific container instance.
  • Level: show only one severity (error, warn, info, debug).
  • Level โ‰ : exclude one severity. A common trick: hide noisy debug output with Level โ‰  debug.

Active filters appear as chips in the filter bar. Click ร— on any chip to clear it.

It's worth knowing that filters fall into two categories. Stream, pod, and time range are server-side: they narrow the fetch itself, so less data comes over the wire. Level, Level โ‰ , and search are client-side: they filter over whatever is already loaded in your browser. If you have only 1,000 events loaded and add a level filter, you're filtering those 1,000. Use Load older or Load all in range first if you want client-side filters to cover more of the range.

Type in the Search visible logs box (or press โŒ˜K / Ctrl+K) to match text across loaded logs. Search is case-insensitive and matches against the message text, the pod short ID, and any fields in parsed JSON (both key names and values).

Search only covers what's already loaded. If you want to search a wider range, use Load older or Load all in range first, then search.

Click the .* icon next to the search box to switch to regex mode. Your expression runs case-insensitively. A few useful patterns:

  • ^\[login\] matches lines starting with [login]
  • error|warn matches lines containing either word
  • user_\d+ matches user_123, user_456, and so on

If your regex is invalid, the search silently falls back to plain text matching with no error shown. If results look wrong, double-check for unescaped characters like (, [, or a trailing backslash.


The Volume Histogram

The bar chart between the filter bar and the log list shows how many events happened over time. Bars are colored by severity so you can spot error spikes at a glance.

Hover any bar to see a tooltip with the total count, the time window it covers, and a breakdown per severity level. Click any bar to zoom the page into that exact time window.

The bar width adjusts automatically based on the range you're viewing: roughly one bar per minute for ranges under an hour, one per hour for ranges up to 24 hours, and one per day beyond that.

Histogram looks too narrow?

The histogram only spans the events that are currently loaded, not the full picked range. Use Load older or Load all in range to pull more events and fill it out.


Loading More Events

When you pick a time range, Galaxy fetches the newest 1,000 events first. The match-count strip just above the log list tells you where you stand: "Loaded 1,000 of 1,720 in range ยท 931 match filters". If the total in range is higher than what's loaded, there are older events still on the server.

Two buttons on the right side of that strip let you pull them in:

โ†“ Load older: Fetches the next page of 1,000 events, prepending them to the top of the list. Click it as many times as needed to work your way back through the range. The scroll position is preserved so the list doesn't jump on you.

Load all in range: Fetches the remaining events in the range in one go (up to 10,000 per request). Use this when you want client-side filters like search, Level, or Level โ‰  to cover the entire range at once, or when you want the histogram to span the full window. For very noisy apps over a long range, narrow the time window or add a pod filter first, then click Load all in range.

There's no hard cap on total events per session. You can click either button as many times as needed. When the count strip reads "Loaded X of X in range" with both numbers equal, everything is in.


The Event Drawer

Click any row (or press Enter on a focused row) to open the event drawer on the right side.

The drawer has two tabs:

Event Properties: A key/value table with everything about the event. The Time section shows the timestamp in four formats: Raw (ISO), UTC, your local time zone, and relative (for example, "1m ago"). The Properties section shows severity, source, stream, pod metadata, app version, the raw message, and every parsed.* field if the log was JSON structured. Hover any property row to copy its value. On pod, level, and stream rows you'll also see = (filter to this value) and โ‰  (exclude this value) shortcuts. Toggle Show null values in the top-right corner to include empty fields.

Raw JSON: The full event as pretty-printed, syntax-highlighted JSON. Click Copy JSON to grab the whole thing for a ticket, a bug report, or a code comment.

Navigate between events using the โ–ฒ / โ–ผ arrows in the drawer header. Click View in context to open Context view centered on the current event. Press Esc to close.


Context View

When you spot an error, you usually want to see what happened just before and after it, across all pods, with no filters in the way. That's Context view.

Open it via the โŸท icon on any row, or the View in context button in the drawer. Galaxy shows a window of events around the one you selected, highlighting it in place. Use Load earlier and Load later to widen the window. Click Exit context to return to your filtered list.


Downloading Logs

Click Download for two options:

Export loaded logs (NDJSON): Downloads the currently loaded events as newline-delimited JSON (one event per line). This is instant and client-side. If you want the full range, click Load all in range before exporting.

Email full download: Galaxy prepares a full export in the background and emails you a download link when it's ready. Pick a range (last 1 hour, 6 hours, 24 hours, or 7 days) and submit.


Sharing a View

Click the share icon (top-right toolbar) to copy the current URL to your clipboard. Every filter, time range, selected event, and context target is encoded in the URL. Paste it to a teammate and they'll open exactly what you're seeing.


View Settings

Click the gear icon in the top-right toolbar to adjust:

Density: Comfortable (default) or Compact (tighter rows, more events on screen).

Wrap long lines: Off by default. Long messages are truncated with โ€ฆ. Turn this on to wrap them.

Collapse repeated messages: Off by default. When on, consecutive identical messages collapse into one row with a ร—N badge. Useful for apps that log the same line every second.

Settings are saved per user in your browser and persist across sessions.


Keyboard Shortcuts

ShortcutAction
โŒ˜K / Ctrl+KFocus the search box
Enter (on a focused row)Open the event drawer
EscClose the drawer, or exit Context view

Limitations

Galaxy retains runtime logs for up to 7 days. Ranges wider than 7 days are automatically trimmed, anchored on the end date. If you need longer retention, consider sending logs to an external service like Papertrail, Datadog, or Elasticsearch. You can configure a custom log destination in your app's Settings.

The initial fetch loads the newest 1,000 events. Use Load older to page through the range 1,000 events at a time, or Load all in range to pull up to 10,000 events at once. The match-count strip above the log list shows "Loaded X of Y in range" so you always know where you stand. There's no hard cap on total events per session.

Filter and search state lives in the URL only. Closing the tab forgets your active filters, but any bookmarked or shared URL retains them.


What's Next?