【问题标题】:Combining NLog with SQLite and WPF control将 NLog 与 SQLite 和 WPF 控件相结合
【发布时间】:2018-01-12 08:05:41
【问题描述】:

我在我的 C# WPF 应用程序中使用 NLog 和 SQLite,并且 NLog 配置设置为 SQLite 数据库作为目标。并且登录到 SQLite 数据库工作正常。

现在我想在ListView(或类似的)中显示(部分)日志消息,即将日志消息放在控件可以绑定到的ObservableCollection 中。我想在记录时显示消息,但也有可能过滤时间戳、日志级别、日志消息中的关键字等消息。这样做的好方法是什么?

我考虑编写一个自定义 NLog 目标,将条目放入 ObservableCollection。但这可能会使添加过滤器功能变得困难。另一种可能性可能是以某种方式监视 SQLite 数据库中的更改,读回更改并更新 ObservableCollection

【问题讨论】:

  • 有一个目标“Memory”可以在这里使用。
  • 另一个候选对象可能是消息队列目标:github.com/nlog/nlog/wiki/MSMQ-target
  • 对于windows窗体,也有control和richtextbox的target,但是这里显然不适用(因为你在wpf上)。
  • 尝试设置一个电锯目标并实现 tcp 监听器。
  • 如果投反对票,请发表评论,以便我改进问题。

标签: c# wpf sqlite nlog


【解决方案1】:

如果您希望在程序运行之间保留日志,那么我会说继续将它们保存到 SQLite,就像您目前所做的那样,并编写一个表单,使用您想要的任何条件查询该数据库。我使用 NHibernate 做了类似的事情来处理数据库 IO。

如果只是在程序运行期间需要日志,那么要么执行与上述相同的操作,但使用内存中的 SQLite 数据库,或者使用 NLog 的内存目标并使用 LINQ 查询该数组列表

【讨论】:

  • 不,程序运行之间没有必要,因为我可以阅读例如应用程序启动时的 200 个最新日志条目或其他内容。 Memory NLog 目标看起来很有趣。内存中的 SQLite 数据库是文件数据库的附加数据库(即 NLog 配置中的两个数据库目标),还是文件数据库的镜像部分?
  • 然后您可以写入内存中的 SQLite 数据库(以便更快地查询),然后写入磁盘上的数据库以供以后使用。在内存中,SQLite 数据库对于此类事情非常方便,如果您使用 NHibernate,那么如果您确实想要切换和读取“真实”数据库,只需更改连接
  • 我正在使用 Dapper,但我认为交换连接应该同样简单。谢谢你的想法。我会将问题设置为已回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
  • 1970-01-01
  • 2015-12-21
  • 2021-08-02
  • 2020-05-23
  • 1970-01-01
相关资源
最近更新 更多