Есть ли способ печати, какие значения происходит в этом объекте?
Вам необходимо написать собственный метод для извлечения соответствующих компонентов объектов запроса (используя общедоступные геттеры), соответствующим образом отформатировать их и вернуть лот в виде строки. Затем вызовите этот метод на объекте request
и передайте результирующую строку в регистратор вместо объекта request
.
Если вам нужно вникать в личное состояние (используя абстрагирующее отражение), это сложнее, и вы рискуете потерять свой код, если меняются детали реализации класса запроса.
Tedious. Но нет общего решения, AFAIK.
(Если вы используете общую схему сериализации, вы несете ответственность, чтобы работать с проблемой, что некоторые из компонентов являются либо не связаны, или ни сериализации, или огромным ...)
UPDATE - на самом деле, было бы целесообразно использовать специальный метод, как это:
if (log.isInfoEnabled()) {
log.info("Sending request: {}", myFormat(request));
}
Если вы не охраняют info(...)
вызов, накладные расходы форматирования будут понесены, независимо от уровня Логгина.
Не совсем. Если у создателей этого класса не было предусмотрительности, чтобы включить надлежащий метод 'toString()', вы вроде бы boned. Вы можете просмотреть каждый тип объекта в списке и выбрать подходящий симпатичный принтер (который вам нужно написать), но это довольно трудоемкая вещь для реализации. – markspace
Тип может быть легко сериализован в формате JSON; если это так, то некоторый (полезный или не) текст может быть относительно легко вынимаемым. YMMV и здесь есть другие потенциальные проблемы, в зависимости от графа объектов. Сериализация JSON сама использует отражение, которое/может/выполняться вручную. – user2864740
Или вы могли бы просто ткнуть в него с отражением, я думаю. Кроме того, утомительно, но вы можете написать один метод, который делает разумную работу по печати всех объектов в вашей системе без 'toString()'. – markspace