Вывод в несколько файлов с указанными именами файлов с помощью Serilog? - PullRequest
2 голосов
/ 18 апреля 2019

Моя компания хочет перейти с каркаса Miscrosoft Enterprise на Serilog.В настоящее время передо мной стоит задача изменить каркас ведения журналов на Serilog, чтобы он.

  1. Не изменял реализацию текущих вызовов с использованием нашего класса ведения журналов.

  2. Имитирует структуру, используемую в нашем старом файле App.config, так что все настройки одинаковы.

Я изменяю все, чтобы читать из .jsonфайл, но я столкнулся с проблемой.Мне нужно убедиться, что кто-то может зайти в файл appsettings.json и добавить новый файл для входа в систему.

IE

"Listeners": {
         "File 1": {
            "fileName": "C:\\logs\\Warning.txt",
            "rollInterval": "Day",
            "rollOnFileSizeLimit": true,
            "rollSize": 2000,
            "filter": "Information"
         },
         "File 2": {
            "fileName": "C:\\logs\\Info.txt",
            "rollInterval": "Day",
            "rollOnFileSizeLimit": true,
            "rollSize": 2000,
            "filter": "Error"
         }
}

Это моя текущая реализация регистратора serilog.В настоящее время я указываю путь на основе уровня серьезности и сохраняю его в «пути», но его необходимо изменить, чтобы я потенциально мог указать массив путей на основе категории.

         Serilog.Log.Logger = new LoggerConfiguration()
            .Enrich.WithMachineName()
            .Enrich.WithThreadId()
            .Enrich.WithProcessId()
            .MinimumLevel.Information()
            .WriteTo.Debug()
            .WriteTo.File(
            Settings.GetSetting(path, null),
            outputTemplate: Settings.GetSetting("Logging:Template", null))
            .CreateLogger();
         ILogger log = Serilog.Log.ForContext(Enricher.CategoryContext, Category.ToString());

Есликто-то добавляет файл к слушателям, тогда он должен иметь возможность выводить в него журнал.Это также включает вывод в базу данных.Проблема, с которой я сталкиваюсь, заключается в том, что я не вижу возможного способа сделать это в одной конфигурации Serilog.

Кроме того, я наткнулся на пакет NuGet с именем Serilog.Sinks.Map, который делает то, что я хочу, ноон находится в предварительной версии и не подходит для производственного кода моей компании.

...