
部分代码如下:
} catch (Exception e) { log.error(e.getMessage(), e); return RestResult.fail("系统异常"); } 日志文件中显示
2025-11-07 09:43:23.128 [http-nio-20001-exec-934] ERROR StoreOrderServiceImpl:557 - null java.lang.NullPointerException: null 然后就结束了, 最近出了好多这种问题. 打印空指针,但是完全没有栈相关信息
1 mulychou 18 小时 50 分钟前 问题在于:e.getMessage() 可能为 null 。 例如,在 NullPointerException 没有具体 message 时,e.getMessage() 返回 null 。于是日志输出时会变成: null java.lang.NullPointerException: null 此时虽然异常对象 e 传入了,但很多日志框架(例如 logback 或 log4j2 )在第一个参数是 null 时会只打印异常类型,而不打印堆栈。 直接使用占位符打印日志吧,例如: log.error("Error occurred: {}", e.getMessage(), e); |
2 Goooooos 18 小时 44 分钟前 java 的 JIT 会优化掉一部分异常的堆栈,尤其是 NPE 启动参数加上-XX:-OmitStackTraceInFastThrow 可以禁用 fast throw 优化 |
3 JYii 18 小时 37 分钟前 正常输出应该是先打印 exception 的 message ,然后紧跟堆栈信息,现在没有,那不就是如 1L 所说。而且 log.error 的第一个参数应是自定义的消息模板,不该直接放异常信息。 |
4 luoke99 18 小时 13 分钟前 是不是由自己封装的异常类触发的,我们之前有个项目就是封装了一个 BizException,有个家伙把 fillInStackTrace() 重写了,导致 log 不会打印异常栈 |
5 Wh1te 18 小时 11 分钟前 这是 JVM 的 OmitStackTraceInFastThrow 优化.RuntimeException 频繁出现,就会省略掉堆栈,比如 NullPointerException ClassCastException ArrayIndexOutOfBoundsException 等等. 你往前找到最开始出现这个异常的日志,那里就有堆栈信息 |
6 Need4more 16 小时 39 分钟前 #2 、#5 正解 jvm 针对高频异常会复用预分配实例以提升性能。若需完整堆栈,需显式禁用参数-XX:-OmitStackTraceInFastThrow |
nbsp; 7 prosgtsr 3 小时 0 分钟前 via iPhone 我们也有这个问题,学习了 |
8 Edward4074 2 小时 19 分钟前 前阵子也碰到这个问题,问下 AI 就好了 |