Todos os produtos
Search
Central de documentação

Microservices Engine:Integrate Simple Log Service with SchedulerX 2.0

Última atualização: Jun 28, 2026

Quando jobs falham ou apresentam comportamento inesperado, os logs de execução são essenciais para identificar a causa raiz. Ao integrar o Simple Log Service ao SchedulerX 2.0, você coleta logs de execução de jobs — incluindo logs de jobs distribuídos — e os visualiza diretamente no console do SchedulerX. Adicione um appender Log4j 2, Log4j ou Logback para começar a coletar logs dos jobs acionados.

Pré-requisitos

Antes de começar, verifique se você possui:

  • Um namespace criado no SchedulerX

  • Um grupo de aplicações criado no SchedulerX

  • SchedulerX 2.0 Professional Edition com o Simple Log Service ativado

Activate Simple Log Service

Nota

O Simple Log Service retém logs por até duas semanas. O sistema exclui automaticamente os logs expirados.

Como funciona

  1. Configure um appender de log do SchedulerX no seu framework de logging (Log4j 2, Log4j ou Logback).

  2. No código do job, grave logs usando um logger chamado schedulerx.

  3. Durante a execução do job, o SchedulerX coleta os logs e os exibe no console.

Escolha um método de coleta de logs

O SchedulerX oferece dois métodos de coleta de logs. Escolha um antes de configurar o appender.

Método

Coleta

Mais indicado para

Compromisso

Apenas logs de jobs

Logs gravados no logger schedulerx

Solução de problemas direcionada para jobs específicos

Exige um logger dedicado no código

Todos os logs de serviço

Todos os logs da aplicação

Visibilidade completa da aplicação

Mistura logs de jobs com logs de serviço e reduz a eficiência das consultas

Atualize o agente do SchedulerX

Atualize o agente do SchedulerX para a versão mais recente. Para obter o número da versão mais recente, consulte as Notas de versão.

Adicione a seguinte dependência ao arquivo pom.xml (exemplo com Spring Boot Starter):

<dependency>
    <groupId>com.aliyun.schedulerx</groupId>
    <artifactId>schedulerx2-spring-boot-starter</artifactId>
    <version>${Latest version of the SchedulerX client}</version>
</dependency>

Configure um appender de log

Selecione o framework de logging abaixo. Cada framework suporta ambos os métodos de coleta de logs.

Log4j 2

Coletar apenas logs de jobs

  1. Adicione um appender e um logger dedicado ao arquivo de configuração do Log4j 2:

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="off">
        <Appenders>
            <Console name="Console" target="SYSTEM_OUT">
                <PatternLayout
                    pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %m%n" />
            </Console>
            <SchedulerxLog4j2Appender name="schedulerxLog"
                timeFormat="yyyy-MM-dd'T'HH:mmZ"
                timeZone="UTC"
                ignoreExceptions="true">
                <PatternLayout pattern="%d %-5level [%thread] %logger{0}: %msg"/>
            </SchedulerxLog4j2Appender>
        </Appenders>
    
        <Loggers>
            <Root level="info">
                <AppenderRef ref="Console" />
            </Root>
            <Logger name="schedulerx" level="info" additivity="false">
                <AppenderRef ref="schedulerxLog" />
            </Logger>
        </Loggers>
    </Configuration>
  2. Na classe do job, crie um logger chamado schedulerx e use-o para gravar logs:

    package com.hxm.test.processor;
    
    import com.alibaba.schedulerx.worker.domain.JobContext;
    import com.alibaba.schedulerx.worker.processor.JavaProcessor;
    import com.alibaba.schedulerx.worker.processor.ProcessResult;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Component;
    
    @Component
    public class HelloWorldJob3 extends JavaProcessor {
        // Use "schedulerx" as the logger name
        private static final Logger logger = LoggerFactory.getLogger("schedulerx");
    
        @Override
        public ProcessResult process(JobContext context) throws Exception {
            logger.info("hello HelloWorldJob3");
            return new ProcessResult(true);
        }
    
    }

Coletar todos os logs de serviço

Adicione o appender schedulerxLog ao logger raiz. Assim, o SchedulerX coletará todos os logs da aplicação.

Nota

