Todos los productos
Search
Centro de documentos

Microservices Engine:Integrate Simple Log Service with SchedulerX 2.0

Última actualización: Sep 05, 2026

Cuando los trabajos fallan o presentan un comportamiento inesperado, se requieren registros de ejecución para identificar la causa raíz. Al integrar Simple Log Service con SchedulerX 2.0, puede recopilar registros de ejecución de trabajos, incluidos los de trabajos distribuidos, y consultarlos directamente en la consola de SchedulerX. Agregue un appender de Log4j 2, Log4j o Logback para comenzar a recopilar registros de los trabajos activados.

Requisitos previos

Antes de empezar, asegúrese de contar con lo siguiente:

  • Un namespace creado en SchedulerX

  • Un application group creado en SchedulerX

  • SchedulerX 2.0 Professional Edition con Simple Log Service activado

Activate Simple Log Service

Nota

Simple Log Service conserva los registros durante un máximo de dos semanas. Los registros caducados se eliminan automáticamente.

Funcionamiento

  1. Configure un appender de registros de SchedulerX en su framework de registros (Log4j 2, Log4j o Logback).

  2. En el código de su trabajo, escriba registros mediante un logger llamado schedulerx.

  3. Cuando se ejecuta un trabajo, SchedulerX recopila los registros y los muestra en la consola.

Elección del método de recopilación de registros

SchedulerX admite dos métodos de recopilación de registros. Elija uno antes de configurar el appender.

Método

Recopila

Recomendado para

Consideraciones

Solo registros de trabajos

Registros escritos en el logger schedulerx

Solución de problemas específica de trabajos concretos

Requiere un logger dedicado en el código

Todos los registros del servicio

Todos los registros de la aplicación

Visibilidad completa de la aplicación

Combina registros de trabajos y del servicio, lo que reduce la eficiencia de las consultas

Actualización del agente de SchedulerX

Actualice el agente de SchedulerX a la versión más reciente. Para consultar el número de la última versión, consulte Release notes.

Agregue la siguiente dependencia a su archivo pom.xml (ejemplo con Spring Boot Starter):

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

Configuración de un appender de registros

Seleccione su framework de registros a continuación. Cada framework es compatible con ambos métodos de recopilación de registros.

Log4j 2

Recopilación exclusiva de registros de trabajos

  1. Agregue un appender y un logger dedicado a su archivo de configuración de 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. En la clase de su trabajo, cree un logger llamado schedulerx y utilícelo para escribir registros:

    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);
        }
    
    }

Recopilación de todos los registros del servicio

Agregue el appender schedulerxLog al logger raíz. De este modo, SchedulerX recopilará todos los registros de la aplicación.

Nota

Este enfoque combina los registros del servicio con los de los trabajos, lo que puede dificultar la solución de problemas y reducir la eficiencia de las 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

Recopilación exclusiva de registros de trabajos

  1. Agregue un appender y un logger dedicado a su archivo log4j.properties:

    log4j.rootLogger = INFO,console
    log4j.logger.schedulerx=schedulerxLog
    log4j.appender.schedulerxLog=com.alibaba.schedulerx.worker.log.appender.SchedulerxLog4jAppender
  2. En la clase de su trabajo, cree un logger llamado schedulerx y utilícelo para escribir registros. El código Java es idéntico al ejemplo anterior de Log4j 2; use LoggerFactory.getLogger("schedulerx").

Recopilación de todos los registros del servicio

Agregue el appender schedulerxLog al logger raíz en log4j.properties:

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

Logback

Nota

La clase SchedulerxLogbackAppender se encuentra en el paquete schedulerx2-worker.jar. Asegúrese de que el agente de SchedulerX esté actualizado a la versión más reciente. Para consultar la última versión, consulte Release notes.

Recopilación exclusiva de registros de trabajos

  1. Agregue un appender y un logger dedicado a su archivo 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. En la clase de su trabajo, cree un logger llamado schedulerx y utilícelo para escribir registros. El código Java es idéntico al ejemplo anterior de Log4j 2; use LoggerFactory.getLogger("schedulerx").

Recopilación de todos los registros del servicio

Agregue el appender schedulerxLog al logger raíz en 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>

Consulta de registros de trabajos

  1. Inicie sesión en la consola de MSE SchedulerX.

  2. En el panel de navegación izquierdo, haga clic en Task Management.

  3. Localice el trabajo deseado y seleccione more > Historical records en la columna Operation.

  4. En el panel Task instance records, localice la instancia de trabajo correspondiente y haga clic en Log dentro de la columna Operation.

Campos de registro

Cada entrada de registro contiene los siguientes campos:

Campo

Descripción

ip

Dirección IP del worker que generó el registro

executionId

ID de ejecución con el formato ${jobId}_${jobInstanceId}_${taskId}

level

Nivel de registro (por ejemplo, INFO o ERROR)

log

Contenido del registro

throwable

Traza de pila de excepciones (presente solo cuando ocurre un error)

time

Marca de tiempo en la que se generó el registro

Consulta de registros históricos

SchedulerX conserva únicamente los 60 registros de ejecución más recientes por instancia de trabajo. Para buscar registros anteriores, haga clic en Log Query en el panel de navegación izquierdo de la consola de SchedulerX. En la página Log Query, filtre por ID de trabajo, palabra clave o rango de tiempo.

Ejemplos de solución de problemas

Diagnóstico de un fallo en el servicio

Tras integrar Simple Log Service, SchedulerX recopila tanto los registros de trabajos como los del servicio, incluidas las excepciones. El siguiente ejemplo muestra cómo identificar un error de división por cero en una llamada de servicio.

  1. Cree un trabajo que invoque un método de servicio y registre eventos con el 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. Cree la clase de servicio:

    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 el trabajo en la consola de SchedulerX. Por ejemplo, establezca los parámetros del trabajo en 1 0 para provocar un error de división por cero.

    Job configuration for division-by-zero demo

  4. Ejecute el trabajo una vez y luego abra el panel Task instance records para consultar los registros. El registro indica que el trabajo falló porque TestServiceImpl lanzó una excepción "by zero".

    Log showing the division-by-zero error

Diagnóstico de un fallo en un trabajo distribuido

Los trabajos distribuidos en SchedulerX 2.0 asignan subtareas a varios workers para su procesamiento por lotes. Si una subtarea falla, utilice los registros para identificar qué tarea específica falló y por qué.

  1. Cree un trabajo distribuido que asigne subtareas y registre eventos con el 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 el trabajo en la consola de SchedulerX y actívelo.

    Distributed job configuration

  3. Abra los registros del trabajo tal como se describe en View job logs.

  4. Busque palabras clave (como failed o error) para localizar la subtarea fallida y su causa raíz.