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