日志
编辑日志编辑
Elastic Java APM 代理提供以下日志功能
- 日志关联 : 自动注入关联 ID,允许在日志、跟踪和服务之间导航。
- 日志重新格式化(实验性) : 自动将纯文本日志重新格式化为 ECS 日志 格式。
-
错误捕获 : 自动捕获类似
logger.error("message", exception)
的调用的异常。 - 日志发送(实验性) : 自动将日志发送到 APM 服务器,无需 filebeat
这些功能是 应用程序日志摄取策略 的一部分。
该 ecs-logging-java
库也可以用于使用 ECS 日志 格式,无需 APM 代理。当与 Java APM 代理一起部署时,代理将提供 日志关联 ID。
日志关联编辑
日志关联 允许您导航到属于特定跟踪的所有日志,反之亦然:对于特定日志,请查看它是在什么上下文中记录的以及用户提供了哪些参数。
从 APM 代理版本 1.30.0 开始,日志关联默认启用。在以前的版本中,必须通过将 enable_log_correlation
配置变量设置为 true
来显式启用日志关联。
为了将应用程序中的日志与 Elastic APM Java 代理捕获的跟踪和错误关联起来,代理将以下 ID 注入到 slf4j-MDC- 等效于 支持的日志框架
对于没有提供像 java.util.logging
(JUL) 这样的 MDC 的框架,只有在使用 ECS 日志库或使用 日志重新格式化 时才支持关联。
对于纯文本日志,需要修改日志配置的模式布局,以便将 MDC 值写入日志文件。如果您使用的是 Logback 或 log4j,请将 %X
添加到格式中以记录所有 MDC 值,或将 %X{trace.id}
添加到格式中以仅记录跟踪 ID。
当应用程序以 ECS 格式记录日志(通过使用 ecs-logging-java
或 日志重新格式化)但没有提供服务字段时,代理将自动从其自身配置中提供回退值以提供服务级关联
-
service.name
值由代理配置中的service_name
提供。 -
service.version
值由代理配置中的service_version
提供。 -
service.environment
值由代理配置中的environment
提供。
日志重新格式化(实验性)编辑
代理可以自动将应用程序日志重新格式化为 ECS 格式,无需添加对 ecs-logging-java
的依赖关系,修改应用程序日志配置,并使应用程序始终使用 ECS 日志格式。简而言之,它在运行时提供 ECS 日志的优势,而无需对应用程序进行任何更改。
日志重新格式化由 log_ecs_reformatting
配置选项控制,默认情况下禁用。
重新格式化的日志将包含 跟踪和服务关联 ID。
错误捕获编辑
代理自动捕获发送到记录器的异常,这些异常通过类似 logger.error("message", exception)
的调用发送。
这样做时,error.id
也将添加到 MDC 中,用于从 1.16.0 开始的 日志关联。
因此,当向记录器报告异常时
- 代理使用提供的异常向 APM 服务器报告错误
- 生成一个
error.id
并将其注入到记录器调用期间的记录器 MDC 中 - 如果日志格式允许,记录器输出将包含
error.id
(纯文本仍然需要一些配置)
日志发送(实验性)编辑
代理可以自动捕获日志并直接发送到 APM 服务器,这允许摄取日志事件,而无需依赖 filebeat。日志发送由 log_sending
配置选项控制,默认情况下禁用。