微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从NLog上载具有持久缓冲区的“防弹”日志

如何解决从NLog上载具有持久缓冲区的“防弹”日志

我正在考虑如何仅使用具有最少自定义代码的nlog来完成以下日志记录系统:

  • 日志的最终目标应该是Azure存储表。有一个 为此的目标。
  • 但是PC可能无法全部连接到互联网 时间。如果不是,则日志仍应保存在其他位置。 因此,即使在持续存在的地方也应该有临时缓冲区 当应用未运行时。
  • 应该有一个任务,可以上传 PC联机时丢失日志。

是否可以仅使用nlog配置而不使用自定义目标?可以在Azure端添加代码,这将解析上载的日志数据,并在需要时将其写入存储表。 我考虑过将MSMQ用作单个目标并运行任务,该任务将处理从队列上传的任务。但这迫使我在每台PC上都安装MSMQ。在应用中可以使用的其他任何队列存储可能存在吗?

此外:

不需要在PC上隐藏或加密日志文件上传成功后,应将其删除

解决方法

对于提供自动持久性的NLog,我还没有看到任何东西。但是,如果可以添加一个耐用性目标包装器,这将是一个非常不错的功能,它将输出本地保存到存储提供者(文件/ localdb / litedb / sqllite等)。并允许在网络联机时后台将数据写入实际目标。

只有RetryingWrapper与这个想法很接近,但是它无法处理应用程序的重启。

或者,然后需要写入具有内置脱机模式的目标,例如Nlog.RabbitMQ.TargetNLog.Mongo(MongoDb领域)。

另一种选择是以结构化格式(Json / Gelf / Log4jXml / Csv)写入简单文件。然后让后台服务在网络联机时上传内容。例如例如LogStash或FileBeat。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。