在 ASP.NET MVC 5 项目中实施 Airbrake

Implementing Airbrake into a ASP.NET MVC 5 project

我有一个较旧的 .NET 4.8 项目需要使用 Airbrake。该项目正在为其 IoC 容器使用 Unity,实现标准 Repository Service 模式。

ASP.NET 示例很少。

我想做这样的事情:

public static void RegisterTypes(IUnityContainer container)
{
    container.RegisterType(typeof(ILogger<>), typeof(ILogger<>));
    container.RegisterType<IMyService, MyService();
}

public class MyController
{
    private readonly ILogger<MyController> _logger;
    private readonly IMyService _myService;
    
    public MyController(ILogger<MyController> logger, IMyService _myService)
    {
        _logger = logger;
        _myService = myService;
    }

    public MyMethod()
    {
        try
        {
            var x = _myService.DoThis();
        } 
        catch (Exception ex)
        {
            _logger.LogError(e, e.Message);
        }
    }
}

我认为我需要以某种方式向 ILogger 注册 Airbrake,或者创建我自己的日志记录服务。

public class Logging : ILogging
{
    public void LogError(Exception e, string message)
    {
        var airbrake = new AirbrakeNotifier(new AirbrakeConfig
        {
            ProjectId = // pulled from web.config somehow
            ProjectKey = // pulled from web.config somehow
        });

        var notice = airbrake.BuildNotice(ex);
        airbrake.NotifyAsync(notice).Result;
    }
}

我试过以此为起点:https://github.com/airbrake/sharpbrake/blob/master/docs/asp-net-http-module.md

这非常好,但我需要以某种方式扩展它以便能够在我的服务中使用它,而不仅仅是 .Web 项目。

我知道 ASP.NET 模块会自动捕获错误,但我想在我认为合适时手动记录,避免每次我想记录错误时都必须调用 airbrake 客户端。

有没有办法做到这一点,或者我完全误解了它应该如何工作?

您实际上不需要将其作为 .NET ILogger 的一部分进行连接。我确信有一种方法(可能通过 OWIN),但是没有什么能阻止你像编写任何其他服务一样编写基本日志记录服务并通过标准 DI 使用它。答案几乎就在开头的问题中。