Serilog не записывает в файл с .NET Core 2.2 - PullRequest
0 голосов
/ 04 марта 2019

PS Код ниже работает отлично.Проблема была между монитором и креслом.Ответ от @jpgrassi послал меня в правильном направлении, чтобы решить его.

У меня есть следующие в program.cs:

public class Program {
    public static void Main(string[] args) {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseSerilog((ctx, config) => { config.ReadFrom.Configuration(ctx.Configuration); })
            .UseStartup<Startup>();

}

И в appsettings.json:

{
  "Serilog": {

    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Default": "Information",
        "Microsoft": "Information",
        "System": "Information"
      }
    },

    "WriteTo": [
      {
        "Name": "RollingFile",
        "Args": {
          "pathFormat": "log-{Date}.txt",
        }
      }
    ]
  },

  "AllowedHosts": "*"
}

В контроллере выписываю лог _logger.LogWarning("foo");, но файл нигде не записывается, я не вижу никаких ошибок.

Я импортировал следующие пакеты из Nuget: Serilog, Serilog.AspNetCore, Serilog.Settings.Configuration, Serilog.Sinks.RollingFile.

Чего мне не хватает?

1 Ответ

0 голосов
/ 04 марта 2019

Я опубликовал исходный ответ, предполагая, что проблема заключалась в отсутствии свойства Using в конфигурации Serilog.У меня всегда было это в моих проектах, и это было единственное, чего не хватало в настройках OP.Но после публикации ответа я попробовал другие варианты конфигурации, в том числе те же, что и в вопросе, и журналы все еще создавались.Читая больше, я обнаружил, что свойство Using не является обязательным.Из пакета serilog-settings-configuration:

(Этот пакет реализует соглашение, использующее DependencyContext для поиска любого пакета с Serilog в любом месте имени и извлекает из него методы конфигурации, поэтому Using приведенный выше пример является избыточным.) Источник: https://github.com/serilog/serilog-settings-configuration

Как выяснилось (см. комментарии к вопросу), реальная проблема заключалась в расположении файла журнала и разрешениях на запись.В коде все уже работало.

Я оставлю здесь первоначальный ответ, как исторический вопрос, но его содержание на самом деле ничего не исправляет, так как в первую очередь ничего не сломалось.


Оригинальный ответ:

Я считаю, что проблема в том, что вы не указали в appsettings фактическое использование приемника RollingFile.Я только что быстро создал новое приложение, и оно работает:

  "Serilog": {
    "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.RollingFile" ],
    "MinimumLevel": "Debug",
    "WriteTo": [
      { "Name": "Console" },
      {
        "Name": "RollingFile",
        "Args": { "pathFormat": "log-{Date}.txt" }
      }
    ],
    "Properties": {
      "Application": "Sample"
    }
  }

Используя следующие пакеты NuGet:

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Serilog.AspNetCore" Version="2.1.1" />
    <PackageReference Include="Serilog.Settings.Configuration" Version="3.0.1" />
    <PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
    <PackageReference Include="Serilog.Sinks.RollingFile" Version="3.3.0" />
  </ItemGroup>

Это ведет к файлу в корневом каталоге приложения log-20190304.txt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...