Search
Honeybadger provides powerful search features that let you easily find previously-occurred errors by type, location, meta-data and many other attributes. You can search for errors in a single project, or across all projects.
To search by error type and message, you can simply enter those into the search box. More advanced searches are accomplished via a special query language. We've provided a query builder that lets you construct useful queries quickly and easily.
How to search
Enter a free-form text value, or one or more key:"value"
tokens into the search box. Then press enter, or click on the magnifying glass button.
Tokens are separated by spaces. Single and double quotes are allowed.
Example query:
john class:UserError -tag:wip -tag:pending component:"UsersController" action:'update'
.
Because these search queries can become quite complex, we've included a query builder that allows you to construct them without much typing. The query builder automatically opens when you focus the search box.
Keyboard navigation
Use the following keyboard shortcuts in the search box as you edit your query. Additional context-sensitive options will be shown to you as you type.
Key | Response |
---|---|
enter | Submits form |
tab | Tabs to next token and selects value inside quotes |
shift-tab | Reverse-cycles selected token |
mod backspace | Deletes selected token |
escape | Closes hint |
Keyboard shortcuts
Quickly search errors using the following keyboard shortcuts while on the error page in the project. Note that these shortcuts immediately trigger a page load and will not preserve the state of the search builder.
Key | Response |
---|---|
/ | Focus search box |
A or a | Show resolved And Unresolved Errors |
U or u | Show Unresolved Errors |
R or r | Show Resolved Errors |
M or m | Show Errors Assigned to Me |
T or t | Show All Users' Errors |
J or j | Jump to another project * |
E or e | Show errors in all environments ** |
*This shortcut can be used on any page of the project.
**Use first character of environment name to filter by environment.
How tokens are combined
When combining different tokens, we use AND. So class:MyError assignee:myemail@domain.com
searches for MyError
instances that are assigned to me.
When combining multiple values for the same token, we use OR. For example, class:"Foo" class:"Bar"
will return errors with class Foo
OR Bar
. There's one minor exception to this rule. Negative tokens, i.e. tokens preceded by -
will be combined with AND.
Here are a few examples:
Example query | Searches |
---|---|
class:"Foo" is:resolved |
Resolved errors with class Foo
|
-class:"Foo" is:resolved |
Resolved errors without class Foo
|
-class:"Foo" -is:resolved |
Unresolved errors without class Foo
|
class:"Foo" class:"Bar" is:resolved |
Resolved errors with class Foo OR class Bar
|
-class:"Foo" -class:"Bar" is:resolved |
Resolved errors without class Foo AND class Bar
|
Examples
Search by resolved, ignored, or paused
Search errors that are resolved, ignored, paused, or unresolved, not ignored, or unpaused.
By default, Honeybadger sorts all errors by -is:ignored
and -is:resolved
, showing you everything that has not been set as ignored or resolved. These tokens are automatically populated in the search box.
Example query | Searches |
---|---|
is:resolved |
Resolved errors |
-is:resolved |
Unresolved errors |
is:paused |
Paused errors |
-is:paused |
Errors that aren't paused |
is:ignored |
Ignored errors |
-is:ignored |
Errors that aren't ignored |
Search by assignee
Errors can be assigned to team members, and results can be refined by assignment. Tokens can be combined to search errors assigned to multiple team members.
Example query | Searches |
---|---|
assignee:"nobody" |
Unassigned errors |
assignee:"anybody" |
Errors assigned to anyone |
assignee:"jane@email.com" |
Errors assigned to a specific person |
-assignee:"jane@email.com" |
Errors not assigned to a specific person |
If other, choose a team member from the drop-down list or begin typing to trigger auto-complete.
.
Search by environment
Search errors by your environment:
Example query | Searches |
---|---|
environment:"production" |
Errors occurring in production |
-environment:"production" |
Errors not occurring in production |
environment:"development" |
Errors occurring in development |
-environment:"development" |
Errors not occurring in development |
environment:"custom_environment" |
Errors occurring in any environment |
If other, choose an environment from the drop-down list or begin typing to trigger auto-complete.
.
Search by date
Search errors by their occurrence. Your timezone is automatically determined but can be changed manually.
Example query | Searches |
---|---|
occurred.after:"YYYY-MM-DD 0:00 UTC-7" |
Errors last seen after an exact date |
occurred.before:"YYYY-MM-DD 0:00 UTC-7" |
Errors last seen before an exact date |
occurred.after:"24 hours ago" |
Errors last seen after a human-friendly date |
occurred.before:"24 hours ago" |
Errors last seen before a human-friendly date |
You can enter human-friendly dates like today
, this week
, or July 1
, for example: occurred.after:"this week"
.
If you want to see errors that last occurred as of a certain date
— that is, they haven't occurred again since that date — you can use
last_occurred
instead of occurred
, like so: last_occurred.before:"1 week ago"
.
Search by first seen
Search errors by when they were first seen. Your timezone is automatically determined but can be changed manually.
Example query | Searches |
---|---|
created.after:"YYYY-MM-DD 0:00 UTC-7" |
Errors first seen after an exact date |
created.before:"YYYY-MM-DD 0:00 UTC-7" |
Errors first seen before an exact date |
created.after:"24 hours ago" |
Errors first seen after a human-friendly date |
created.before:"24 hours ago" |
Errors first seen before a human-friendly date |
You can enter human-friendly dates like today
, this week
, or July 1
, for example: created.after:"September 12"
.
Search by error details
Search error by class, tag, and message.
Example query | Searches |
---|---|
class:"PermissionDeniedError" |
Errors with a certain class |
-class:"PermissionDeniedError" |
Errors without a certain class |
tag:"tag_example" |
Errors with a tag |
-tag:"tag_example" |
Errors Without a tag |
message:"404" |
Errors with a message |
-message:"404" |
Errors without message text |
has:ticket |
Errors with an associated GitHub issue, Asana task, etc. |
-has:ticket |
Errors without an associated GitHub issue, Asana task, etc. |
has:comment |
Errors that have comments from team members |
-has:comment |
Errors that have no comments from team members |
Class, tag, and message can be combined for specific results. For example, the query: message:"NameError" class:"TextOrganizer" tag:"priority"
searches errors containing "NameError" from the TextOrganizer class with a "priority" tag.
Search by location
Search errors by component, action, URL, file name, and host.
Example query | Searches |
---|---|
component:"UsersController" |
Errors occurring in a controller/component |
-component:"UsersController" |
Errors not occurring in a controller/component |
action:"update" |
Errors occurring in an action |
-action:"update" |
Errors not occurring in an action |
request.url:"https://google.com" |
Errors occurring at a URL |
-request.url:"https://google.com" |
Errors not occurring at a URL |
request.host:"api.yoursite.com" |
Errors occurring in an application with this in the HTTP_HOST environment variable (the Host: header provided by the browser) |
-request.host:"api.yoursite.com" |
Errors not occurring in an application with this in the HTTP_HOST environment variable (the Host: header provided by the browser) |
file:somefile.rb |
Errors occurring in this file |
-file:somefile.rb |
Errors not occurring in this file |
hostname:"api-east1-a" |
Errors occurring on a server with this hostname |
-hostname:"api-east1-a" |
Errors not occurring on a server with this hostname |
Locations can be combined for more specific results. For example, the query: component:"UsersController" action:"update" request.url:"/docs"
searches errors generated from the update action in the UsersController in the URL camera
.
Search by request
Search errors by context, params, user agent, or session hashes.
Example query | Searches |
---|---|
context.user_id:* |
Errors that impacted a user (if you send user_id in context) |
context.user_email:* |
Errors that impacted a user (if you send user_email in context) |
context.user.email:"bob@example.io" |
Errors with a matching context value |
-context.user.name:"Bob" |
Errors without a matching context value |
params.user.first_name:"Bob" |
Errors with a matching param value |
params.old:"useless" |
Errors without a matching param value |
request.user_agent:"Googlebot |
Errors caused by a user with this user agent |
-request.user_agent:"Googlebot |
Errors not caused by a user with this user agent |
request.referer:"http://my.site.com/location |
Errors that occurred when the user came from a particular URL |
-request.referer:"http://my.site.com/location |
Errors that occurred when the user did not come from a particular URL |
Requests can be combined or nested for more specific results. For example, searching for context.user.email:bob@example.com would match the following hash that was sent in the context with an error:
{ user: { email: "bob@example.com" } }
When searching these hashes, separate the nested levels of the hash with a period. For example params.user.first_name:bob
.
Searches against context, params, user agent, or session hashes use * as a wild-card, so a search for context.user.email:*@example.com
would match any email address at example.com.
Searching for arrays
When searching for data within array values, one way is to do the search on a key that contains the array value. For example, you might have a sidekiq job that shows up with params in our UI like this:
{"job" => {"args" => [{"job_class" => "Foo", "job_id" => "123"}]}}
To search for "Foo", your search should look like this: params.job.args:*Foo*
You could be more explicit by including the array index in the query:
params.job.args.0.job_id:123
Sorting results
Error results can be sorted by date or error count.
Sort by date
Sorting by "Last seen" lets you quickly jump to the newest or oldest exceptions that match your search result.
- Go to your project's error list page
- Click on the table header labeled "last seen"
- Click on it again to reverse the sort order
Sort by count
Sorting by "Times" lets you see which errors have happened the most or the fewest times.
- Go to your project's error index
- Click on the table header labeled "times"
- Click on it again to reverse the sort order
Saved searches and default search
You can save a search using the button with the bookmark icon to the right of the button with the search icon. This allows to easily re-use a search. You can also pin a saved search to use that search as the default search. Once you have pinned a search, those search terms will be used as the default view for the project.
Batch actions
You can use the Bulk Update dropdown to update multiple errors simultaneously. You can apply actions to all search results (this is the default), or you can use the checkboxes in the error list to apply the actions to selected errors.
- Use the search to select which errors you'd like change.
- Click on "Actions" and select one or more options from the drop-down.
Free-form text search
Search through your errors by class or error message by typing your search term into the search box. Free-form text queries can also be combined with key:value
tokens, for example:
john class:UserError component:UsersController action:update
.