Java日志语句的奇怪行为

问题描述 投票:8回答:2

使用log4j和Sl4j并遇到一个奇怪的问题,我有以下日志语句。

log.trace("Foo Request object value : {} foo params: {}" , foo==null, foo);

如果foo有一个条形值,它将在我的本地日志记录中打印。

Foo Request object value : false foo params: bar 

但是当我将代码部署到生产环境时,它会打印在下面:

Foo Request object value : false

注意上面它甚至不打印“foo params:”这是我的日志记录语句中的字符串,忘记打印它的参数值。

同样由于foo不为null,这就是打印第一个参数值false的原因,那么为什么该对象本身不会作为第二个参数的一部分打印,更有趣的是它的日志语句中的相应字符串也不会被打印。

简而言之,我想了解为什么在生产环境中发生这种情况,以及如何使其发挥作用。

java linux logging log4j slf4j
2个回答
0
投票

你可以在maven着色日志库之后尝试你的构建,很多时候服务器端库优先于你提到的那个,导致版本冲突或代码中的意外行为等问题。如果可能的话请尝试这个选项,在最坏的情况下,如果这不起作用,它将排除其中一种可能性,在这种奇怪的情况下,我发现最好在缩小解决方案之前排除尽可能多的情况。


0
投票

你可以在你的类上运行以下命令并发布生产中的输出。

javap -verbose <YourClassName>.class

通过输出,我们应该能够看到这个类是如何组装的。

PS:根据您的部署方式,您可能需要解压缩jar文件,然后在提取的类上运行上述命令。

© www.soinside.com 2019 - 2024. All rights reserved.