在 Windows Forms 应用程序中查看 Serilog 日志
View Serilog logs in Windows Forms application
我有一个 C# Windows Forms 应用程序,它引用了一个使用 SeriLog 记录事件的 DLL(托管代码)。 SeriLog 记录器在 Windows Forms(主)应用程序中定义,因此我可以控制我使用的接收器类型。目前我只是登录到本地文本文件。
我的问题:当应用程序处于 运行 时,是否有一种优雅的方式让我实时查看列表框或类似 WinForms 控件中的日志?目前我能看到的唯一方法是每隔几秒读取一次日志文件并显示最新的项目。但我确信可能有更优雅的方法来捕获最后一两个记录的项目?
使用 FileSystemWatcher
监视文件更改,然后在 OnChanged
事件处理程序中更新该列表框
static void Main()
{
using var watcher = new FileSystemWatcher(@"C:\path\to\folder");
//choose what you wish
watcher.NotifyFilter = NotifyFilters.Attributes
| NotifyFilters.CreationTime
| NotifyFilters.DirectoryName
| NotifyFilters.FileName
| NotifyFilters.LastAccess
| NotifyFilters.LastWrite
| NotifyFilters.Security
| NotifyFilters.Size;
watcher.Changed += OnChanged;
watcher.Created += OnCreated;
watcher.Deleted += OnDeleted;
watcher.Renamed += OnRenamed;
watcher.Error += OnError;
watcher.Filter = "YourLogFile.txt";
watcher.IncludeSubdirectories = false;
watcher.EnableRaisingEvents = true;
Console.WriteLine("Press enter to exit.");
Console.ReadLine();
}
private static void OnChanged(object sender, FileSystemEventArgs e)
{
if (e.ChangeType != WatcherChangeTypes.Changed)
{
return;
}
//Console.WriteLine($"Changed: {e.FullPath}");
//Update your Listbox content
}
鉴于您可以控制日志记录管道并且可以选择将要使用的接收器,一种选择是使用 Serilog.Sinks.RichTextBox
接收器,它可以将日志写入 RichTextBox
控制颜色、格式等
接收器最初是为 WPF 应用程序构建的,但您可以在具有 ElementHost
的 Windows Forms 应用程序中轻松使用它。有一个 example in the repository that shows how to use it with Windows Forms.
免责声明:我是 Serilog.Sinks.RichTextBox
接收器的作者。
这里有您要找的确切答案:
然而在过去的 5 年里发生了一些事情!!!现在有一个库叫做:
https://github.com/serilog/serilog-sinks-reflectinsight
We've added a Serilog Sink for ReflectInsight live log viewer. This allows you to leverage your current investment in Serilog, but leverage the power and flexibility that comes with the ReflectInsight viewer. You can view your Serilog messages in real-time, in a rich viewer that allows you to filter out and search for what really matters to you.
我有一个 C# Windows Forms 应用程序,它引用了一个使用 SeriLog 记录事件的 DLL(托管代码)。 SeriLog 记录器在 Windows Forms(主)应用程序中定义,因此我可以控制我使用的接收器类型。目前我只是登录到本地文本文件。
我的问题:当应用程序处于 运行 时,是否有一种优雅的方式让我实时查看列表框或类似 WinForms 控件中的日志?目前我能看到的唯一方法是每隔几秒读取一次日志文件并显示最新的项目。但我确信可能有更优雅的方法来捕获最后一两个记录的项目?
使用 FileSystemWatcher
监视文件更改,然后在 OnChanged
事件处理程序中更新该列表框
static void Main()
{
using var watcher = new FileSystemWatcher(@"C:\path\to\folder");
//choose what you wish
watcher.NotifyFilter = NotifyFilters.Attributes
| NotifyFilters.CreationTime
| NotifyFilters.DirectoryName
| NotifyFilters.FileName
| NotifyFilters.LastAccess
| NotifyFilters.LastWrite
| NotifyFilters.Security
| NotifyFilters.Size;
watcher.Changed += OnChanged;
watcher.Created += OnCreated;
watcher.Deleted += OnDeleted;
watcher.Renamed += OnRenamed;
watcher.Error += OnError;
watcher.Filter = "YourLogFile.txt";
watcher.IncludeSubdirectories = false;
watcher.EnableRaisingEvents = true;
Console.WriteLine("Press enter to exit.");
Console.ReadLine();
}
private static void OnChanged(object sender, FileSystemEventArgs e)
{
if (e.ChangeType != WatcherChangeTypes.Changed)
{
return;
}
//Console.WriteLine($"Changed: {e.FullPath}");
//Update your Listbox content
}
鉴于您可以控制日志记录管道并且可以选择将要使用的接收器,一种选择是使用 Serilog.Sinks.RichTextBox
接收器,它可以将日志写入 RichTextBox
控制颜色、格式等
接收器最初是为 WPF 应用程序构建的,但您可以在具有 ElementHost
的 Windows Forms 应用程序中轻松使用它。有一个 example in the repository that shows how to use it with Windows Forms.
免责声明:我是 Serilog.Sinks.RichTextBox
接收器的作者。
这里有您要找的确切答案:
然而在过去的 5 年里发生了一些事情!!!现在有一个库叫做: https://github.com/serilog/serilog-sinks-reflectinsight
We've added a Serilog Sink for ReflectInsight live log viewer. This allows you to leverage your current investment in Serilog, but leverage the power and flexibility that comes with the ReflectInsight viewer. You can view your Serilog messages in real-time, in a rich viewer that allows you to filter out and search for what really matters to you.