如何在c#中对所有日志进行分组
How to group all the logs in c#
我有一个主要的 mvc 应用程序,它将调用 3 个 Web api 应用程序,并将使用 log.LogInformation()
为 mvc 项目中的每个方法命中和每个控制器写入日志。我创建了一个名为 username
的变量,并让每个日志在消息末尾包含该用户名。 IE。 log.LogInformation("You have hit the home page of the mvc project... {@Username}, username)
所以在每条日志消息的末尾我都使用 {@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))
{
}
}
所以保留它就可以从包含 Web api 项目日志的 mvc 项目中收集所有日志?我不需要在 using()
语句中做任何事情?
您可以检查日志范围 (Read here)。使用 BeginScope,范围内的所有日志语句都将 属性 记录为自定义 属性.
例如:Scope
开始于 SomeAPI
API,它调用 Method1 -> Method2 -> Method3DoesTheLogging。现在直到方法 Method3DoesTheLogging
,不需要传递 属性 来记录日志语句。日志框架将自动附加在 BeginScope.
中定义的自定义 属性
public IActionResult SomeAPI()
{
using (_logger.BeginScope("Gathering all the logs created for {@Username}", HomeController.username))
{
Method1();
}
}
public void Method1()
{
Method2();
}
public void Method2()
{
Method3DoesTheLogging();
}
public void Method3DoesTheLogging()
{
_logger.LogInformation("This log statement will log the username automatically as custom property".);
}
因此使用 Log 范围,您不需要将 属性 传递到第 n 个函数级别。因为,属性 被记录为自定义 属性,所以您可以进行分组、过滤 e.t.c、
我有一个主要的 mvc 应用程序,它将调用 3 个 Web api 应用程序,并将使用 log.LogInformation()
为 mvc 项目中的每个方法命中和每个控制器写入日志。我创建了一个名为 username
的变量,并让每个日志在消息末尾包含该用户名。 IE。 log.LogInformation("You have hit the home page of the mvc project... {@Username}, username)
所以在每条日志消息的末尾我都使用 {@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))
{
}
}
所以保留它就可以从包含 Web api 项目日志的 mvc 项目中收集所有日志?我不需要在 using()
语句中做任何事情?
您可以检查日志范围 (Read here)。使用 BeginScope,范围内的所有日志语句都将 属性 记录为自定义 属性.
例如:Scope
开始于 SomeAPI
API,它调用 Method1 -> Method2 -> Method3DoesTheLogging。现在直到方法 Method3DoesTheLogging
,不需要传递 属性 来记录日志语句。日志框架将自动附加在 BeginScope.
public IActionResult SomeAPI()
{
using (_logger.BeginScope("Gathering all the logs created for {@Username}", HomeController.username))
{
Method1();
}
}
public void Method1()
{
Method2();
}
public void Method2()
{
Method3DoesTheLogging();
}
public void Method3DoesTheLogging()
{
_logger.LogInformation("This log statement will log the username automatically as custom property".);
}
因此使用 Log 范围,您不需要将 属性 传递到第 n 个函数级别。因为,属性 被记录为自定义 属性,所以您可以进行分组、过滤 e.t.c、