新手,并尝试从另一个[Core]库中重用我已经配置的Serilog。这是我的设置-
Test.sln
Test.Core (project)
- Serilog init config
- Autofac dependency injection
- Other stuff
Test.WebAPI (project)
- Configured Autofac module from my Core library in ConfigureContainer method.
弄清楚了基本设置。我创建的任何服务/控制器都从我在核心库的 Autofac 模块中完成的注册中接收依赖项(也包括日志记录,但前提是我显式调用_logger。信息/_logger。调试等,并打印到Serilog配置中配置的控制台和日志文件(。
似乎 ASP.NET 有自己的记录器,并且正在使用自己的记录器来记录所有事件,例如这些事件 - https://learn.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-2.2#sample-logging-output
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
Request starting HTTP/1.1 GET http://localhost:5000/api/todo/0
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
Executing action method TodoApi.Controllers.TodoController.GetById (TodoApi) with arguments (0) - ModelState is Valid
info: TodoApi.Controllers.TodoController[1002]
Getting item 0
warn: TodoApi.Controllers.TodoController[4000]
GetById(0) NOT FOUND
我正在尝试重新路由 ASP 记录的事件。NET的记录器到我自己的记录器,周围有一个记录器,但无法弄清楚如何。请问谁能指出我正确的方向?提前感谢!
要"静音"ASP.NET 默认日志,您需要将其添加到 appsettings.json 中:
"Logging": {
"LogLevel": {
"Default": "Debug",
"Microsoft": "Warning",
"System": "Warning"
}
}
然后默认记录器将仅记录"警告">或更低级别的所有内容(有 6 个级别的日志:跟踪、调试、信息、警告、错误严重(。此外,为了启用Serilog,您只需要添加此软件包:
<PackageReference Include="Serilog.AspNetCore" Version="#version#" />
并将其添加到您的Program.cs
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSerilog(); //this line
然后,您只需使用 DI 注入ILogger<T>
,它将在您的配置中使用 Serilog。此外,它将封装您的Serilog,以便以后更容易使用其他日志记录框架
更新:要删除以前配置的提供程序,请尝试添加以下行:
new WebHostBuilder()
.ConfigureLogging(builder => builder.ClearProviders()) // <--here
就我而言,我必须在Startup.cs/Configure()
方法中从核心库中设置 Serilog 的 ILogger。
程序.cs
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureServices(services => services.AddAutofac())
.UseStartup<Startup>()
.UseSerilog(); // Added this line as per docs
启动.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IZLogger zLogger)
{
...
Log.Logger = zLogger.GetCurrentClassLogger<Startup>(); // Set Serilog's ILogger from Core library
app.UseSerilogRequestLogging(); // Added this line as per docs
...
}
示例日志:
2019-07-22 19:01:03.179 -04:00 | [INFO] | Request starting HTTP/1.1 GET https://localhost:5001/favicon.ico
2019-07-22 19:01:03.180 -04:00 | [INFO] | HTTP GET /favicon.ico responded 404 in 0.394846 ms
2019-07-22 19:01:03.181 -04:00 | [INFO] | Request finished in 1.8292ms 404 text/plain