Ведение журнала с использованием Serilog из стандартной библиотеки классов .NET 1.4 из приложения UWP

У меня проблемы со стандартной библиотекой классов .NET 1.4, которая использует Serilog для записи в файл json. Он работает без ошибок, но не создает файл.

Он отлично работает в библиотеке классов .NET framework, которая вызывается из настольного приложения .NET framework. У меня такая же проблема, когда я использую приложение UWP с библиотекой классов UWP. Вот код в моей библиотеке классов:

    public class OligoLog
    {
        public void Test()
        {
            Log.Logger = new LoggerConfiguration()
                .WriteTo.RollingFile(new CompactJsonFormatter(), @"C:\Test\log.json")
                .CreateLogger();

            Log.Information("This is a test");

            Log.CloseAndFlush();
        }
    }

Предложения?


person Vivek Verma    schedule 16.08.2017    source источник
comment
UWP имеет ограничение на доступ к файловой системе, поэтому вам не следует переносить свой опыт работы с .NET Framework в UWP, docs.microsoft.com/en-us/windows/uwp/files/ docs.microsoft.com/en-us/windows/uwp/files/   -  person Lex Li    schedule 17.08.2017
comment
Спасибо, @Lex Li! Это сработало!!!   -  person Vivek Verma    schedule 17.08.2017


Ответы (1)


Как отметил @Lex Li, приложениям UWP не разрешен доступ ко всем файлам на устройстве. По умолчанию приложения могут получать доступ к определенным расположениям файловой системы, таким как каталог установки приложения или расположения данных приложения. Для получения дополнительной информации см. Разрешения на доступ к файлам.

"C:\Test\log.json" - это место, к которому у вашего приложения нет прямого доступа. При работе с файлами или папками в UWP одно важное правило: Пропустить путь: придерживаться StorageFile. Однако методу RollingFile в качестве параметра требуется путь. Таким образом, вы можете хранить свои журналы в хранилищах данных приложений. И LocalCacheFolder может быть хорошим выбором. Ссылка Использование папок приложений :

LocalCacheFolder находится под контролем этого приложения и сохраняется во всех сеансах приложения. LocalCacheFolder следует использовать для необходимого сгенерированного содержимого между сеансами приложения, такими как кэшированные файлы, журналы или токены аутентификации.

Например:

Log.Logger = new LoggerConfiguration()
     .WriteTo.RollingFile(new CompactJsonFormatter(), Windows.Storage.ApplicationData.Current.LocalCacheFolder.Path + @"\log-{Date}.json")
    .CreateLogger();

Log.Information("This is a test");
person Jay Zuo    schedule 17.08.2017