使用 C# UWP 的 Serilog WriteTo.File

问题描述 投票:0回答:2

我正在用 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 登录文件?

c# uwp serilog
2个回答
4
投票

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 看到错误消息 - 您会发现它无法创建文件及其正在使用的路径。


1
投票

谢谢你的回答!

我以为会自动使用本地文件夹路径,所以没有尝试。 我只需要修改代码如下

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

然后它醒来并将调试消息写入日志文件:)

非常感谢!

© www.soinside.com 2019 - 2024. All rights reserved.