![](/img/trans.png)
[英]Serilog not working from configuration in asp.net core 2.2 API
[英]ASP.NET Core 2.2 - Serilog | Missing out on events
ASP.NET Core的新增功能,试图从另一个[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.
弄清楚了基本设置。 我所做的任何服务/控制器都将收到我在Core库的Autofac模块中所做的注册(包括日志记录)的依赖关系,但前提是我明确调用_logger.Information / _logger.Debug等,并同时打印到两者控制台和日志文件(在Serilog配置中配置)。
似乎ASP.NET拥有自己的记录器,并且正在使用自己的记录器来记录所有事件,例如这些事件-https: //docs.microsoft.com/zh-cn/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()
方法的Core库中设置Serilog的ILogger。
Program.cs
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureServices(services => services.AddAutofac())
.UseStartup<Startup>()
.UseSerilog(); // Added this line as per docs
启动文件
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.