2017-08-16 56 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!有效!!! –

相关问题