c# - 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.
解决方案
我会提出一些改进:
- 不要重复接收器配置,无需在代码和 appsettings 中配置相同的接收器。选择一个并使用它。
- ASP .NET Core 旨在支持依赖注入。注入
ILogger<HelloController>
而HelloController
不是访问静态Log.Debug
. - 感谢您发现问题并在您的问题中报告它,它肯定会帮助其他开发人员。
有关 Serilog 和 ASP .NET Core 2.1 的一个非常小的示例,请查看此repo。
推荐阅读
- javascript - 有没有办法改变 v-edit-dialog 中保存和取消按钮的对齐方式?
- java - JsonSchema2Pojo,出生日期使用类型号生成,我正在尝试以整数形式传递值
- c++ - 带有 Emscripten 和 WASM 的 Motif 和 X11
- javascript - 在我的条件中练习函数和严格等式是错误的,我不知道为什么
- angular - 离子项目滑动 ngIf 问题
- css - 如何将焦点添加到没有 href 的锚点?
- node.js - 从组织的模板创建存储库后如何自动运行 Github Action?
- excel - 如何在 Excel 中使用 VBA 使图片出现在文本框之后
- java - 从 firbase 实时数据库中检索数据在必填字段中显示为空白
- blazor - Bootstrap Navbar Dropdown 在我的 Blazor 应用程序中未按预期工作