Serilog WriteTo.File с C# UWP - PullRequest
       24

Serilog WriteTo.File с C# UWP

0 голосов
/ 16 апреля 2020

Я пишу приложение uwp с C#, и я хотел бы использовать serilog для записи лог-файлов. Когда я делаю это в приложении. NET Core Console, оно создает файл с требуемым содержимым.

В программе uwp я могу отображать сообщения журнала на GUI, но файл журнала не создается ( да, у меня есть broadFileSystemAccess).

Мой код:

Log.Logger = new LoggerConfiguration().WriteTo.File("log.txt").CreateLogger();
Log.Debug("TEST");
Log.CloseAndFlush();

Я ожидаю, что он создаст файл log.txt в каталоге, который можно получить с помощью Windows.Storage.ApplicationData.Current.LocalFolder, например

storageFolder.CreateFileAsync("test.txt", CreationCollisionOption.ReplaceExisting);

делает.

Может кто-нибудь сказать мне, что я должен изменить или рассмотреть, чтобы войти в файл с serilog в моем приложении uwp?

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Одной из замечательных особенностей Serilog является то, что он с открытым исходным кодом и вы можете посмотреть на его исходный код и посмотреть, что он делает / как он работает.

Если вы посмотрите исходный код File приемника , вы заметите, что он просто открывает файл с помощью System.IO.File.Open в той же папке, где запущено ваше приложение, что, вероятно, происходит из Visual Studio. что-то вроде C:\Users\augustoproiete\MyApp\MyUwpApp\bin\x64\Debug\AppX\, когда у вас нет доступа к файлу записи.

Это означает, что вы должны четко указать, где хранить файл, например, в папке данных приложения вашего приложения. Например:

var logFilePath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "log.txt");

Log.Logger = new LoggerConfiguration().WriteTo.File(logFilePath).CreateLogger();
Log.Debug("TEST");
Log.CloseAndFlush();

Я бы порекомендовал вам прочитать страницу Отладка и диагностика в документации Serilog, так как она объясняет, как вы видите сообщения об ошибках от Serilog - что вам и нужно видел, что не удалось создать файл и путь, который он использовал.

0 голосов
/ 17 апреля 2020

Спасибо за ваш ответ!

Я думал, что путь к локальной папке используется автоматически, поэтому я не пробовал. Мне просто пришлось изменить код следующим образом

var logFilePath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "log.txt");

Log.Logger = new LoggerConfiguration()
                 .MinimumLevel.Verbose()     //otherwise Debug is not logged
                 .WriteTo.File(logFilePath)
                 .CreateLogger();
Log.Debug("TEST");
Log.CloseAndFlush();

, затем он проснулся и записал сообщение отладки в файл журнала:)

Большое спасибо!

...