问题描述
我正在考虑如何仅使用具有最少自定义代码的nlog来完成以下日志记录系统:
- 日志的最终目标应该是Azure存储表。有一个 为此的目标。
- 但是PC可能无法全部连接到互联网 时间。如果不是,则日志仍应保存在其他位置。 因此,即使在持续存在的地方也应该有临时缓冲区 当应用未运行时。
- 应该有一个任务,可以上传 PC联机时丢失日志。
是否可以仅使用nlog配置而不使用自定义目标?可以在Azure端添加代码,这将解析上载的日志数据,并在需要时将其写入存储表。 我考虑过将MSMQ用作单个目标并运行任务,该任务将处理从队列上传的任务。但这迫使我在每台PC上都安装MSMQ。在应用中可以使用的其他任何队列存储可能存在吗?
此外:
解决方法
对于提供自动持久性的NLog,我还没有看到任何东西。但是,如果可以添加一个耐用性目标包装器,这将是一个非常不错的功能,它将输出本地保存到存储提供者(文件/ localdb / litedb / sqllite等)。并允许在网络联机时后台将数据写入实际目标。
只有RetryingWrapper与这个想法很接近,但是它无法处理应用程序的重启。
或者,然后需要写入具有内置脱机模式的目标,例如Nlog.RabbitMQ.Target或NLog.Mongo(MongoDb领域)。
另一种选择是以结构化格式(Json / Gelf / Log4jXml / Csv)写入简单文件。然后让后台服务在网络联机时上传内容。例如例如LogStash或FileBeat。