【问题标题】:Is Asp.Net Custom Logging Still Behind a Queue?Asp.Net 自定义日志是否仍在队列后面?
【发布时间】:2020-05-08 19:32:19
【问题描述】:

我一直在阅读有关将您自己的自定义记录器添加到 ASP.NET Core 3 的内容。

在阅读有关 Microsoft 的日志系统的信息时,我了解到那里有一个队列可以让日志调用快速返回。 (它基本上将调用记录在队列中(并返回给调用者),然后队列将要持久化的消息传递出去。)

我的问题是,如果我添加自定义 ILoggerProvider 和自定义 ILogger,当我调用 logger.LogDebug() 时,该队列是否仍然存在?

或者在我制作自定义记录器之后,我需要自己实现吗?

【问题讨论】:

    标签: c# asp.net-core logging asp.net-core-3.1


    【解决方案1】:

    我的问题是,如果我添加了自定义 ILoggerProvider 和自定义 ILogger,当我调用 logger.LogDebug() 时,该队列是否仍然存在?

    或者在我制作自定义记录器之后,我需要自己实现吗?

    如果我们想实现自定义记录器并将日志写入某些数据存储,例如 SQL Db 等,如果我们直接将每个日志消息写入数据存储可能会导致性能问题。如您所述,为了提高性能,在某些日志记录系统中,它最初会将日志写入快速存储,然后运行后台任务来执行将日志消息从快速存储写入目标数据存储的异步工作。

    this doc的“无异步记录器方法”中提到的示例场景:

    例如,当记录到 SQL Server 时,不要直接在 Log 方法中这样做,因为 Log 方法是同步的。相反,将日志消息同步添加到内存队列并让后台工作人员将消息从队列中拉出,以执行将数据推送到 SQL Server 的异步工作。

    通过实现interface ILogger来创建类似的自定义logger,我们可以根据实际需要,集成并使用消息队列作为快速存储,以Log方法中的自定义代码逻辑初始写入日志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-13
      • 1970-01-01
      • 2020-06-15
      • 2016-08-18
      相关资源
      最近更新 更多