我是否需要初始化Logger.Log ASP.NET Core 3应用程序



我打算在我的 ASP.NET Core 3应用程序中使用Serilog,我想使用内联初始化。 我只打算使用应用程序中的ILogger<T>接口。

如果我不打算直接使用Log类中的日志记录方法,是否有任何特殊原因将新的记录器实例分配给Log.Logger属性?

我在 Serilog 集成 ASP.NET 核心页面上找到了以下示例:

Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.Console()
.CreateLogger();

我知道为了记录应用程序启动错误,我需要创建一个新的记录器实例,但我不能像这样使用它:

using Serilog;
public class Program
{
public static int Main(string[] args)
{
using var startupLogger = new LoggerConfiguration()
.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.Console()
.CreateLogger();
try
{
startupLogger.Information("Starting web host");
CreateHostBuilder(args).Build().Run();
return 0;
}
catch (Exception ex)
{
startupLogger.Fatal(ex, "Host terminated unexpectedly");
return 1;
}
}
}

通过设置

Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.Console()
.CreateLogger();

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.UseSerilog(); // <-- Add this line;
}

您可以"全局"设置记录器,无需注入即可在整个应用程序中访问它。

在项目中引用它的任何其他类中,可以通过以下方式进行记录:

Log.Error("");

使用您在启动时设置的记录器设置。

回答您的问题是否可以注入Serilog记录器,答案是否定的。您无法通过 Net Core 中的 DI 访问 Serilog。这是一个静态的。如果你想要它,你可能会破解它,我不推荐。你可以在这里找到一些例子。

最新更新