Странное поведение оператора логирования Java - PullRequest
8 голосов
/ 03 апреля 2019

Используя 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 , тогда почему сам этот объект не печатается как часть 2-го параметра и, что более интересно, соответствующая строка в операторе logging также не распечатаны.

Короче говоря, я хотел понять, почему это происходит в производственной среде и как я могу заставить его работать.

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

Не могли бы вы выполнить приведенную ниже команду в своем классе и опубликовать результаты производства.

javap -verbose <YourClassName>.class

С выводом мы должны увидеть, как был собран класс.

PS: В зависимости от того, как вы развернули, вам может потребоваться распаковать файл JAR, а затем выполнить указанную выше команду для извлеченного класса.

0 голосов
/ 10 апреля 2019

Можете ли вы попробовать свою сборку после того, как библиотеки журналов maven затеняют, часто серверные библиотеки отдают предпочтение той, которую вы упомянули, что приводит к таким проблемам, как конфликт версий или неожиданное поведение в коде, как в вашем случае.Если возможно, попробуйте эту опцию, в худшем случае, если это не сработает, это исключит одну из возможностей, и в таких странных случаях я считаю, что лучше исключить как можно больше возможных случаев, прежде чем сузить решение.

...