Я пытаюсь создать 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
).
Пожалуйста дайте мне знать, что мне делать или где я ошибаюсь.