Query Syntax
The Loguro filter bar is a mini human friendly query language and command executor.
It handles simple text searches, structured field filters, time ranges, command-style analytics, platform commands like --download --download:list or --task:jira --send:slack#team ant many more — all in a single input.
Text search
Type anything to search across log messages:
message:"auth failed" Global search
Search across message and all context values at once — useful when you don’t know which field contains the term:
search:"stripe"
search:timeout
search:"payment failed"|"checkout error" Multiple terms are OR-ed together. Unlike message:, this also scans every key inside the context object.
Level filters
Filter by one or more log levels:
level:error
level:error|warning
!level:debug The | operator means OR. The ! prefix negates (exclude that level).
Message filters
Match against the message field. Multiple terms are OR-ed together:
message:"timeout"
message:"db error"|"cache miss"
!message:"healthcheck" Trace ID
Find all logs belonging to a distributed trace:
trace:"abc123def456"
trace:"id1"|"id2"
!trace:"abc123" Context filters
Any key inside the context object is filterable using dot notation:
context.userId:42
context.env:"production"
context.gateway:"stripe"
!context.env:"staging" For context keys that contain dots, use bracket notation:
context.svc["k.with.dot"]:value Comparison operators
Context filters accept comparison operators for numeric or relative matches:
context.duration:>500
context.status:>=400
context.retryCount:<3
context.code:!=200 Operators: = (default), !=, >, <, >=, <=. Numeric values are auto-cast — 9 > 100 won’t lexically misbehave.
Array elements
Index into an array by position with [N], or match any element with [*]:
context.items[0].name:"foo"
context.attributes[*].key:"service.name"
context.spans[*].duration:>500 [*] matches if any element in that array satisfies the comparison. Works with =, !=, and numeric operators (>, <, >=, <=).
Stringified JSON values
Some logs contain JSON inside a string field (e.g. an OTel payload sent as context.json). Use :: to mark the boundary where the engine should re-parse:
context.json::resourceLogs[*].resource.attributes[*].key:"service.name" Each :: adds one extra JSON unwrap. The segment before :: cannot itself use [*] (you can’t reparse multiple strings at once).
Tip: clicking the + icon next to a value in the right-side context panel auto-builds the correct filter — including [*] for arrays and :: for stringified JSON boundaries.
Time ranges
Use shorthand labels for common windows:
@today
@last-24h
@last-7d
@last-1h Or specify explicit boundaries:
from:2026-01-01 with time: from:2026-01-01:10:05 to:2026-01-01:15:30
to:2026-03-31
from:2026-01-01 to:2026-03-31
from:"3 days ago" to:"yesterday at 10:00" Excluding time ranges
Negate any time form with ! to exclude that window from results:
!@yesterday
!@last-1h
!from:"2 days ago"
!to:2026-01-15 Pagination
Page through large result sets:
show:100
page:3
show:50 page:2 show is per-page (default 50); page is 1-indexed.
Command flags
Commands start with -- and trigger analytics or actions.
Count
--count Shows the total number of logs matching your current filters.
Presets
Quick level presets expand to the full filter:
--errors
--warn
--debug
--info
--critical Time presets:
--today
--last-1h
--last-7d Top values
Find the most common values for any field:
--top:level
--top:context.status
--top:context.gateway Unique values
Count distinct values for a field:
--unique:context.userId
--unique:context.region Slow requests
Find logs where context.duration exceeds a threshold (default 1000ms):
--slow
--slow:500 Rate
Display log rate over time (logs per minute):
--rate Sample
Randomly pick N logs from the matching result set:
--sample
--sample:25 Memory
Switch the log source to forever memory — logs saved when creating issues, which survive your plan’s retention window:
--memory
message:"payment failed" --memory
--memory --count See Memory & Forever Logs for details.
Download
Export matching logs as a file:
--download
--download:csv
--download:list Downloads default to Parquet format. --download:csv enforces CSV output. Add :Nh to set expiry hours (default 24):
--download:48h
--download:csv:72h Severity
Show the level distribution widget for the current filter set:
--severity Diff
Compare patterns between two time ranges. Accepts one or two baselines:
--diff:yesterday
--diff:2-days-ago:yesterday
--diff:yesterday:sensitivity=high
--diff:last-7d:spike=200:drop=50 Returns new patterns, spikes, drops, and steady patterns relative to the baseline. Sensitivity tunes the threshold; spike=N/drop=N set explicit percentage cutoffs.
Grouping
Pattern grouping is on by default — similar logs collapse into a single row with a count. Override per query, or save the override as the project’s default:
--no-group
--no-group:save
--group:save Investigated logs
Filter to only logs that have an AI investigation attached:
--investigate:list
level:error --investigate:list Separate message JSON
Some apps log a JSON payload as the message string. Extract it into the context tree for filtering:
--separate::message
--separate::message:save
--no-separate::message Replay
Replay the matching logs as a live stream for the selected time range:
--replay
--replay:2x
--replay:0.5x Live stream
Toggle the WebSocket live tail for the current view:
--live
--live:on
--live:off Timeline & chart
Visualize log volume over time:
--timeline
--chart Combining filters
All filters compose with AND semantics by default. The following finds error logs from Stripe in the last 24 hours:
level:error context.gateway:stripe @last-24h --count Add --top:context.errorCode to see which error codes are most common:
level:error context.gateway:stripe @last-24h --top:context.errorCode Saved views
Save any filter query as a named view from the bookmark icon in the filter bar. Use #slug to expand a saved view inline:
#stripe-errors Or reference it explicitly:
--view:stripe-errors To save a view you can write your filters and include the save command.
level:error context.gateway:stripe @last-24h --save:<name> Pipe chains
Use > to chain two commands in sequence. The left side executes first, then the right side runs with its result.
--project::create > --keys::create:prod This creates a new project, then immediately creates an API key named prod scoped to it.
--task:linear > --send:discord Creates a Linear issue from the current log context, then sends a Discord notification.
Chains are evaluated left-to-right. The > operator passes context between commands — the right side receives the output of the left.