Spring RestTemplate – Как удалить client_secret из журналов?

В настоящее время мое серверное приложение просачивается client_secret в мой файл журнала. Я хотел бы сохранить уровень журнала DEBUG, за исключением RestTemplate, где я не хочу, чтобы эта строка выполнялась.

Строка журнала, о которой идет речь, выглядит примерно так:

o.s.web.client.RestTemplate: запись [{client_id=[id-client], client_secret=[xxxxxxxxxxxxxxxxxxxxxxxxxxx],grant_type=[client_credentials], Audience=[roles-api]}] как "application/x-www-form-urlencoded" "

А вот как сейчас выглядит мой logback-spring.xml:

...
    <logger name = "org.springframework.web" level = "DEBUG"/>
    <Logger name = "org.springframework.web.client.RestTemplate" level = "INFO"/>
...

Я думаю, что уровень DEBUG, установленный для org.springframework.web, "переопределяет" уровень INFO, установленный для RestTemplate.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете переопределить метод toString и вернуть нужные поля.

Надеюсь на помощь.

Ответ принят как подходящий

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

MaskingPatternLayout.java

package my.project.path;

import ch.qos.logback.classic.PatternLayout;
import ch.qos.logback.classic.spi.ILoggingEvent;

public class MaskingPatternLayout extends PatternLayout {

    @Override
    public String doLayout(ILoggingEvent event) {
        String message = super.doLayout(event);
        return message.replaceAll("client_secret=\\S*", "client_secret=[****],");
    }
}

И в logback-spring.xml я добавил следующие строки:

    <appender name = "FILE" class = "ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder class = "ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class = "my.project.path.MaskingPatternLayout">
                <pattern>${FILE_LOG_PATTERN}</pattern>
            </layout>
        </encoder>
        <file>${LOG_FILE}</file>
        <rollingPolicy class = "ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            ...
        </rollingPolicy>
    </appender>

Благодаря этим изменениям мои файлы журналов теперь содержат замаскированные секреты клиента и выглядят следующим образом:

o.s.web.client.RestTemplate: запись [{client_id=[id-client], client_secret=[****],grant_type=[client_credentials], Audience=[roles-api]}] как "application/x-www- форма-urlencoded".

Наконец, имейте в виду, что это всего лишь исправление, и в идеале вам следует избегать регистрации конфиденциальной информации.

Другие вопросы по теме