DefaultLogBuilder ignores a throwable inferred by created Message
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 2/5
- 预计耗时
- 1-3 小时
- 新手友好度
- 52/100
- Issue 类型
- 缺陷
- 描述清晰度
- 描述清楚
- 活跃度
- 停滞
- 技术栈
- java
- 领域
- backend, observability
调研方向
从 DefaultLogBuilder 的 logMessage(Message) 方法开始,检查它如何将显式 throwable 传递给 logger.logMessage。复现 logger.error 和 logger.atError().log 的示例,然后验证在未设置显式 throwable 时,builder 会保留由 Message 推断出的 throwable;注意,TestLogger 会在其 log 方法中自行进行推断。
由索引模型根据 Issue 内容生成。
描述
Description
When using DefaultLogBuilder log* methods, throwable information that might have been inferred by the created Message object is lost - and DefaultLogBuilder only passes the explicit throwable that was set via LogBuilder.withThrowable(Throwable).
This is in contradiction to the regular use of Logger methods that accept message+args - which creates a Message using the configured factory, and then uses Message.getThrowable() to extract the throwable.
This was initially assumed as a bug in log4j-transform-maven-plugin (which converts regular Logger calls to LogBuilder):
https://github.com/apache/logging-log4j-transform/issues/169
but I realized that it might be a stretch for the plugin to infer this data at build-time to be able to pass it to .withThrowable.
Suggested Fix
Change DefaultLogBuilder's logMessage(Message) code
from logger.logMessage(level, marker, fqcn, location, message, throwable);
to logger.logMessage(level, marker, fqcn, location, message, throwable != null ? throwable : message.getThrowable());
Configuration
Version: 2.24.3
Operating system: macOS Sonoma 14.7.2
JDK: eclipse-temurin 17.0.13
Logs
Consider the following code:
Throwable throwable = new Exception("Oh oh");
String messageFormat = "Hello, {}!";
String arg = "Problem";
logger.error(messageFormat, arg, throwable);
logger.atError().log(messageFormat, arg, throwable);
results in the following output:
14:30:53.223 [main] ERROR net.kundas.Main - Hello, Problem!
java.lang.Exception: Oh oh
at net.kundas.Main.main(Main.java:11) [classes/:?]
14:30:53.233 [main] ERROR net.kundas.Main - Hello, Problem!
Reproduction
I've tried recreating it in a unit test, but they seem to be using org.apache.logging.log4j.test.TestLogger, which does this inference in its log method:
final Throwable t;
if (throwable == null
&& params != null
&& params.length > 0
&& params[params.length - 1] instanceof Throwable) {
t = (Throwable) params[params.length - 1];
} else {
t = throwable;
}
if (t != null) {
sb.append(' ');
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
t.printStackTrace(new PrintStream(baos));
sb.append(baos);
}
- 主要语言
- Java
- 星标
- 3.6k
- 派生
- 1.8k
- 平均合并
- 5 天 6 小时
- 30 天内合并 PR
- 24
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 没有贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
apache/logging-log4j2 的其他 Issue
-
waiting-for-maintainer
难度 2/5 1-3 小时 新手友好度 63/100
apache/logging-log4j2#4475 ·
维护者通常 1 天内回复
-
Migrate `log4j-api-test` tests to JUnit 5可能重新可做 关联的 PR 已关闭且未合并。 未关闭api priority: P3 tests waiting-for-maintainer
难度 2/5 1-3 小时 新手友好度 68/100
apache/logging-log4j2#4430 · 1 条评论 ·
维护者通常 1 天内回复
-
`Rfc5424Layout` does not escape the `newLineEscape` replacement in SD-PARAM-VALUE可能已有人在做 @lunarbae628 于 5 天前认领。 未关闭bug layouts priority: P3
apache/logging-log4j2#4464 · 2 条评论 · 已指派 1 人 ·
维护者通常 1 天内回复
-
configuration enhancement layouts
难度 4/5 3-5 天 新手友好度 55/100
apache/logging-log4j2#4463 ·
维护者通常 1 天内回复
-
`evaluateOnStartup="true"` saves logs under wrong file names after missing scheduled roll可能重新可做 关联的 PR 已关闭且未合并。 未关闭appenders:Rolling bug priority: P1 waiting-for-maintainer
难度 3/5 1-2 天 新手友好度 30/100
apache/logging-log4j2#4449 ·
维护者通常 1 天内回复
查看 apache/logging-log4j2 的全部 Issue
相似的 Issue
-
[Bug]: Nullable implicit operator on string extensible enums still throws for a null string可能已有人在做 关联的 PR 仍在进行中或已合并。 未关闭bug emitter:client:csharp
难度 2/5 1-3 小时 新手友好度 84/100
microsoft/typespec#12572 · 1 条评论 · 1 个 reaction ·
维护者通常 1 天内回复
-
[BUG]: Java SDK MountRequest always sends update-optional fields, resetting stored mount settings未关闭bug
难度 2/5 1-3 小时 新手友好度 75/100
维护者通常 1 天内回复
-
GCC 15.2: -Wcast-qual warning - cast discards const qualifier from pointer target type (H5trace.c)未关闭
难度 2/5 1-3 小时 新手友好度 73/100
维护者通常 1 天内回复
-
[Bug] RemotingHelper.connect swaps the socket send and receive buffer configuration可能已有人在做 @amalsaidov 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 82/100
维护者通常 1 天内回复
-
needs-area-label
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 2 天内回复