Sentry not capturing crashes inside Task.start function

I am using sentry version 8.0.2 and its reporting errors perfectly for normal cases. But for the functions which I execute via Task.start it wont report errors. inside my phoenix endpoint file I have

use Sentry.PlugCapture ... plug Sentry.PlugContext 

in my config I also have

config :logger, + backends: [:console, Sentry.LoggerBackend] 

Configuration seems correct but I am not able to capture events. Maybe I am missing something… Any help or guidance is welcome. Thanks

Probably this issue?

1 Like

@tanweerdev what is your Elixir version? Sentry expects a particular metadata to be available for logging that was only recently added to Elixir.

You can also ask Sentry to capture all log messages. Here is what I do:

config :logger, Sentry.LoggerBackend, level: :warn, excluded_domains: [:cowboy], capture_log_messages: true 
2 Likes

Environment:

Elixir version (elixir -v): Elixir 1.10.2 (compiled with Erlang/OTP 21) Erlang/OTP version (erl): Erlang/OTP 21 Sentry version (mix deps): 8.0.2 Operating system: Erlang/OTP 21 Is this an umbrella application?: yes Release type (Distillery, mix release, Mix, etc.): iex -S mix phx.server 

Here is issue submitted for more details

This did not help sentry capture error msgs. (I have before_send hook to confirm where I print the event). The only thing which worked is manually capturing it

Task.start(fn -> try do MyModule.function() rescue exception -> Sentry.capture_exception(exception, [stacktrace: System.stacktrace(), extra: %{extra: %{extra_information: "my extra information"}}]) end end) 

Thanks @josevalim @chulkilee for your kind replies. is there any way, I can make this Task.start + try/capture a utility function and call it whenever I needed to use Task.start and it will capture errors…

I confirm I’m getting sentry via Task.start in this case:

  1. Create new project
  2. Add sentry dep
  3. Add sentry logger backend (no other configuration)
config :logger, backends: [:console, Sentry.LoggerBackend] config :sentry, dsn: "http://a:b@127.0.0.1:8000/1" 
  1. Add following to a controller function
 Task.start(fn -> MyModule.function() end) 

With or without phoenix integration, it sends a request - but it does not print sentry log.

I ran dummy server with python3 -m http.server 8000 --bind 127.0.0.1 to see whether my phoenix app actually sends a request.

1 Like

Note you likely don’t want to configure this in your config/config.exs, as Sentry.LoggerBackend may be loaded even before it is compiled. This will definitely be the case in umbrella projects if only part of them depend on Sentry. Instead, call Logger.add_backend(Sentry.LoggerBackend) in your application start/2 callback. :slight_smile:

2 Likes