Serilog не пишет в файл (.net core 2.2) - PullRequest
0 голосов
/ 15 февраля 2019

Я пишу веб-сервис, который использует Serilog.У меня были проблемы с получением файлов для записи (но запись в консоль работала).Я заметил, что настройки изменились, когда вышло .net core 2.0 на основе этого и этого объяснения страниц.

Однако теперь я не вижу любое ведение журнала (возможно, в прошлом, по умолчанию я видел M $ logger).

Вот как настроен program.cs:

public class Program
    {
        public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", optional: true, reloadOnChange: true)
            .AddEnvironmentVariables()
            .AddUserSecrets<Startup>()
            .Build();

        public static int Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration()
                .ReadFrom.Configuration(Configuration.GetSection("Serilog"))
                .CreateLogger();

            try
            {
                Log.Information("Starting webhost...");
                BuildWebHost(args).Run();
                return 0;
            }
            catch (Exception ex)
            {
                Log.Fatal(ex, "Host terminated unexpectedly");
                return 1;
            }
            finally
            {
                Log.CloseAndFlush();
            }
        }

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                   .UseStartup<Startup>()
                   .UseConfiguration(Configuration)
                   .UseSerilog()
                   .Build();
    }

Мой appsettings.json имеет этот раздел в корне:

"Serilog": {
    "Using" : ["Serilog.Sinks.Console", "Serilog.Sinks.File"], 
    "MinimumLevel": {
      "Default": "Debug",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      },
      "Enrich" :  ["FromLogContext"],
      "WriteTo":  [
        {"Name": "Console" },
        {"Name": "Debug" },
        {"Name": "File", "Args":  {"path": "%LogDir%\\sampleapp\\log-{Date}.txt", "rollingInterval":  "Day", "shared": true }  }
      ] 
    },
    "Properties": {
      "Application": "sampleapp"
    }
  },

Обратите внимание, что %LogDir%переменная окружения на моей машине и прекрасно разрешается в других приложениях.Путь уже создан, и папка «Журналы» имеет полные разрешения RW для учетных данных, которые использует это приложение.

Я называю ведение журнала следующим образом ...

    private readonly ILogger<PartnerController> _logger;
    private readonly IPartnerDao _partnerDao;

    public PartnerController(ILogger<PartnerController> logger, IPartnerDao partnerDao)
    {
        _logger = logger;
        _partnerDao = partnerDao;
    }

    [HttpGet]
    [Route("{titleCode}")]
    public async Task<IActionResult> Get(string titleCode)
    {
        _logger.LogInformation("Test logging");
    }

Тем не менее, как-то ничего не отображается вASP.NET Core Web Server При запуске службы на моем компьютере создается окно, а не файл.

Я что-то упускаю из виду?

1 Ответ

0 голосов
/ 15 февраля 2019

Оказывается, я неправильно скопировал часть JSON из документации.Трудно сказать, но в исходном вопросе у меня фактически были разделы Enrich, WriteTo и Properties, встроенные в раздел MinimumLevel.

Очевидно, что это мешало Серилогу правильно знать, в какую раковину писать.

Вот мои исправленные настройки JSON:

"Serilog": {
    "Using": ["Serilog.Sinks.Console", "Serilog.Sinks.File"],
    "MinimumLevel": {
      "Default": "Debug",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "Enrich": ["FromLogContext"],
    "WriteTo": [
      { "Name": "Console" },
      { "Name": "Debug" },
      {
        "Name": "File",
        "Args": {
          "path": "%LogDir%\\sampleapp\\log-.txt",
          "rollingInterval": "Day",
          "shared": true
        }
      }
    ],
    "Properties": {
      "Application":  "sampleapp" 
    } 
  },

Обратите внимание, что я также удалил {Date} из имени файла.По-видимому, это будет добавлено, если вы установите интервал прокрутки в день ....

...