本文基于Serilog.AspNetCore 4.1.0 版本。 对于之后的版本,Serilog.AspNetCore可能会有针对.NET6更新更加方便读者调用,请读者悉知
疑问
Serilog 在 ASP.NET Core 5 中用的好好的,原项目升级到6也没有问题,可是为什么新建ASP.NET Core 6.0项目,使用不了"UseSerilog()"呢?
解释
因为6使用了"new minimal hosting model",5上面"UseSerilog()"
是扩展在"IHostBuilder"
上面的,而6上使用的是"WebApplicationBuilder"
,所以"UseSerilog()"
自然就无法使用了,但是"builder.Host"
上是"IHostBuilder"
类型,可以把"UseSerilog()"
用在"builder.Host"
上,不建议使用"builder.WebHost"
哦。
正确示例
.csproj 文件
<ItemGroup>
<packagereference Include="Serilog" Version="2.10.0" />
<packagereference Include="Serilog.AspNetCore" Version="4.1.0" />
<packagereference Include="Serilog.Enrichers.Thread" Version="3.1.0" />
<packagereference Include="Serilog.Sinks.Console" Version="4.0.0" />
<packagereference Include="Serilog.Sinks.File" Version="5.0.0" />
</ItemGroup>
Program.cs
using Serilog;
const string OUTPUT_TEMPLATE = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} <{ThreadId}> [{Level:u3}] {Message:lj}{NewLine}{Exception}";
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.Enrich.WithThreadId()
.Enrich.FromLogContext()
.Writeto.Console(outputTemplate: OUTPUT_TEMPLATE)
.Writeto.File("logs/app.txt"
, rollingInterval: RollingInterval.Day
, outputTemplate: OUTPUT_TEMPLATE)
.CreateLogger();
try
{
Log.@R_743_4045@ion("Starting web host");
var builder = WebApplication
.CreateBuilder(args);
builder.Host.UseSerilog(Log.Logger, dispose: true);
// Add services to the container.
builder.Services.AddControllers();
var app = builder.Build();
// Configure the HTTP request pipeline.
app.UseAuthorization();
app.UseSerilogRequestLogging();
app.MapControllers();
app.Run();
}
catch (Exception ex)
{
Log.Fatal(ex, "Host terminated unexpectedly");
}
finally
{
Log.CloseAndFlush();
}
参考
Migrate from ASP.NET Core 5.0 to 6.0
Setting up Serilog in .NET 6
声明
本文采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可,发表在CSDN和博客园,欢迎读者转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接!请读者/爬虫们尊重版权
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。