1. Apa itu Modul logging pada Python
Modul logging
pada Python adalah alat standar yang digunakan untuk mencatat status operasional program dan informasi kesalahan, berguna untuk debugging dan pemantauan selama operasional. Perbedaannya dengan pernyataan print
adalah modul logging
multifungsi dan memungkinkan kontrol detail atas level log, tujuan output, dan format. Dengan ini, pengembang dapat memahami anomali atau status program secara efisien.
Jenis dan Kegunaan Log Level
- DEBUG: Informasi debugging mendetail. Utamanya digunakan selama tahap pengembangan.
- INFO: Informasi operasional umum. Digunakan untuk konfirmasi operasi normal.
- WARNING: Masalah minor atau catatan. Tidak memengaruhi operasional program, tetapi menunjukkan potensi masalah.
- ERROR: Pesan kesalahan ketika sebagian fungsi tidak beroperasi dengan normal. Menunjukkan situasi yang mengganggu eksekusi program.
- CRITICAL: Kesalahan fatal. Menunjukkan masalah kritis yang menyebabkan seluruh eksekusi program tidak dapat dilanjutkan.
Dengan menggunakan setiap level log dengan tepat, kualitas informasi yang didapat dari log dapat ditingkatkan, memungkinkan debugging dan pemantauan yang efisien.
2. Cara Dasar Menggunakan logging
Mari kita lihat cara dasar untuk mengeluarkan log menggunakan modul logging
.
import logging
# ログレベルとフォーマットを設定
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
# 各レベルでのログ出力
logging.debug('デバッグ情報: 詳細な診断情報')
logging.info('情報メッセージ: 正常な動作の確認')
logging.warning('警告メッセージ: 注意が必要な状態')
logging.error('エラーメッセージ: 問題が発生')
logging.critical('クリティカルメッセージ: システムの停止')
Dengan logging.basicConfig()
, kita dapat mengatur tujuan output log (standar ke output standar), level log, dan format. Dalam contoh di atas, karena diatur level=logging.DEBUG
, semua log dengan level DEBUG atau lebih tinggi akan ditampilkan.
3. Kustomisasi Tujuan Output dan Format Log
Dimungkinkan juga untuk mengubah tujuan output default atau mengkustomisasi format log. Misalnya, untuk mengeluarkan log ke file, gunakan FileHandler
.
Output ke File dan Format
import logging
# ファイルハンドラの設定
file_handler = logging.FileHandler('app.log')
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
# ロガーの設定
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logger.addHandler(file_handler)
# ログの出力
logger.debug('ファイルへのデバッグ情報')
logger.info('ファイルへの情報メッセージ')
Dalam kode di atas, log dikeluarkan ke `app.log` menggunakan `FileHandler`. Pesan log akan ditulis berdasarkan format yang ditentukan oleh `Formatter`.
4. Rotasi File Log
Untuk operasional jangka panjang, rotasi file log penting agar file log tidak menjadi terlalu besar. Dengan menggunakan RotatingFileHandler
, ukuran file log dan jumlah file dapat dikontrol.
Contoh Penggunaan RotatingFileHandler
import logging
from logging.handlers import RotatingFileHandler
# ローテーションハンドラの設定
handler = RotatingFileHandler('app.log', maxBytes=5000, backupCount=3)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
# ロガーの設定
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logger.addHandler(handler)
# ログの出力
for i in range(100):
logger.debug(f'ローテーションテスト {i}')
Dalam kode ini, `maxBytes` diatur ke 5000 byte untuk ukuran maksimum file log, dan `backupCount` diatur ke 3 untuk jumlah file backup. Jika file log melebihi ukuran yang ditentukan, log akan ditulis ke file baru, dan file lama akan dicadangkan.

5. Output File untuk Setiap Level Log
Dengan mengeluarkan log untuk setiap level log ke file yang berbeda, keterbacaan log dan efisiensi analisis dapat ditingkatkan. Ini dapat dilakukan dengan menggunakan filter kustom dan beberapa FileHandler
.
Contoh Output File untuk Setiap Level Log
import logging
class ErrorFilter(logging.Filter):
def filter(self, record):
return record.levelno == logging.ERROR
# ERRORレベルのログを別ファイルに出力
error_handler = logging.FileHandler('error.log')
error_handler.setLevel(logging.ERROR)
error_handler.addFilter(ErrorFilter())
error_handler.setFormatter(formatter)
# ロガーの設定
logger.addHandler(error_handler)
# ログの出力
logger.error('ERRORレベルのログがファイルに出力されます')
Dalam contoh ini, kelas `ErrorFilter` dibuat untuk memfilter hanya log level ERROR, dan dikeluarkan ke `error.log`. Dengan demikian, log kesalahan saja dapat dipisahkan ke file lain.
6. Praktik Terbaik dan Catatan Penting
Untuk memanfaatkan log dengan baik, perlu mempertimbangkan praktik terbaik dan catatan penting berikut.
Penggunaan Log Level yang Tepat
- Selama pengembangan, manfaatkan level
DEBUG
untuk mencatat informasi mendetail, dan selama operasional, beralih ke levelINFO
atauWARNING
untuk mencatat informasi penting saja. - Output log yang berlebihan dapat menyebabkan penurunan performa, jadi pastikan hanya informasi yang diperlukan yang dicatat.
Keamanan dan Privasi Log
- Berhati-hatilah agar tidak mencatat informasi pribadi atau informasi rahasia di log. Langkah-langkah seperti masking data mungkin diperlukan jika perlu.
- Atur izin file log dengan tepat untuk mencegah akses yang tidak sah.
7. Ringkasan
Modul logging
sangat berguna untuk mencatat status operasional program secara efisien, membantu dalam debugging dan operasional. Dengan mengatur level log, tujuan output, format, rotasi, dan lain-lain dengan tepat, serta memahami status operasional program secara mendetail, dapat mengarah pada deteksi dini dan penyelesaian masalah. Manfaatkan praktik terbaik dan terapkan manajemen log yang tepat.