Essa abordagem mistura logs de serviço com logs de jobs, o que pode dificultar a solução de problemas e reduzir a eficiência das consultas.

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="off">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout
                pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %m%n" />
        </Console>
        <SchedulerxLog4j2Appender name="schedulerxLog"
            timeFormat="yyyy-MM-dd'T'HH:mmZ"
            timeZone="UTC"
            ignoreExceptions="true">
            <PatternLayout pattern="%d %-5level [%thread] %logger{0}: %msg"/>
        </SchedulerxLog4j2Appender>
    </Appenders>

    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console" />
            <AppenderRef ref="schedulerxLog" />
        </Root>
    </Loggers>
</Configuration>

Log4j

Coletar apenas logs de jobs

  1. Adicione um appender e um logger dedicado ao arquivo log4j.properties:

    log4j.rootLogger = INFO,console
    log4j.logger.schedulerx=schedulerxLog
    log4j.appender.schedulerxLog=com.alibaba.schedulerx.worker.log.appender.SchedulerxLog4jAppender
  2. Na classe do job, crie um logger chamado schedulerx e use-o para gravar logs. O código Java é idêntico ao exemplo do Log4j 2 acima — utilize LoggerFactory.getLogger("schedulerx").

Coletar todos os logs de serviço

Adicione o appender schedulerxLog ao logger raiz no arquivo log4j.properties:

log4j.rootLogger = INFO,console,schedulerxLog
log4j.appender.schedulerxLog=com.alibaba.schedulerx.worker.log.appender.SchedulerxLog4jAppender

Logback

Nota

A classe SchedulerxLogbackAppender está no pacote schedulerx2-worker.jar. Certifique-se de que o agente do SchedulerX esteja atualizado para a versão mais recente. Para obter a versão mais recente, consulte as Notas de versão.

Coletar apenas logs de jobs

  1. Adicione um appender e um logger dedicado ao arquivo logback.xml:

    <appender name="schedulerxLog" class="com.alibaba.schedulerx.worker.log.appender.SchedulerxLogbackAppender">
        <timeFormat>yyyy-MM-dd'T'HH:mmZ</timeFormat>
        <timeZone>UTC</timeZone>
    </appender>
    
    <root level="INFO">
        <appender-ref ref="CONSOLE" />
    </root>
    
    <logger name="schedulerx" level="INFO">
        <appender-ref ref="schedulerxLog"/>
    </logger>
  2. Na classe do job, crie um logger chamado schedulerx e use-o para gravar logs. O código Java é idêntico ao exemplo do Log4j 2 acima — utilize LoggerFactory.getLogger("schedulerx").

Coletar todos os logs de serviço

Adicione o appender schedulerxLog ao logger raiz no arquivo logback.xml:

<appender name="schedulerxLog" class="com.alibaba.schedulerx.worker.log.appender.SchedulerxLogbackAppender">
    <timeFormat>yyyy-MM-dd'T'HH:mmZ</timeFormat>
    <timeZone>UTC</timeZone>
</appender>

<root level="INFO">
    <appender-ref ref="CONSOLE" />
    <appender-ref ref="schedulerxLog"/>
</root>

Visualizar logs de jobs

  1. Faça login no console do MSE SchedulerX.

  2. No painel de navegação à esquerda, clique em Task Management.

  3. Localize o job desejado e selecione more > Historical records na coluna Operation.

  4. No painel Task instance records, localize a instância do job desejada e clique em Log na coluna Operation.

Campos de log

Cada entrada de log contém os seguintes campos:

Campo

Descrição

ip

Endereço IP do worker que gerou o log

executionId

ID de execução no formato ${jobId}_${jobInstanceId}_${taskId}

level

Nível do log (por exemplo, INFO ou ERROR)

log

Conteúdo do log

throwable

Rastreamento de pilha da exceção (presente apenas quando ocorre um erro)

time

Timestamp de geração do log

Consultar logs históricos

O SchedulerX retém apenas os 60 registros de execução mais recentes por instância de job. Para pesquisar registros mais antigos, clique em Log Query no painel de navegação à esquerda do console do SchedulerX. Na página Log Query, filtre por ID do job, palavra-chave ou intervalo de tempo.

Exemplos de solução de problemas

Diagnosticar uma falha de serviço

