【发布时间】:2019-07-24 23:52:11
【问题描述】:
我正在尝试在我的 UWP 应用中显示 Serilog“logs.txt”文件的内容。我已成功显示它,但现在我希望它在创建新日志事件时自动刷新。
到目前为止,我尝试制作一个 ContentsChanged 事件侦听器来订阅本地文件驱动器中 .txt 文件的更改。
private async void CreateFileUpdater()
{
List<string> fileTypeFilter = new List<string>();
fileTypeFilter.Add(".txt");
var options = new Windows.Storage.Search.QueryOptions(Windows.Storage.Search.CommonFileQuery.OrderByName, fileTypeFilter);
var query = ApplicationData.Current.LocalFolder.CreateFileQueryWithOptions(options);
//subscribe on query's ContentsChanged event
query.ContentsChanged += Query_ContentsChanged;
var files = await query.GetFilesAsync();
}
private void Query_ContentsChanged(Windows.Storage.Search.IStorageQueryResultBase sender, object args)
{
ReadFileAsync(); //This updates the bound variable to display in UI
}
但是,当新的日志事件添加到日志文件时,它似乎没有正确触发。所以我想知道 Serilog 本身是否有一个我在文档中没有看到的事件,或者是否有更好的方法来检测文件中的更改或何时将内容添加到文件中。我只想调用某种事件,以便我可以触发我的 ReadFilesAsync() 函数来更新绑定到我的 UI 的变量。
感谢您的帮助!
【问题讨论】:
-
根据我的测试,ContentsChanged 事件确实对我有用。当我在本地文件夹中创建“.txt”文件时,将触发此事件。如果我在这个 txt 文件中写一些东西,这个事件也会被触发。您是否检查过此日志文件中是否添加了新的日志事件?
-
您是否使用我的代码进行了测试,还是我的代码有问题?我试图在事件上设置一个断点并查看它何时触发,并且它似乎与我的日志写入文件的时间不一致。但是,日志事件正在传递到文件中。也许我会进一步调查。
-
@XavierXie-MSFT 刚刚再次测试了我的,它在程序启动时触发了几次,但在发生日志事件后不会触发。
-
请尝试在本地文件夹中手动创建一个txt文件并在其中写入一些内容以查看是否会触发此事件。
-
@XavierXie-MSFT 好的,它会在我创建它以及编辑和保存内容时触发。我不确定为什么当日志向文件中添加内容时它不会触发。