.net 设计Azure云日志框架

.net 设计Azure云日志框架,.net,azure,logging,queue,cloud,.net,Azure,Logging,Queue,Cloud,我在为生活在azure云中的应用程序设计和实现弹性日志框架的标准实践方面遇到了困难。其思想是,应用程序不需要知道或处理自己的日志记录,信息\错误消息的日志记录可以“在后台”处理 我考虑的设计基本上是“基于队列的负载均衡模式”(Queue-Based Load leveling Pattern)(),通过将服务总线实体与自动转发链接在一起而得到增强 其思想是,每个应用程序在其资源组中都有自己的本地队列,并在其中丢弃日志消息。然后,此本地队列将日志消息转发到中心日志队列。当日志消息到达中心队列时,它

我在为生活在azure云中的应用程序设计和实现弹性日志框架的标准实践方面遇到了困难。其思想是,应用程序不需要知道或处理自己的日志记录,信息\错误消息的日志记录可以“在后台”处理

我考虑的设计基本上是“基于队列的负载均衡模式”(Queue-Based Load leveling Pattern)(),通过将服务总线实体与自动转发链接在一起而得到增强

其思想是,每个应用程序在其资源组中都有自己的本地队列,并在其中丢弃日志消息。然后,此本地队列将日志消息转发到中心日志队列。当日志消息到达中心队列时,它会触发工作服务(或类似服务)来适当地处理该消息(格式化并将其发送到适当的数据存储)

这种方法背后的思想是,如果中央消息队列关闭,日志消息将保留在应用程序的本地队列中,从而提供额外的弹性层。如果本地队列失败,应用程序可以作为备份\冗余登录到其他数据存储


因此,我只是想知道是否有任何缺点或原因导致上述方法不是一个好方法,或者是否有人可以推荐一种更好的方法来设计/实现Azure中的共享日志框架?

实现一个日志客户机(例如,将日志消息放入服务总线队列)会很容易。您将拥有一个具有自动毒药字母检测等功能的受良好保护的消息队列。当然,最大的问题是:您是否需要它,或者它是否能够满足存储队列等更简单的功能,甚至可以直接登录到存储

任何类型的日志记录都可以并且应该作为后台任务使用任务内部发布/订阅模式(例如,中的)

现有日志框架

还有一些日志框架已经实现了您所描述的大部分内容,其中一个更流行的框架名为,它使用appender的概念作为描述执行实际日志记录的引擎的方式。这真的可以是任何事情;存储、队列、数据库,只需很少的努力,您还可以编写自己的appender来满足您的需要

成本问题

通常情况下,这归结为成本高于弹性。弹性是一个风险计算的问题。您的系统崩溃的可能性有多大?在这种情况下,没有日志文件可查看的可能性有多大。最后,对于应用程序运行时周围发生的现有日志尚未处理的日志,您需要记录哪些内容?最后,没有这些信息你会付出什么代价? 这些问题的答案将为您提供一个数字,然后您可以将其转化为对适当日志框架的投资


我知道作为开发人员,我们总是寻求完美的解决方案,但这并不总是合乎逻辑的选择

很容易实现一个日志客户端,例如将日志消息放入服务总线队列。您将拥有一个具有自动毒药字母检测等功能的受良好保护的消息队列。当然,最大的问题是:您是否需要它,或者它是否能够满足存储队列等更简单的功能,甚至可以直接登录到存储

任何类型的日志记录都可以并且应该作为后台任务使用任务内部发布/订阅模式(例如,中的)

现有日志框架

还有一些日志框架已经实现了您所描述的大部分内容,其中一个更流行的框架名为,它使用appender的概念作为描述执行实际日志记录的引擎的方式。这真的可以是任何事情;存储、队列、数据库,只需很少的努力,您还可以编写自己的appender来满足您的需要

成本问题

通常情况下,这归结为成本高于弹性。弹性是一个风险计算的问题。您的系统崩溃的可能性有多大?在这种情况下,没有日志文件可查看的可能性有多大。最后,对于应用程序运行时周围发生的现有日志尚未处理的日志,您需要记录哪些内容?最后,没有这些信息你会付出什么代价? 这些问题的答案将为您提供一个数字,然后您可以将其转化为对适当日志框架的投资


我知道作为开发人员,我们总是寻求完美的解决方案,但这并不总是合乎逻辑的选择

嗨,佩德罗,谢谢你的快速回复。我正在考虑在监视中心队列的工作进程中使用Log4Net或Serilog之类的东西,将实际格式化的异常/消息发送到最终的数据存储(例如数据库)。这样,只有一个服务需要知道日志记录的详细信息,并包含所有与日志记录相关的代码(因此所有特定于日志的代码都在一个系统中)。然后,所有其他应用只需担心向本地资源队列发送消息。我认为这将是一个很好的方式来区分事实。我也做过类似的事情,我使用IEventAggregator(不再维护)作为内存中的发布/订阅。订阅者只会将日志消息发布到队列中,在我的例子中是Azure Storage QueueHi Pedro,感谢您的快速回复。我正在考虑在监视中心队列的工作进程中使用Log4Net或Serilog之类的东西,将实际格式化的异常/消息发送到最终的数据存储(例如数据库)。这样,只有一个服务需要知道日志记录的详细信息,并包含所有与日志记录相关的代码(因此所有特定于日志的代码都在一个系统中)。所有其他应用程序只需担心向用户发送消息