Após integrar o Simple Log Service, o SchedulerX coleta tanto logs de jobs quanto logs de serviço, incluindo exceções. O exemplo a seguir demonstra como identificar um erro de divisão por zero em uma chamada de serviço.

  1. Crie um job que chame um método de serviço e grave logs com o logger schedulerx:

    package com.hxm.test.processor;
    
    import com.alibaba.schedulerx.test.service.TestService;
    import com.alibaba.schedulerx.worker.domain.JobContext;
    import com.alibaba.schedulerx.worker.processor.JavaProcessor;
    import com.alibaba.schedulerx.worker.processor.ProcessResult;
    
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    @Component
    public class HelloWorldJob extends JavaProcessor {
        // Use the schedulerx logger to collect logs
        private static final Logger LOGGER = LogManager.getLogger("schedulerx");
    
        @Autowired
        private TestService testService;
    
        @Override
        public ProcessResult process(JobContext context) throws Exception {
            String parameters = context.getJobParameters();
            String tokens[] = parameters.split(" ");
            int a = Integer.valueOf(tokens[0]);
            int b = Integer.valueOf(tokens[1]);
            int c = testService.doDivision(a, b);
            LOGGER.info("testService.doDivision finished, a={}, b={}, c={}", a, b, c);
            if (c < 0) {
                return new ProcessResult(false, "result=" + c);
            }
            return new ProcessResult(true);
        }
    
    }
  2. Crie a classe de serviço:

    package com.hxm.test.service;
    
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    import org.springframework.stereotype.Service;
    
    @Service("testService")
    public class TestServiceImpl implements TestService {
        // Use the schedulerx logger to collect logs
        private static final Logger LOGGER = LogManager.getLogger("schedulerx");
    
        @Override
        public int doDivision(int a, int b) {
            try {
                 LOGGER.info("start to do division c = " + a + "/" + b);
                 int c = a/b;
                 LOGGER.info("c=" + c);
                 return c;
            } catch (Exception e) {
                LOGGER.error("", e);
            }
            return -1;
        }
    
    }
  3. Configure o job no console do SchedulerX. Por exemplo, defina os parâmetros do job como 1 0 para acionar um erro de divisão por zero.

    Job configuration for division-by-zero demo

  4. Execute o job uma vez e abra o painel Task instance records para visualizar os logs. O log mostra que o job falhou porque TestServiceImpl lançou uma exceção "by zero".

    Log showing the division-by-zero error

Diagnosticar uma falha de job distribuído

Jobs distribuídos no SchedulerX 2.0 despacham subtarefas para vários workers visando o processamento em lote. Se uma subtarefa falhar, use os logs para identificar qual tarefa específica falhou e o motivo.

  1. Crie um job distribuído que despache subtarefas e grave logs com o logger schedulerx:

    package com.hxm.test.processor;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import com.alibaba.schedulerx.worker.domain.JobContext;
    import com.alibaba.schedulerx.worker.processor.MapJobProcessor;
    import com.alibaba.schedulerx.worker.processor.ProcessResult;
    
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    
    public class TestMapJobProcessor extends MapJobProcessor {
        private static final Logger LOGGER = LogManager.getLogger("schedulerx");
    
        @Override
        public ProcessResult process(JobContext context) throws Exception {
            String taskName = context.getTaskName();
            String parameter = context.getJobParameters();
            int dispatchNum = Integer.valueOf(parameter);
            if (isRootTask(context)) {
                LOGGER.info("start root task");
                List<String> msgList = new ArrayList<>();
                for (int i = 0; i <= dispatchNum; i++) {
                    msgList.add("msg_" + i);
                }
    
                return map(msgList, "Level1Dispatch");
            } else if (taskName.equals("Level1Dispatch")) {
                String task = (String)context.getTask();
                if (task.equals("msg_23")) {
                    LOGGER.error("msg={}, failed", task);
                    return new ProcessResult(false);
                } else {
                    LOGGER.info("msg={}, success", task);
                }
                return new ProcessResult(true);
            }
            return new ProcessResult(false);
        }
    }
  2. Configure o job no console do SchedulerX e acione-o.

    Distributed job configuration

  3. Abra os logs do job conforme descrito em Visualizar logs de jobs.

  4. Pesquise palavras-chave (como failed ou error) para localizar a subtarefa com falha e sua causa raiz.