我有一个较旧的.NET 4.8项目,需要使用空气制动。该项目将Unity用于其IoC容器,实现了标准的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客户端。
有没有办法做到这一点,或者我完全误解了这应该是如何工作的?
发布于 2021-05-11 16:45:51
实际上,您不需要将其作为.NET ILogger的一部分进行连接。我确信有一种方法(可能是通过OWIN),但是您可以像编写其他任何服务一样编写一个基本的日志记录服务,并通过bog标准DI使用它。答案从一开始就在问题中。
https://stackoverflow.com/questions/67434935
复制相似问题