All Products
Search
Document Center

Microservices Engine:Integrasikan Simple Log Service dengan SchedulerX 2.0

Last Updated:Mar 12, 2026

Saat pekerjaan gagal atau berperilaku tidak sesuai harapan, Anda memerlukan log eksekusi untuk mengidentifikasi akar permasalahan. Dengan mengintegrasikan Simple Log Service ke SchedulerX 2.0, Anda dapat mengumpulkan log eksekusi pekerjaan—termasuk log pekerjaan terdistribusi—dan melihatnya langsung di Konsol SchedulerX. Tambahkan appender Log4j 2, Log4j, atau Logback untuk mulai mengumpulkan log dari pekerjaan yang dipicu.

Prasyarat

Sebelum memulai, pastikan Anda telah:

  • Membuat namespace di SchedulerX

  • Sebuah kelompok aplikasi yang dibuat di SchedulerX

  • Mengaktifkan Edisi Profesional SchedulerX 2.0 dengan Simple Log Service

Activate Simple Log Service
Catatan

Simple Log Service menyimpan log hingga dua minggu. Log yang kedaluwarsa akan dihapus secara otomatis.

Cara kerja

  1. Konfigurasikan appender log SchedulerX dalam framework logging Anda (Log4j 2, Log4j, atau Logback).

  2. Dalam kode pekerjaan Anda, tulis log menggunakan logger bernama schedulerx.

  3. Saat pekerjaan dijalankan, SchedulerX mengumpulkan log tersebut dan menampilkannya di konsol.

Pilih metode pengumpulan log

SchedulerX mendukung dua metode pengumpulan log. Pilih salah satu sebelum mengonfigurasi appender.

MetodeMengumpulkanPaling cocok untukKompromi
Hanya log pekerjaanLog yang ditulis ke logger schedulerxTroubleshooting spesifik pada pekerjaan tertentuMemerlukan logger khusus dalam kode Anda
Semua log layananSemua log aplikasiVisibilitas penuh terhadap aplikasiMencampur log pekerjaan dengan log layanan, sehingga mengurangi efisiensi kueri

Perbarui agen SchedulerX

Perbarui agen SchedulerX ke versi terbaru. Untuk nomor versi terbaru, lihat Catatan Rilis.

Tambahkan dependensi berikut ke file pom.xml Anda (contoh Spring Boot Starter):

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

Konfigurasikan appender log

Pilih framework logging Anda di bawah ini. Setiap framework mendukung kedua metode pengumpulan log.

Log4j 2

Kumpulkan hanya log pekerjaan

  1. Tambahkan appender dan logger khusus ke file konfigurasi Log4j 2 Anda:

    <?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. Dalam kelas pekerjaan Anda, buat logger bernama schedulerx dan gunakan untuk menulis log:

    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 {
        // Gunakan "schedulerx" sebagai nama logger
        private static final Logger logger = LoggerFactory.getLogger("schedulerx");
    
        @Override
        public ProcessResult process(JobContext context) throws Exception {
            logger.info("hello HelloWorldJob3");
            return new ProcessResult(true);
        }
    
    }

Kumpulkan semua log layanan

Tambahkan appender schedulerxLog ke root logger. Semua log aplikasi kemudian dikumpulkan oleh SchedulerX.

Catatan

Pendekatan ini mencampur log layanan dengan log pekerjaan, yang dapat menyulitkan troubleshooting dan mengurangi efisiensi kueri.

<?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

Kumpulkan hanya log pekerjaan

  1. Tambahkan appender dan logger khusus ke file log4j.properties Anda:

    log4j.rootLogger = INFO,console
    log4j.logger.schedulerx=schedulerxLog
    log4j.appender.schedulerxLog=com.alibaba.schedulerx.worker.log.appender.SchedulerxLog4jAppender
  2. Dalam kelas pekerjaan Anda, buat logger bernama schedulerx dan gunakan untuk menulis log. Kode Java identik dengan contoh Log4j 2 di atas — gunakan LoggerFactory.getLogger("schedulerx").

