zoukankan      html  css  js  c++  java
  • 在 ASP.NET Core 6.0 中使用 Serilog

    本文基于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.Information("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博客园,欢迎读者转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接!请读者/爬虫们尊重版权

  • 相关阅读:
    驾照暂时不用年审,放心了
    痛筋
    摘枣
    当了一回山村教师
    补贴山村学校照片
    心中无敌,无敌于天下
    山路
    学会珍惜
    写给部分美女们
    不打羽毛球好多年
  • 原文地址:https://www.cnblogs.com/chasingdreams2017/p/15569614.html
Copyright © 2011-2022 走看看