Spring boot log4j SiftingAppender для свойства MD C - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь создать SiftingAppender, в котором будет создаваться папка журнала для каждого клиента отдельно. Вот что я сделал: -

В файле YAML: -

logging:
  file:
    path : ../../../logs/SystemFolder

В MDCFilter. java файл: -

 @Component
 public class MDCFilter implements Filter
 {

    @Override
    public void destroy()
    {
        // Destroy filter code
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
        throws IOException, ServletException
    {

        try
        {
        // Setup MDC data:

        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        MDC.put(Constant.CLIENTIP, request.getRemoteHost());
        if (Util.isNotNullOrEmpty(authentication))
        {
            if (authentication.getPrincipal() instanceof AppUser)
            {
                AppUser user = (AppUser) authentication.getPrincipal();
                MDC.put(Constant.USERID, user.getEmployeeMaster().getEmployeeGlobalId());
                MDC.put("clientId", user.getEmployeeMaster().getClientCode());

            }
            else if (authentication.getPrincipal() instanceof User)
            {
                User user = (User) authentication.getPrincipal();
                MDC.put(Constant.USERID, user.getUsername());
                MDC.put("clientId", Constant.CONSTANT_ROOT);

            }
        }
        else
        {
            MDC.put("clientId", Constant.CONSTANT_ROOT);
        }

        chain.doFilter(request, response);
    }

    finally
    {
        // Tear down MDC data:
        // ( Important! Cleans up the ThreadLocal data again )
        MDC.clear();
    }

}

    @Override
    public void init(FilterConfig arg0) throws ServletException
    {
    // Initialize filter

    }

}

В logback-spring . xml: -

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">

<springProfile name="dev">
    <appender name="stdout"
        class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %5p %X{clientIP} %X{userId}-%msg%n
            </pattern>
        </encoder>
    </appender>
</springProfile>

<appender name="SIFT"
    class="ch.qos.logback.classic.sift.SiftingAppender">
    <discriminator>
        <key>clientId</key>
        <defaultValue>root</defaultValue>
    </discriminator>
    <sift>
        <appender name="ROLLING_NEW-${clientId}"
            class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOG_PATH}/${clientId}/ExpenseLog.log
            </file>
            <rollingPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <!-- rollover daily -->
                <fileNamePattern>${LOG_PATH}/${clientId}/ExpenseLog${clientId}/log-%d{yyyy-MM-dd}.part-%i.log
                </fileNamePattern>
                <!-- each file should be at most 100MB, keep 60 days worth of history, 
                    but at most 30GB -->
                <maxFileSize>100MB</maxFileSize>
                <maxHistory>60</maxHistory>
                <totalSizeCap>30GB</totalSizeCap>

            </rollingPolicy>
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss} %5p %X{clientIP} %X{userId}-%msg%n
                </pattern>
            </encoder>
        </appender>
    </sift>
</appender>

<springProfile name="prod,uat,preprod,demo">
    <root level="WARN">
        <appender-ref ref="SIFT" />
    </root>
    <root level="INFO">
        <appender-ref ref="SIFT" />
    </root>
    <logger name="org.springframework.security" level="WARN">
        <appender-ref ref="SIFT" />
    </logger>
</springProfile>

<springProfile name="dev">
    <logger name="org.springframework.boot" level="ERROR">
        <appender-ref ref="stdout" />
    </logger>


    <root level="INFO">
        <appender-ref ref="stdout" />
    </root>
    
</springProfile>

</configuration>

Тем не менее, все журналы направляются в файл ../../../logs/SystemFolder/root/log.log, и только ошибки хранятся в моей соответствующей клиентской папке (../../../logs/SystemFolder/<clientId>/log.log).

Пожалуйста дайте мне знать, что мне делать или где я ошибаюсь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...