ctx.logger

Wrapper log berbasis pino, menyediakan log JSON terstruktur berkinerja tinggi. Direkomendasikan menggunakan ctx.logger sebagai pengganti console untuk pengumpulan dan analisis log yang lebih mudah.

Skenario Penggunaan

Semua skenario RunJS dapat menggunakan ctx.logger, untuk debugging, error tracking, performance analysis, dll.

Definisi Tipe

logger: pino.Logger;

ctx.logger adalah engine.logger.child({ module: 'flow-engine' }), yaitu pino child logger dengan konteks module.

Level Log

pino mendukung level berikut (dari tertinggi ke terendah):

LevelMethodDeskripsi
fatalctx.logger.fatal()Error fatal, biasanya menyebabkan proses keluar
errorctx.logger.error()Error, menunjukkan request atau operasi gagal
warnctx.logger.warn()Peringatan, menunjukkan risiko potensial atau situasi tidak normal
infoctx.logger.info()Informasi runtime umum
debugctx.logger.debug()Informasi debugging, untuk development
tracectx.logger.trace()Tracing detail, untuk diagnosis mendalam

Penulisan yang Direkomendasikan

Direkomendasikan menggunakan bentuk level(msg, meta): pesan di depan, objek metadata opsional di belakang.

ctx.logger.info('Block selesai dimuat');
ctx.logger.info('Operasi berhasil', { recordId: 456 });
ctx.logger.warn('Peringatan performa', { duration: 5000 });
ctx.logger.error('Operasi gagal', { userId: 123, action: 'create' });
ctx.logger.error('Request gagal', { err });

pino juga mendukung level(meta, msg) (objek di depan) atau level({ msg, ...meta }) (objek tunggal), dapat digunakan sesuai kebutuhan.

Contoh

Penggunaan Dasar

ctx.logger.info('Block selesai dimuat');
ctx.logger.warn('Request gagal, gunakan cache', { err });
ctx.logger.debug('Sedang menyimpan', { recordId: ctx.record?.id });

Menggunakan child() untuk Membuat Sub-logger

// Membuat sub-logger dengan konteks untuk logika saat ini
const log = ctx.logger.child({ scope: 'myBlock' });
log.info('Eksekusi langkah 1');
log.debug('Eksekusi langkah 2', { step: 2 });

Hubungan dengan console

Direkomendasikan langsung menggunakan ctx.logger untuk mendapatkan log JSON terstruktur. Jika terbiasa menggunakan console, dapat disesuaikan: console.logctx.logger.info, console.errorctx.logger.error, console.warnctx.logger.warn.

Format Log

pino menghasilkan output JSON terstruktur, setiap log berisi:

  • level: level log (numerik)
  • time: timestamp (milidetik)
  • msg: pesan log
  • module: tetap flow-engine
  • Field kustom lainnya (diteruskan melalui objek)

Hal yang Perlu Diperhatikan

  • Log adalah JSON terstruktur, untuk pengumpulan, pencarian, dan analisis yang lebih mudah
  • Sub-logger yang dibuat melalui child() juga direkomendasikan menggunakan penulisan level(msg, meta)
  • Sebagian environment runtime (seperti workflow) mungkin menggunakan cara output log yang berbeda

Terkait

  • pino — Library log dasar