首页 > 解决方案 > Serilog 不登录到 .NET Core 2.1 中的控制台

问题描述

我创建了一个新的 ASP.NET Core 2.1 Web 应用程序并添加了这些 Nuget 包:

Serilog.AspNetCore 2.1.1
Serilog.Settings.Configuration 2.6.1
Serilog.Sinks.Console 3.1.1

Program.cs看起来像这样:

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration
                .ReadFrom.Configuration(hostingContext.Configuration)
                .Enrich.FromLogContext()
                .WriteTo.Console());
}

这是appsettings.json文件:

{
  "Serilog": {
    "Using": [ "Serilog.Sinks.Console" ],
    "MinimumLevel": "Debug",
    "WriteTo": [
      { "Name": "Console" }
    ],
    "Enrich": [ "FromLogContext" ],
    "Properties": {
      "Application": "MyApplication"
    }
  }
}

我添加了一个如下所示的控制器:

public class HelloController : Controller
{
    // GET
    public IActionResult Index()
    {
        Log.Debug("Test");
        return new OkObjectResult("Hello world");
    }
}

虽然它HelloController本身按预期工作,但我没有看到Test控制台的调试输出。

这是调用 Controller 后的控制台日志输出:

[21:39:16 DBG] Connection id "0HLEJO3CE6S7J" started.
[21:39:16 DBG] Connection id "0HLEJO3CE6S7J" started.
[21:39:16 INF] Request starting HTTP/1.1 GET http://localhost:5000/api/hello
[21:39:16 INF] Request starting HTTP/1.1 GET http://localhost:5000/api/hello
[21:39:17 DBG] Connection id "0HLEJO3CE6S7J" completed keep alive response.
[21:39:17 DBG] Connection id "0HLEJO3CE6S7J" completed keep alive response.
[21:39:17 INF] Request finished in 80.8969ms 200
[21:39:17 INF] Request finished in 80.8969ms 200
[21:39:17 DBG] Connection id "0HLEJO3CE6S7J" received FIN.
[21:39:17 DBG] Connection id "0HLEJO3CE6S7J" received FIN.
[21:39:17 DBG] Connection id "0HLEJO3CE6S7J" disconnecting.
[21:39:17 DBG] Connection id "0HLEJO3CE6S7J" disconnecting.
[21:39:17 DBG] Connection id "0HLEJO3CE6S7J" sending FIN.
[21:39:17 DBG] Connection id "0HLEJO3CE6S7J" sending FIN.
[21:39:17 DBG] Connection id "0HLEJO3CE6S7J" stopped.
[21:39:17 DBG] Connection id "0HLEJO3CE6S7J" stopped.

标签: c#asp.net-coreserilog

解决方案


我会提出一些改进:

  1. 不要重复接收器配置,无需在代码和 appsettings 中配置相同的接收器。选择一个并使用它。
  2. ASP .NET Core 旨在支持依赖注入。注入ILogger<HelloController>HelloController不是访问静态Log.Debug.
  3. 感谢您发现问题并在您的问题中报告它,它肯定会帮助其他开发人员。

有关 Serilog 和 ASP .NET Core 2.1 的一个非常小的示例,请查看此repo


推荐阅读