【发布时间】:2020-03-30 04:28:52
【问题描述】:
我相信你做得很好,我第一次使用 Serilogs。我使用 ASP CORE 3.0。我注意到,Serilogs 仅在我停止应用程序后记录事件,它不记录实时事件。
我的 appsettings.Development.json
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"System": "Warning",
"Microsoft": "Information",
"Microsoft.AspNetCore": "Information"
},
"File": {
"location": "logs/logging_api.log"
}};
程序.cs
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.UseSerilog((hostingContext, loggerConfiguration) =>
{
// About log messges formatting: https://github.com/serilog/serilog/wiki/Formatting-Output#formatting-plain-text
// Implement serilog configurations
loggerConfiguration
.ReadFrom.Configuration(hostingContext.Configuration)
.Enrich.FromLogContext()
.WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} {HttpContext}");
var logFileLocation = hostingContext.Configuration.GetSection("Serilog:File:Location").Value ??
hostingContext.Configuration.GetSection("LOG_FILE_LOCATION").Value;
if (logFileLocation != null)
{
loggerConfiguration
.WriteTo.File(
logFileLocation,
outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} {HttpContext}",
rollingInterval: RollingInterval.Day,
rollOnFileSizeLimit: true,
fileSizeLimitBytes: 50 * 1024 * 1024);
}
});
Startup.cs
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseSerilogRequestLogging();
// Enable default healthcheck
app.UseHealthChecks("/api/health/check");
// Enable swagger only for development environments
// specifying the Swagger JSON endpoint.
if (this.configuration.GetValue<bool>("EnableSwagger"))
{
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Logging API V1");
});
}
app.UseRouting();
// app.UseMiddleware<LoggingApiAuth>();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
项目文件
<ProjectReference Include="..\LoggingApi.Data\LoggingApi.Data.csproj" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="5.0.0-rc4" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="5.0.0-rc4" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUi" Version="5.0.0-rc4" />
<PackageReference Include="Serilog.AspNetCore" Version="3.2.0" />
<PackageReference Include="Serilog.Settings.Configuration" Version="3.1.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
<PackageReference Include="Serilog.Sinks.File" Version="4.0.0" />
<PackageReference Include="Serilog.Enrichers.AspnetcoreHttpcontext" Version="1.1.0" />
问题:
只有在我停止应用程序后才会记录
Loaded **'/usr/local/share/dotnet/shared/Microsoft.NETCore.App/3.0.0/System.Net.NameResolution.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
程序“[42520] LoggingApi.Edge.dll”已退出,代码为 0 (0x0)**。
[18:06:57 INF] 现在正在监听:http://localhost:5000 [18:06:57 INF] 请求开始 HTTP/1.1 GET http://localhost:5000/ [18:06:57 INF] 应用程序已启动。按 Ctrl+C 关闭。 [18:06:57 INF] 托管环境:开发 [18:06:57 INF] 内容根路径:/development/logging-api/LoggingApi.Edge [18:06:57 INF] HTTP GET / 在 101.3370 毫秒内响应 404 [18:06:57 INF] 请求在 795.6172 毫秒内完成 404 [18:06:59 INF] 请求开始 HTTP/1.1 GET http://localhost:5000/ [18:06:59 INF] HTTP GET / 在 1.1243 毫秒内响应 404 [18: 06:59 INF] 请求在 3.2939000000000003ms 404 [18:07:31 INF] 请求开始 HTTP/1.1 GET http://localhost:5000/api/actionlogs/internal/5db0f148ba2a6056da8463e5 application/json [18:07:31 INF] 执行端点'LoggingApi.Edge.Controllers.ActionLogsController。 GetByIdAsync (LoggingApi.Edge)' [18:07:31 INF] 路由与 {action = "GetById", controller = "ActionLogs"} 匹配。在控制器 LoggingApi.Edge.Controllers.ActionLogsController (LoggingApi.Edge) 上执行带有签名 System.Threading.Tasks.Task`1[Microsoft.AspNetCore.Mvc.IActionResult] GetByIdAsync(System.String) 的控制器操作。 [18:07:32 INF] 执行 ObjectResult,写入“LoggingApi.Data.Models.ActionLog”类型的值。 [18:07:32 INF] 在 973.6433000000001ms [18:07:32 INF] 执行的操作 LoggingApi.Edge.Controllers.ActionLogsController.GetByIdAsync (LoggingApi.Edge) [18:07:32 INF] 执行端点'LoggingApi.Edge.Controllers.ActionLogsController.GetByIdAsync (LoggingApi. Edge)' [18:07:32 INF] HTTP GET /api/actionlogs/internal/5db0f148ba2a6056da8463e5 在 1067.5599 毫秒内响应 200 [18:07:32 INF] 请求在 1069.1802 毫秒内完成 200 应用程序/json;字符集=utf-8
【问题讨论】:
-
尝试使用
flushToDiskInterval: TimeSpan.FromSeconds(2)选项
标签: logging .net-core serilog serilog-exceptions