diff options
| author | Patrick Barron <barronpm@gmail.com> | 2020-08-15 18:36:37 -0400 |
|---|---|---|
| committer | Patrick Barron <barronpm@gmail.com> | 2020-08-15 18:36:37 -0400 |
| commit | b2f734efd127c04815d0a4799dd20449b96c501b (patch) | |
| tree | b16044de852ac5912d68a82e790fde9f54e2e0a2 | |
| parent | dc88e93504a98a377881f7425ffba5d2221fada0 (diff) | |
Gracefully handle exceptions in IEventConsumers
| -rw-r--r-- | Jellyfin.Server.Implementations/Events/EventManager.cs | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/Jellyfin.Server.Implementations/Events/EventManager.cs b/Jellyfin.Server.Implementations/Events/EventManager.cs index d79b73106..707002442 100644 --- a/Jellyfin.Server.Implementations/Events/EventManager.cs +++ b/Jellyfin.Server.Implementations/Events/EventManager.cs @@ -3,6 +3,7 @@ using System.Threading.Tasks; using MediaBrowser.Controller; using MediaBrowser.Controller.Events; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; namespace Jellyfin.Server.Implementations.Events { @@ -11,14 +12,17 @@ namespace Jellyfin.Server.Implementations.Events /// </summary> public class EventManager : IEventManager { + private readonly ILogger<EventManager> _logger; private readonly IServerApplicationHost _appHost; /// <summary> /// Initializes a new instance of the <see cref="EventManager"/> class. /// </summary> + /// <param name="logger">The logger.</param> /// <param name="appHost">The application host.</param> - public EventManager(IServerApplicationHost appHost) + public EventManager(ILogger<EventManager> logger, IServerApplicationHost appHost) { + _logger = logger; _appHost = appHost; } @@ -42,7 +46,14 @@ namespace Jellyfin.Server.Implementations.Events using var scope = _appHost.ServiceProvider.CreateScope(); foreach (var service in scope.ServiceProvider.GetServices<IEventConsumer<T>>()) { - await service.OnEvent(eventArgs).ConfigureAwait(false); + try + { + await service.OnEvent(eventArgs).ConfigureAwait(false); + } + catch (Exception e) + { + _logger.LogError(e, "Uncaught exception in EventConsumer {type}: ", service.GetType()); + } } } } |