Kumpulkan semua log layanan

Tambahkan appender schedulerxLog ke root logger dalam log4j.properties:

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

Logback

Catatan

Kelas SchedulerxLogbackAppender berada dalam paket schedulerx2-worker.jar. Pastikan agen SchedulerX telah diperbarui ke versi terbaru. Untuk versi terbaru, lihat Catatan Rilis.

Kumpulkan hanya log pekerjaan

  1. Tambahkan appender dan logger khusus ke file logback.xml Anda:

    <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. Dalam kelas pekerjaan Anda, buat logger bernama schedulerx dan gunakan untuk menulis log. Kode Java identik dengan contoh Log4j 2 di atas — gunakan LoggerFactory.getLogger("schedulerx").

Kumpulkan semua log layanan

Tambahkan appender schedulerxLog ke root logger dalam 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>

Lihat log pekerjaan

  1. Masuk ke Konsol MSE SchedulerX.

  2. Di panel navigasi sebelah kiri, klik Task Management.

  3. Temukan pekerjaan target dan pilih more > Historical records di kolom Operation.

  4. Di panel Task instance records, temukan instans pekerjaan target dan klik Log di kolom Operation.

Bidang log

Setiap entri log berisi bidang-bidang berikut:

BidangDeskripsi
ipAlamat IP worker yang menghasilkan log
executionIdID eksekusi dalam format ${jobId}_${jobInstanceId}_${taskId}
levelLevel log (misalnya, INFO atau ERROR)
logIsi log
throwableJejak stack exception (hanya muncul saat terjadi error)
timeTimestamp saat log dihasilkan

Kueri log historis

SchedulerX hanya menyimpan 60 catatan eksekusi terbaru per instans pekerjaan. Untuk mencari catatan yang lebih lama, klik Log Query di panel navigasi sebelah kiri Konsol SchedulerX. Di halaman Log Query, filter berdasarkan job ID, kata kunci, atau rentang waktu.

Contoh troubleshooting

Diagnosis kegagalan layanan

Setelah mengintegrasikan Simple Log Service, SchedulerX mengumpulkan log pekerjaan dan log layanan, termasuk exception. Contoh berikut menunjukkan cara mengidentifikasi error pembagian dengan nol dalam pemanggilan layanan.

  1. Buat pekerjaan yang memanggil metode layanan dan mencatat log menggunakan 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 {
        // Gunakan logger schedulerx untuk mengumpulkan log
        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. Buat kelas layanan:

    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 {
        // Gunakan logger schedulerx untuk mengumpulkan log
        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. Konfigurasikan pekerjaan di Konsol SchedulerX. Misalnya, atur parameter pekerjaan menjadi 1 0 untuk memicu error pembagian dengan nol.

    Job configuration for division-by-zero demo

  4. Jalankan pekerjaan sekali, lalu buka panel Task instance records dan lihat log-nya. Log tersebut menunjukkan bahwa pekerjaan gagal karena TestServiceImpl melemparkan exception "by zero".

    Log showing the division-by-zero error

Diagnosis kegagalan pekerjaan terdistribusi

Pekerjaan terdistribusi di SchedulerX 2.0 mendistribusikan subtugas ke beberapa worker untuk pemrosesan batch. Jika subtugas gagal, gunakan log untuk mengidentifikasi tugas spesifik yang gagal beserta penyebabnya.

  1. Buat pekerjaan terdistribusi yang mendistribusikan subtugas dan mencatat log menggunakan 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. Konfigurasikan pekerjaan di Konsol SchedulerX dan picu eksekusinya.

    Distributed job configuration

  3. Buka log pekerjaan seperti dijelaskan dalam Lihat log pekerjaan.

  4. Cari kata kunci (seperti failed atau error) untuk menemukan subtugas yang gagal dan akar permasalahannya.