代码之家  ›  专栏  ›  技术社区  ›  Botond Botos

我需要初始化吗日志记录器在ASP.NET核心3应用

  •  1
  • Botond Botos  · 技术社区  · 5 年前

    我计划在我的ASP.NET核心3应用程序和我想使用 inline initialization . 我只想用 ILogger<T> 接口。

    将新的记录器实例分配给 Log.Logger 属性,如果我不打算直接使用 Log 班级?

    我在 Serilog integration for ASP.NET Core 页码:23/46

    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;
            }
        }
    }
    
    0 回复  |  直到 5 年前
        1
  •  0
  •   Stelios Giakoumidis    5 年前

    通过设置

    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("");
    

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

    回答你的问题如果可以注入serilogger,答案是否定的。你不能通过网络核心的DI访问Serilog。这是静电。如果你想的话,你可以随意修改一下,这是我不推荐的。你可以找到一些例子 here .