xir*_*ird 5 c# owin-middleware serilog
我正在尝试集成serilog以进行异常的全局处理,但是,当我尝试将ILoggerFactory作为新参数添加到Configuration()时,由于无法识别OWIN Startup.cs,因此该应用程序无法加载。谁能告诉我我是否缺少什么?以下是我的Startup.cs:
using Microsoft.Extensions.Logging;
using Microsoft.Owin;
using Owin;
using Serilog;
[assembly: OwinStartupAttribute(typeof(InvoiceAutomation.WebUI.Startup))]
namespace InvoiceAutomation.WebUI
{
public partial class Startup
{
public Startup()
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.LiterateConsole()
.WriteTo.RollingFile("log-{Date}.txt")
.CreateLogger();
}
public void Configuration(IAppBuilder app, ILoggerFactory loggerFactory)
{
ConfigureAuth(app);
loggerFactory.AddSerilog();
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 1
它不会加载,因为它需要带有签名的方法
public void Configuration(IAppBuilder app)
Run Code Online (Sandbox Code Playgroud)
但你不需要loggerFactory.AddSerilog();再使用了,创建logger( Log.Logger = new LoggerConfiguration())就足够了。
我想出了中间件的全局异常处理怎么样:
public class OwinExceptionHandlerMiddleware : OwinMiddleware
{
private readonly ILogger logger;
public OwinExceptionHandlerMiddleware(OwinMiddleware next, ILogger logger)
: base(next)
{
this.logger = logger;
}
public override async Task Invoke(IOwinContext context)
{
try
{
await this.Next.Invoke(context);
}
catch (Exception ex)
{
this.logger.Error(ex, $"{nameof(OwinExceptionHandlerMiddleware)} caught exception.");
throw;
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,您需要在 Startup.cs 中注册中间件:
appBuilder.Use<OwinExceptionHandlerMiddleware>(Log.Logger);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1499 次 |
| 最近记录: |