Java记录语句的怪异行为

时间:2019-04-03 03:27:39

标签: java linux logging log4j slf4j

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

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

如果foo有一个bar值,它将在我的本地日志中显示在下面。

Foo Request object value : false foo params: bar 

但是,当我将代码部署到生产环境时,其打印如下:

Foo Request object value : false

上面的通知甚至都不会打印“ foo params:”(这是我的日志记录语句中的字符串),忘记打印它的param值

另外,由于foo不为null,这就是打印第一个参数值 false 的原因,然后为什么该对象本身不作为第二个参数的一部分被打印,更有趣的是,它在日志记录语句中也对应于它的字符串未打印。

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

2 个答案:

答案 0 :(得分:0)

您是否可以在对日志库进行maven着色后尝试构建,很多时候服务器端库优先于您提到的库,从而导致诸如版本冲突或代码意外行为等问题。 如果可能的话,请尝试使用此选项,在最坏的情况下,如果此方法不起作用,则将排除其中一种可能性,在这种奇怪的情况下,我认为最好在排除解决方案之前先排除尽可能多的情况。

答案 1 :(得分:0)

您可以在您的课程上运行以下命令,然后发布产品的输出吗?

javap -verbose <YourClassName>.class

通过输出,我们应该能够看到类的组装方式。

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