Как создать отдельный файл журнала для каждого пакета, запущенного в одном проекте? - PullRequest
0 голосов
/ 30 апреля 2019

Работа над проектом Spring boot и spring scheduler для запуска нескольких пакетов.

Здесь вся информация о пакетах, которую я записываю в один файл журнала. (One log file got created)

Теперь мне нужно написатьинформация в отдельных файлах журнала для разных пакетов i.e no. of batches = that many no. of log files.

Обратите внимание, что у меня только один основной класс, так как я использую весеннюю загрузку, и все пакеты входят в один пакет, только один сервис для всех пакетов и один репозиторий.для всех партий.

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
<Properties>
  <Property name="LOG_PATTERN">$${ctx:filename} %d %p %c{1.} [%t] %m%n
  </Property>
  <Property name="APP_LOG_ROOT">C:/job-logs/claims-dms/</Property>
  <Property name="APP_LOG_BACK_ROOT">C:/job-logs/claims-dms/back/</Property>
</Properties>
<Appenders>
    <Console name="Console" target="SYSTEM_OUT" follow="true">
        <PatternLayout pattern="${LOG_PATTERN}" />
    </Console>

    <RollingFile name="appLog" fileName="${APP_LOG_ROOT}claims-dms.log"
        filePattern="${APP_LOG_BACK_ROOT}claims-dms-%d{yyyy-MM-dd}-%i.log.gz">
        <PatternLayout pattern="${LOG_PATTERN}" />
        <Policies>
            <SizeBasedTriggeringPolicy size="500MB" />
            <TimeBasedTriggeringPolicy interval="1"
                modulate="true" />

        </Policies>
        <DefaultRolloverStrategy max="1" />
    </RollingFile>

</Appenders>
<Loggers>

    <Logger name="com.bct" additivity="false" level="all">
        <AppenderRef ref="appLog" />
        <AppenderRef ref="Console" />
    </Logger>
    <Logger name="org.hibernate.SQL" additivity="false" level="all">
        <AppenderRef ref="appLog" />
        <AppenderRef ref="Console" />
    </Logger>
    <Logger name="org.hibernate.type.descriptor.sql" additivity="false"
        level="all">
        <AppenderRef ref="appLog" />
        <AppenderRef ref="Console" />
    </Logger>
    <Logger name="org.springframework.jdbc.core" additivity="false"
        level="all">
        <AppenderRef ref="appLog" />
        <AppenderRef ref="Console" />
    </Logger>



    <Root>
        <AppenderRef ref="Console" />
    </Root>
</Loggers>
</Configuration>

1 Ответ

0 голосов
/ 30 апреля 2019

вы можете поместить ваше имя пакета в MDC, откуда ваша работа вызывается, и использовать этот ключ в logback.xml

@Scheduled
public void scheduleJob(){
    MDC.put("jobname", jobName);
    // other stuff
}

и logback.xml

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

<appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
    <!-- in the absence of the class attribute, it is assumed that the
         desired discriminator type is
         ch.qos.logback.classic.sift.MDCBasedDiscriminator -->
    <discriminator>
        <key>jobName</key>
        <defaultValue>batch-service</defaultValue>
    </discriminator>
    <sift>
        <appender name="FILE-${jobName}" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${server.docroot}/logs/${jobName}.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
              <fileNamePattern>${server.docroot}/logs/${jobName}.%i.log</fileNamePattern>
              <minIndex>1</minIndex>
              <maxIndex>5</maxIndex>
            </rollingPolicy>

            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
              <maxFileSize>100MB</maxFileSize>
            </triggeringPolicy>
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>%d [%thread] %level %mdc %logger{35} - %msg%n</pattern>
            </layout>
        </appender>
    </sift>
</appender>


<root level="INFO">
<appender-ref ref="SIFT" />
</root>
</configuration>

теперь для каждого задания будет создаваться новый файл журнала.

...