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

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

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

  • 日志的最终目的地应该是 Azure 存储表。有一个 准备好目标。
  • 但PC可能无法全部连接到互联网 时间。如果不是 - 日志仍应保存在其他地方。 所以应该在某个地方有临时缓冲区,甚至会持续存在 当应用程序未运行时。
  • 应该有一个任务,上传 PC 在线时丢失日志。

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

另外:

不需要在 PC 上隐藏或加密日志文件。上传成功后,它们应该被删除。

nlog azure-table-storage
1个回答
1
投票

我还没有看到 NLog 提供自动持久性的任何东西。但是,如果可以添加持久性目标包装器,将输出保存到本地存储提供程序(文件/localdb/litedb/sqllite 等),那将是一个非常好的功能。并允许在网络在线时后台写入实际目标。

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

替代方案则需要写入具有内置离线模式的目标,如 Nlog.RabbitMQ.TargetNLog.Mongo(MongoDb 领域)。

还有一种选择是以结构化格式(Json / Gelf / Log4jXml / Csv)写入一个简单文件。然后有一个后台服务在网络在线时上传内容。前任。像 LogStash 或 FileBeat。

K8 集群节点应用程序使用控制台输出(例如 Json 格式),然后集群主机应用程序捕获此输出。 cluster-host-application 然后可以将输出重定向到稳定存储。这允许集群主机应用程序关闭 K8 集群节点而不用担心丢失输出,因为它已经被捕获。

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