#java #spring #spring-boot #spring-mvc #spring-integration
#java #spring #spring-boot #spring-mvc #spring-интеграция
Вопрос:
В настоящее время по умолчанию Spring Integration записывает журналы отладки в формате:
DEBUG date time | producer-1 | o.s.i.c.DirectChannel | send line: 123 |
preSend on channel 'myChannel', message: GenericMessage [payload=myPayload(),
headers={content-length=XYZ, http_requestMethod=POST, errorChannel=errorChannel,
authorization=Bearer myExtremelyLongToken, replyChannel=replyChannel}]
Приведенный выше пример журнала кажется довольно кратким, но при включении большой полезной нагрузки JSON и множества заголовков он очень быстро становится громоздким.
Наибольший вклад в это вносит заголовок авторизации. Этот заголовок может содержать сотни символов, что делает практически невозможным наличие более одного длинного сообщения на терминале шириной 80.
Есть ли способ или можно отредактировать ведение журнала DirectChannel, чтобы исключить заголовок авторизации?
В идеале нам также не нравится многократное включение токена авторизации в журналы, поскольку они являются производственными токенами.
Я должен был бы поверить, что существует какой-то способ скрыть некоторые части этих журналов по умолчанию.
Ответ №1:
Ну, невозможно отфильтровать содержимое сообщения перед регистрацией (пока): https://github.com/spring-projects/spring-integration/issues/3222 .
Однако вы можете перестать иметь уровень ведения журнала отладки для org.springframework.integration
, а вместо этого использовать проводное нажатие на определенные каналы, чтобы перехватывать их сообщения и отправлять их в LoggingHandler
категорию с пользовательской категорией и специфическими setLogExpression
для выполнения каких-либо действий с сообщением перед его регистрацией. Это выражение может вызывать некоторый компонент (с использованием @
оператора) и с аргументом в #root
качестве аргумента, который является целым Message
для ведения журнала. Будет зарегистрирован только результат этого вызова. Итак, вы можете создавать любую логику фильтрации в том целевом компоненте, который вы собираетесь вызывать из этого выражения!
Смотрите больше информации в документах:
- Проводное нажатие — https://docs.spring.io/spring-integration/docs/current/reference/html/core.html#channel-wiretap
- Адаптер канала ведения журнала — https://docs.spring.io/spring-integration/docs/current/reference/html/messaging-endpoints.html#logging-channel-adapter
- Поддержка SpEL — https://docs.spring.io/spring-integration/docs/current/reference/html/spel.html#spel
Комментарии:
1. Спасибо за это, я считаю, что мы можем сделать это с некоторыми из наших каналов. Для сотен имеющихся у нас каналов потребуется довольно много дополнительного XML, поэтому я с нетерпением жду поддерживаемой реализации, которая позволит нам изменять ведение журнала по умолчанию.