我在使用Serilog写入json文件的.NET标准1.4类库时遇到问题。它运行没有错误但不生成文件。它在从.NET框架桌面应用程序调用的.NET框架类库中工作正常。当我使用带有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();
}
}
我真的很感激一些帮助。非常感谢!
答案 0 :(得分:3)
由于@Lex Li指出UWP应用程序无权访问设备上的所有文件。默认情况下,应用程序可以访问某些文件系统位置,例如应用程序安装目录或应用程序数有关详细信息,请参阅File access permissions。
"C:\Test\log.json"
是您应用无法直接访问的位置。在处理UWP中的文件或文件夹时,一个重要规则是Skip the path: stick to the StorageFile。但是,RollingFile
方法需要路径作为参数。因此,您可以将日志存储到应用程序数据位置。 LocalCacheFolder可能是个不错的选择。参考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");