【发布时间】:2021-10-18 04:24:01
【问题描述】:
我有一个主 mvc 应用程序,它将调用 3 个 Web api 应用程序,并将使用 log.LogInformation() 为每个方法命中和 mvc 项目中的每个控制器写入日志。我创建了一个名为 username 的变量,并让每个日志都在消息末尾包含该用户名。 IE。 log.LogInformation("You have hit the home page of the mvc project... {@Username}, username)so 在我使用{@Username} 并传递username 的每条日志消息的末尾。我想根据该变量 username 对所有整个日志进行分组。有没有办法将记录到记录器的所有整个日志分组,从 mvc 项目到每个调用的 web api 项目?我正在使用Serilog 编写日志。
跟进:
因此,在阅读 Log scopes 并使用 BeginScope 之后,我可以在我的最后一个控制器中的 mvc 项目中创建另一个方法,如下所示:
public IActionResult GetAllLogs()
{
using (_logger.BeginScope("Gathering all the logs created for {@Username}", HomeController.username))
{
}
}
所以保留它可以从 mvc 项目中收集所有日志,包括 web api 项目日志?我不需要在using() 语句中做任何事情?
【问题讨论】:
-
您可以检查
Log scopes(Read here)。使用BeginScope,范围内的所有日志语句都将属性记录为自定义属性。 -
因此,使用 Log 范围,您无需将属性传递到第 n 个函数级别。由于属性被记录为自定义属性,因此您可以进行分组、过滤等。
-
谢谢!我正在阅读
Log scopes和BeginScope我不需要在using()语句中执行任何操作来收集所有日志,因为BeginScope将收集所有日志?请查看我编辑的帖子@user1672994 我也看到了这个docs.microsoft.com/en-us/dotnet/api/…,但它传递了一个属性......你是说我不需要?它怎么知道我想使用变量username? -
@MarrkCo - 我已经发布了答案,如果您需要任何详细信息,请查看并告诉我。
标签: c# asp.net-mvc logging asp.net-web-api serilog