首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET核心Web如何将.NET Core 5中的SetupSerilog转换为.NET Core 6 Program.cs

ASP.NET核心Web如何将.NET Core 5中的SetupSerilog转换为.NET Core 6 Program.cs
EN

Stack Overflow用户
提问于 2022-05-10 07:12:37
回答 1查看 48关注 0票数 0

我在ASP.NET Core-5WebAPI中有一个代码,我想将它转换为ASP.NET Core-6WebAPI。

我有这个分机。

LogSettingsExtension:

代码语言:javascript
复制
public static class LogSettingsExtension
{
    public static void SetupSerilog(IConfiguration config)
    {
        DocumentStore ravenStore = new()
        {
            Urls = new string[] { config["RavenDBConfigurations:ConnectionURL"] },
            Database = config["RavenDBConfigurations:DatabaseName"]
        };

        ravenStore.Certificate = new X509Certificate2(config["RavenDBConfigurations:CertificateFilePath"],
            config["RavenDBConfigurations:Password"], X509KeyStorageFlags.MachineKeySet);

        ravenStore.Initialize();

        Log.Logger = new LoggerConfiguration()
            .WriteTo.File(
                path: ".\\Logs\\log-.txt",
                outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}",
                rollingInterval: RollingInterval.Day,
                restrictedToMinimumLevel: LogEventLevel.Information
            )
            .WriteTo.RavenDB(ravenStore)
            .CreateLogger();
    }
}

在.NET Core-5中,我在Program.cs中将其用作:

代码语言:javascript
复制
public class Program
{
    public static void Main(string[] args)
    {
        var env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
        var isDevelopment = env == Environments.Development;

        IConfiguration config = ConfigurationSetupExtension.GetConfig(isDevelopment);

        LogSettingsExtension.SetupSerilog(config);
        try
        {
            Log.Information("Application is starting...");
            CreateHostBuilder(args)
                .Build()
                .Run();
        }
        catch (Exception ex)
        {
            Log.Fatal(ex.StackTrace, "Application failed to start");
        }
        finally
        {
            Log.CloseAndFlush();
        }
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });

}

既然一切都变了,我如何在Program.cs核心-6中将其转换为.NET?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2022-05-10 07:28:43

您可以设置您的Program.cs,如下所示。最初,只在主方法期间使用并仅在控制台上登录的BootstrapLogger设置。在CreateHostBuilder期间,可以从配置中设置Serilog,以便在程序中使用。

代码语言:javascript
复制
public class Program
{
    public static int Main(string[] args)
    {
         Log.Logger = new LoggerConfiguration()
        .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
        .Enrich.FromLogContext()
        .WriteTo.Console()
        .CreateBootstrapLogger();

        try
        {
            CreateHostBuilder(args).Build().Run();
            return 0;
        }
        catch (Exception ex)
        {
            Log.Fatal(ex, "Host terminated unexpectedly");
            return 1;
        }
        finally
        {
            Log.CloseAndFlush();
        }
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
         .UseSerilog((context, services, configuration) =>
         {
             configuration
                 .ReadFrom.Configuration(context.Configuration);
         })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });
}

appsettings.json中将登录控制台和文件的示例配置。

代码语言:javascript
复制
"Serilog": {
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
"MinimumLevel": {
  "Default": "Information",
  "Override": {
    "Microsoft": "Warning",
    "Microsoft.Hosting.Lifetime": "Information"
  }
},
"WriteTo": [
  { "Name": "Console" },
  {
    "Name": "File",
    "Args": { "path": "logs\\log-file-.txt" }
  }
],  
"Enrich": [ "FromLogContext" ]

}

一个问题是,这没有提供直接的方式来登录Startup -> ConfigureServices()。不过,也有一些解决办法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72182061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档