Panduan Lengkap Modul Python Logging

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 level INFO atau WARNING 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.

年収訴求