В настоящее время мое серверное приложение просачивается 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
.
Вы можете переопределить метод 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".
Наконец, имейте в виду, что это всего лишь исправление, и в идеале вам следует избегать регистрации конфиденциальной информации.