我正在用 C# 编写一个 uwp 应用程序,我想使用 serilog 来写入日志文件。 当我在 .NET Core 控制台应用程序中执行此操作时,它会创建包含所需内容的文件。
在 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);
是的。
问题: 我需要更改什么才能在我的 uwp 应用程序中使用 verilog 登录文件?
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 看到错误消息 - 您会发现它无法创建文件及其正在使用的路径。
谢谢你的回答!
我以为会自动使用本地文件夹路径,所以没有尝试。 我只需要修改代码如下
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();
然后它醒来并将调试消息写入日志文件:)
非常感谢!