aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Barron <barronpm@gmail.com>2020-08-15 18:36:37 -0400
committerPatrick Barron <barronpm@gmail.com>2020-08-15 18:36:37 -0400
commitb2f734efd127c04815d0a4799dd20449b96c501b (patch)
treeb16044de852ac5912d68a82e790fde9f54e2e0a2
parentdc88e93504a98a377881f7425ffba5d2221fada0 (diff)
Gracefully handle exceptions in IEventConsumers
-rw-r--r--Jellyfin.Server.Implementations/Events/EventManager.cs15
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());
+ }
}
}
}