serilog: журналы только после остановки приложения

Надеюсь, у вас все хорошо, я впервые использую 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"
}};

Program.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 / ответил 404 за 101,3370 мс [18:06:57 INF] Запрос завершен через 795.6172 мс 404 [18:06:59 INF] Запрос запускает HTTP / 1.1 GET http://localhost:5000/ [18:06:59 INF] HTTP GET / ответил 404 в 1,1243 мс [18:06:59 INF] Запрос завершен через 3,2939000000000003 мс 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"}. Выполнение действия контроллера с сигнатурой System.Threading.Tasks.Task`1[Microsoft.AspNetCore.Mvc.IActionResult] GetByIdAsync(System.String) на контроллере LoggingApi.Edge.Controllers.ActionLogsController (LoggingApi.Edge). [18:07:32 INF] Выполнение ObjectResult, запись значения типа LoggingApi.Data.Models.ActionLog. [18:07:32 INF] Выполненное действие LoggingApi.Edge.Controllers.ActionLogsController.GetByIdAsync (LoggingApi.Edge) в течение 973.6433000000001 мс [18:07:32 INF] Выполненная конечная точка 'LoggingApi.Edge.Controllers. LogActionLogcControllerApi.Edge)' [18:07:32 INF] HTTP GET /api/actionlogs/internal/5db0f148ba2a6056da8463e5 ответил 200 за 1067,5599 мс [18:07:32 INF] Запрос завершился через 1069,1802 мс 200 application/json; charset=utf-8

1 ответ

Я не мог воспроизвести поведение, которое вы описываете... Возможно, в вашем проекте или среде есть что-то еще, что вызывает это. Журналы приемников консоли и файла записываются в консоль и файл, как и ожидалось.

Если вы можете собрать пример проекта на GitHub, который демонстрирует такое поведение, это поможет.

Другие вопросы по тегам