В моем spring-boot
проекте я пытаюсь реализовать MDC
для logback
.
В одном из моих двух spring-security filters
я помещаю значение ключа в MDC. Но в логах значение внутри MDC
не печатается.
public class JWTAuthorizationFilter extends BasicAuthenticationFilter {
private static final Logger LOGGER = LoggerFactory.getLogger(JWTAuthorizationFilter.class);
private AuthTokenModelRepository authTokenModelRepository;
public JWTAuthorizationFilter( AuthenticationManager authManager,
AuthTokenModelRepository authTokenModelRepository )
{
super(authManager);
this.authTokenModelRepository = authTokenModelRepository;
}
@Override
protected void doFilterInternal( HttpServletRequest req, HttpServletResponse res, FilterChain chain )
throws IOException, ServletException
{
String header = req.getHeader(TokenConstant.HEADER_STRING);
if( NullEmptyUtils.isNullorEmpty(header) || !header.startsWith(TokenConstant.TOKEN_PREFIX) )
{
LOGGER.info("****************JWT not present in the HttpRequest header************************");
chain.doFilter(req, res);
return;
}
// Check if the user is still active
Optional<AuthTokenModel> authTokenModelOptional = authTokenModelRepository
.findByJwtAndIsActiveTrue(header.replace(TokenConstant.TOKEN_PREFIX, ""));
if( !authTokenModelOptional.isPresent() )
{
LOGGER.info("********************User is not logged in*******************************");
chain.doFilter(req, res);
return;
}
UsernamePasswordAuthenticationToken authentication = getAuthentication(req);
SecurityContextHolder.getContext().setAuthentication(authentication);
String userName = (String) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
MDC.put("user", userName);
chain.doFilter(req, res);
}
И в моем logback.xml
я определяю шаблон, который должен добавлять MDC
содержимое в журналы.
<property name="LOG_FILE" value="${user.home}/my_logs/logs"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger | refId=%X{user} | %msg%n
</Pattern>
</layout>
</appender>
Но в журналах, присутствующих в консоли, я не вижу содержимого MDC.
2018-04-28 15:36:15 [http-nio-8090-exec-2] ИНФОРМАЦИЯ com.highpeak.tlp.webservices.services.impl.InvitationServiceImpl | refId = | Входные данные для приглашения пользователя проверены