项目

微服务解决方案:日志记录

您必须拥有ABP商业版或更高许可才能创建微服务解决方案。

ABP Studio的微服务解决方案模板已为日志记录进行了完整配置。所有服务、应用程序和网关均配置为使用Serilog库进行结构化日志记录,并采用统一的日志配置方式。本文档将说明这种通用的日志结构。

Serilog接收器

Serilog库配置为并行将日志写入以下目标(即接收器):

  • 控制台:日志写入执行应用程序的标准输出。当应用程序在容器中运行时,控制台日志便于实时查看。
  • 文件:日志写入执行应用程序Logs文件夹下的logs.txt文件。文件日志适用于本地计算机运行时的日志检查,便于故障排查。此接收器仅配置在DEBUG模式下生效,生产环境中将不可用(可在Program.cs文件中修改此行为)。
  • Elasticsearch:日志发送至Elasticsearch服务器。Elasticsearch特别适用于日志搜索与追踪。该微服务解决方案还包含Kibana容器配置,便于可视化查询日志。Elasticsearch配置请参见appsettings.json文件。
  • ABP Studio:这是由ABP Studio提供的接收器。它会将所有日志发送至ABP Studio,您可以在ABP Studio应用程序监控面板中轻松实时监控日志。

该解决方案兼容Serilog支持的任何接收器。您可以为解决方案添加更多接收器、移除预装接收器或微调其配置。

Program.cs文件

Program.cs文件是配置日志系统的主要入口点。在此处配置是因为我们需要在应用程序启动的最初阶段初始化和启用日志记录。

补充说明

通过查看Program.cs文件可以轻松理解Serilog配置,但有几点值得特别说明:

  • 我们为每条日志记录添加了Application属性,以便按应用程序名称筛选日志。这是在Program.cs文件中通过.Enrich.WithProperty("Application", applicationName)代码行实现的。applicationName值取自ABP的IApplicationInfoAccessor服务,默认为应用程序入口程序集(包含Program.cs文件的程序集)的名称。
  • 我们在应用程序的模块类中使用了ABP Serilog增强器。这通过在模块类的OnApplicationInitialization方法中调用app.UseAbpSerilogEnrichers();实现。该ASP.NET Core中间件会将当前租户用户、客户端和关联ID信息添加到日志记录中。

在本文档中