Log4j 2.7 log correlation calls ThreadContext.removeAll, which was introduced in 2.8
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 55/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- java
- Lĩnh vực
- observability
Hướng nghiên cứu
Start with Log4j2_7PlusLogCorrelationHelper.removeFromMdc in the apm-log4j2-plugin, which calls ThreadContext.removeAll, and with the version check in Log4j2LogCorrelationInstrumentation that selects log4j-core 2.7 and above. Decide whether to replace the call with per-key ThreadContext.remove for 2.7 or gate the instrumentation, then check that the reproduction no longer throws NoSuchMethodError. Done means a regression test passes for both 2.7 and 2.8+, including cleanup after logging and thread reuse.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Describe the bug
Elastic APM Java agent 1.57.0 emits repeated NoSuchMethodError messages when log correlation is used with Log4j 2.7:
ERROR co.elastic.apm.agent.bci.IndyBootstrap - Advice threw an exception, this should never happen!
java.lang.NoSuchMethodError: org.apache.logging.log4j.ThreadContext.removeAll(Ljava/lang/Iterable;)V
at co.elastic.apm.agent.log4j2.correlation.Log4j2_7PlusLogCorrelationHelper.removeFromMdc(Log4j2_7PlusLogCorrelationHelper.java:47)
at co.elastic.apm.agent.loginstr.correlation.AbstractLogCorrelationHelper.afterLoggingEvent(AbstractLogCorrelationHelper.java:54)
The application continues running, but ordinary logging during traced requests repeatedly triggers the error. This is not limited to startup.
Relevant versions: Java 8; log4j-api and log4j-core both 2.7; Elastic APM Java agent 1.57.0.
Steps to reproduce
Suggested minimal reproduction, derived from the observed error and source analysis (not yet independently executed as a standalone test):
- Use matching
org.apache.logging.log4j:log4j-api:2.7andorg.apache.logging.log4j:log4j-core:2.7dependencies. - Start with agent 1.57.0, leaving
log-correlationinstrumentation enabled. - Emit an enabled log event while an APM transaction is active, for example:
Transaction transaction = ElasticApm.startTransaction();
try (Scope scope = transaction.activate()) {
LogManager.getLogger("example").info("correlation test");
} finally {
transaction.end();
}
Here ElasticApm, Transaction, and Scope are from co.elastic.apm.api, and LogManager is from org.apache.logging.log4j.
Expected behavior
Log correlation should avoid invoking an API absent from the selected Log4j version. If Log4j 2.7 is supported, correlation IDs should be added and cleaned up without an exception. Otherwise the incompatible instrumentation should not be selected for 2.7.
Source analysis
The same version/API mismatch is present in main at commit 5cabf9ceeaea99f7a811b896064bf7aa8b131e5d (source inspected; that commit was not runtime-tested):
Log4J2_7PlusLogCorrelationInstrumentationselectslog4j-coreversions greater than or equal to 2.7.Log4j2_7PlusLogCorrelationHelper.removeFromMdcunconditionally callsThreadContext.removeAll(...).- The Log4j API documentation marks
removeAll(Iterable<String>)as introduced in 2.8, whereasputAll(Map)was introduced in 2.7.
A possible fix is a compatible per-key ThreadContext.remove(String) cleanup for 2.7, or a separate version/capability-gated implementation. A regression test should cover 2.7 specifically, as well as 2.8+, including cleanup after logging and thread reuse.
This differs from #3745 / #3764: those address version detection in shaded JARs; here the application actually uses Log4j 2.7 and lacks the invoked API.
Workaround
Upgrade the application's matching Log4j dependencies to a compatible maintained version, or disable log-correlation temporarily, accepting the loss of automatic logging correlation.
- Ngôn ngữ chính
- Java
- Star
- 593
- Fork
- 338
- Merge trung bình
- 1 ngày 9 giờ
- Pull request đã merge (30 ngày)
- 13
Chuẩn bị môi trường
- Có Dockerfile hoặc tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của elastic/apm-agent-java
-
agent-java community triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
elastic/apm-agent-java#4594 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
agent-java
Độ khó 2/5 1-2 ngày Mức phù hợp với người mới 62/100
elastic/apm-agent-java#2844 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Improve docs and add error log related to illegal activation of transactionCó thể đã có người làm @AzazelSensei đã nhận 37 ngày trước. Đang mởdocs good first issue
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
elastic/apm-agent-java#850 · 4 bình luận · 1 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
-
agent-java community triage
elastic/apm-agent-java#4573 · 4 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
agent-java
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 55/100
elastic/apm-agent-java#4549 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của elastic/apm-agent-java
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
apache/rocketmq-dashboard#6872 ·
Maintainer thường phản hồi trong vòng 3 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
ADORSYS-GIS/token-status-link#168 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
ADORSYS-GIS/keycloak-oid4vp-plugin#232 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Wrong link to test resultsĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
Maintainer thường phản hồi trong vòng 2 ngày
-
docs(site): Mermaid edge-label contrast on Architecture and a table header on How it comparesĐang mởdocumentation
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
devops-thiago/ThrillhouseBot#1132 ·
Maintainer thường phản hồi trong vòng 1 ngày