Dalam pengembangan aplikasi Node.js, manajemen log adalah salah satu aspek yang sangat penting untuk menjaga server tetap stabil, memudahkan debugging, dan memastikan aplikasi berjalan dengan lancar.
Jika tidak dikelola dengan baik, log bisa menumpuk, memakan ruang disk, dan bahkan menyebabkan server menjadi lambat atau crash. Artikel ini akan membahas bagaimana mengelola log Node.js secara efektif menggunakan PM2 dan modul pm2-logrotate, lengkap dengan konfigurasi ringan untuk server kecil.
Contents
- 1 1. Pengenalan PM2
- 2 2. Masalah Log yang Tidak Terkelola
- 3 3. Pendekatan Manual untuk Menghapus Log
- 4 4. Solusi Otomatis: pm2-logrotate
- 5 5. Instalasi pm2-logrotate
- 6 6. Konfigurasi Ringan untuk Server Kecil
- 7 7. Menghapus Log Lama Sekarang
- 8 8. Mengecek Log
- 9 9. Tips Opsional
- 10 10. Ringkasan Keuntungan pm2-logrotate
- 11 11. Praktik Terbaik
- 12 12. Kesimpulan
1. Pengenalan PM2
PM2 adalah process manager untuk aplikasi Node.js yang populer digunakan di server produksi. PM2 menawarkan banyak fitur, termasuk:
- Menjalankan aplikasi Node.js sebagai daemon (latar belakang)
- Auto-restart jika aplikasi crash
- Monitoring penggunaan CPU dan memori
- Logging otomatis stdout dan stderr
- Integrasi dengan log rotation melalui modul tambahan
Salah satu keuntungan utama PM2 adalah kemampuannya untuk mengelola proses Node.js secara otomatis, termasuk pembuatan log file untuk setiap aplikasi.
2. Masalah Log yang Tidak Terkelola
Secara default, PM2 menyimpan semua log aplikasi Node.js di folder:
~/.pm2/logs/
Contohnya, jika kita menjalankan aplikasi mt-server, maka PM2 akan membuat file log seperti:
mt-server-out-0.log
mt-server-error-0.log
mt-server-out-1.log
mt-server-error-1.log
...
Setiap kali aplikasi di-restart atau PM2 restart proses, file log baru akan dibuat. Tanpa mekanisme pembersihan, file log ini akan terus menumpuk, dan lama-kelamaan bisa memakan beberapa GB ruang disk, sehingga berisiko mengganggu performa server.
Masalah umum yang terjadi jika log tidak dikelola:
- Disk penuh → server bisa tidak stabil
- Sulit menemukan log terbaru → debugging menjadi lambat
- File log besar → proses bacaan log menjadi lambat
- Crash server → beberapa aplikasi Node.js sensitif terhadap disk penuh
3. Pendekatan Manual untuk Menghapus Log
Sebelum adanya pm2-logrotate, banyak pengembang menggunakan cara manual:
- Menghapus log secara berkala:
rm -f ~/.pm2/logs/mt-server-*.log - Menggunakan cron job untuk otomatis:
0 1 * * * find ~/.pm2/logs/ -name "*.log" -type f -mtime +7 -exec rm {} \; - Memindahkan log lama ke folder archive:
mkdir -p ~/.pm2/logs/archive mv ~/.pm2/logs/mt-server-*.log ~/.pm2/logs/archive/
Pendekatan ini cukup sederhana, tetapi memiliki kelemahan:
- Membutuhkan script atau cron job tambahan
- Tidak otomatis untuk setiap aplikasi baru
- Bisa salah hapus jika folder log tidak dikontrol
- Tidak ada kontrol ukuran file log → file log tetap bisa sangat besar sebelum dihapus
4. Solusi Otomatis: pm2-logrotate
Untuk mengatasi masalah ini, PM2 menyediakan modul tambahan bernama pm2-logrotate. Modul ini memungkinkan kita:
- Memutar (rotate) log secara otomatis
- Menghapus log lama berdasarkan jumlah file (
retain) - Mengatur ukuran file log maksimum (
max_size) - Mengatur interval pemeriksaan log (
workerInterval) - Mengatur rotasi harian otomatis (
rotateInterval) - Mengelola log modul PM2 juga (
rotateModule)
Dengan pm2-logrotate, pengelolaan log menjadi otomatis, efisien, dan aman untuk server produksi.
5. Instalasi pm2-logrotate
Untuk menginstal modul pm2-logrotate:
pm2 install pm2-logrotate
Setelah modul terpasang, PM2 akan secara otomatis memulai worker untuk mengelola log setiap beberapa detik sesuai konfigurasi default.
Untuk mengecek modul yang terpasang:
pm2 module:list
Kamu akan melihat sesuatu seperti:
┌────┬──────────────────────────────┬───────────────┬──────────┬──────────┬──────┬──────────┬──────────┬──────────┐
│ id │ module │ version │ pid │ status │ ↺ │ cpu │ mem │ user │
├────┼──────────────────────────────┼───────────────┼──────────┼──────────┼──────┼──────────┼──────────┼──────────┤
│ 21 │ pm2-logrotate │ 3.0.0 │ 1628462 │ online │ 0 │ 0% │ 28.6mb │ root │
└────┴──────────────────────────────┴───────────────┴──────────┴──────────┴──────┴──────────┴──────────┴──────────┘
Status online berarti modul siap digunakan.
6. Konfigurasi Ringan untuk Server Kecil
Bagi server kecil dengan memori terbatas, kita bisa mengatur pm2-logrotate agar ringan:
- Worker interval 7 menit → PM2 memeriksa log setiap 420 detik
- Ukuran log maksimal 2MB → file log diputar jika melebihi 2MB
- Jumlah file log disimpan 3 file terakhir → otomatis hapus sisanya
- Tanpa kompresi → lebih ringan, meski memakan sedikit space
- Rotasi harian jam 00:00 → file log baru dibuat setiap hari
- Format timestamp → memudahkan identifikasi log
Perintah Konfigurasi:
pm2 set pm2-logrotate:max_size 2M
pm2 set pm2-logrotate:retain 3
pm2 set pm2-logrotate:compress false
pm2 set pm2-logrotate:workerInterval 420
pm2 set pm2-logrotate:dateFormat YYYY-MM-DD_HH-mm-ss
pm2 set pm2-logrotate:rotateInterval '0 0 * * *'
pm2 set pm2-logrotate:rotateModule true
Dengan konfigurasi ini:
- Log tidak akan menumpuk
- File lama otomatis dihapus sesuai
retain - Worker interval cukup ringan untuk server kecil
- Tidak perlu cron job tambahan
7. Menghapus Log Lama Sekarang
Agar server mulai dari kondisi bersih, kita bisa flush log lama:
pm2 flush
- Menghapus semua log lama saat ini
- File log baru akan otomatis dibuat saat aplikasi masih berjalan
8. Mengecek Log
Setelah konfigurasi:
ls -lh ~/.pm2/logs/
Kamu akan melihat file log dengan timestamp sesuai format yang sudah diatur:
mt-server-out-2025-12-10_00-00-00.log
mt-server-error-2025-12-10_00-00-00.log
Hanya 3 file terakhir yang tersimpan, sesuai retain.
9. Tips Opsional
- Kompres log lama (untuk server dengan space terbatas):
pm2 set pm2-logrotate:compress true
- Menghapus log berdasarkan umur (misal >7 hari) tetap bisa menggunakan cron job:
0 1 * * * find ~/.pm2/logs/ -name "*.log" -type f -mtime +7 -exec rm {} \;
- Memantau penggunaan disk:
du -sh ~/.pm2/logs/
- Pastikan space tetap aman
- Menyesuaikan worker interval:
- Server kecil → 420 detik (7 menit)
- Server besar → 60 detik atau lebih cepat
10. Ringkasan Keuntungan pm2-logrotate
- Otomatis → log diputar dan dihapus sesuai konfigurasi
- Ringan → dapat diatur untuk server kecil
- Kontrol ukuran log → mencegah log besar mengganggu server
- Kontrol jumlah file log → mencegah menumpuk
- Rotasi harian → log baru setiap hari
- Tidak perlu cron job → opsional untuk penghapusan umur log
Dengan pm2-logrotate, pengelolaan log menjadi sederhana, otomatis, dan aman.
11. Praktik Terbaik
- Selalu flush log setelah konfigurasi
pm2 flush - Sesuaikan
max_sizedengan kebutuhan aplikasi- Aplikasi dengan banyak traffic → ukuran lebih besar
- Server kecil → ukuran kecil (2–5MB)
- Gunakan
retainkecil untuk server dengan disk terbatas- 3–5 file log terakhir sudah cukup untuk debugging
- Gunakan timestamp jelas (
dateFormat) agar mudah tracking - Pertimbangkan compress jika server memiliki banyak aplikasi
- Pantau penggunaan disk secara berkala
du -sh ~/.pm2/logs/ - Rotasi juga modul PM2 (
rotateModule true)- Agar log modul PM2 tidak menumpuk
12. Kesimpulan
Mengelola log Node.js dengan PM2 tanpa strategi rotasi bisa menjadi masalah serius pada server produksi, terutama jika log menumpuk dan memakan disk. Dengan menggunakan pm2-logrotate, kita bisa:
- Memutar log secara otomatis
- Menghapus log lama sesuai jumlah file (
retain) - Mengontrol ukuran log (
max_size) - Menjaga server tetap ringan dan aman
Konfigurasi ringan untuk server kecil, seperti:
- File log maksimal 2MB
- Hanya menyimpan 3 file log terakhir
- Worker interval 7 menit
- Tanpa kompresi
… sudah cukup untuk menjaga log tetap terkontrol tanpa tambahan cron job.
Dengan kombinasi ini, server Node.js kamu akan lebih stabil, log tetap teratur, dan developer bisa fokus pada aplikasi tanpa khawatir log menumpuk.
