Customizing object display
By default, Honeybadger supports displaying the following core Ruby objects (uncoincidentally, these objects are also supported by JSON):
HashArraySetNumericTrueClassFalseClasNilClassStringWhen an object of a different class is sent as data to Honeybadger (via context,
request data, local variables, etc.), it’s first converted to a string using the
String() function.
For instance, given a User object which defines the #to_s method to return
the user’s email address:
class User < ApplicationRecord def to_s email endend
user = User.create(email: "user@example.com")
Honeybadger.context({ user: user })…Honeybadger will display the context as:
{ "user": "user@example.com"}If this value is undesirable (since there’s no way to know the class of the
object), the #to_honeybadger method can be defined to customize the value that
is reported to Honeybadger:
class User < ApplicationRecord def to_s email end
def to_honeybadger "#<User email=#{ email }>" endend…now the context will display as:
{ "user": "#<User email=user@example.com>"}Note that while by default the contents of #inspect are filtered to prevent
leaking sensitive attributes, attributes are not filtered when returning
#inspect from #to_honeybadger, so it’s always best to explicitly interpolate
the attributes that you want to display unless you know that the inspected
output will never contain sensitive information.