2017-08-16 33 views
2

我在使用Serilog寫入json文件的.NET標準1.4類庫時遇到問題。它運行時沒有錯誤,但不會生成文件。它在從.NET框架桌面應用程序調用的.NET框架類庫中工作正常。當我使用帶有UWP類庫的UWP應用程序時,我遇到了同樣的問題。這裏是我的類庫中的代碼:使用來自UWP應用程序的.NET標準1.4類庫中的Serilog進行日誌記錄

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(); 
     } 
    } 

我真的很感謝一些幫助。非常感謝!

+2

UWP有其對文件系統的訪問限制,所以,你不應該把你的.NET Framework來UWP的經驗,https://docs.microsoft.com/en -us/windows/uwp/files/quickstart-reading-and-writing-files https://docs.microsoft.com/en-us/windows/uwp/files/file-access-permissions –

+0

謝謝@Lex Li!有效!!! –

回答

2

正如@Lex Li指出的,UWP應用程序沒有權限訪問設備上的所有文件。默認情況下,應用可以訪問某些文件系統位置,如應用程序安裝目錄或應用程序數據位置。欲瞭解更多信息,請參閱。

"C:\Test\log.json"是您的應用無法直接訪問的位置。在處理UWP中的文件或文件夾時,一個重要規則是Skip the path: stick to the StorageFile。但是,RollingFile方法需要一個路徑作爲參數。因此,您可以將日誌存儲到應用程序數據位置。而LocalCacheFolder可能是一個不錯的選擇。 Ref Using application folders

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"); 
+0

謝謝@Jay Zuo!有效!!! –

相關問題