Traffine I/O

Bahasa Indonesia

2023-03-10

Logging di Python

Apa itu Logging

Logging merupakan bagian penting dalam pengembangan perangkat lunak, karena memungkinkan pengembang untuk melacak dan merekam peristiwa yang terjadi dalam kode mereka. Di Python, logging adalah proses penangkapan dan perekaman data yang membantu pengembang memahami bagaimana program mereka berjalan dan bagaimana perilakunya dalam kondisi yang berbeda.

Pada intinya, logging melibatkan penangkapan dan perekaman peristiwa yang terjadi dalam program, seperti kesalahan, peringatan, dan pesan informasi. Data ini kemudian disimpan dalam file log yang dapat digunakan untuk tujuan debugging, troubleshooting, dan auditing.

Mengapa kita membutuhkan Logging di Python

Ada banyak alasan mengapa logging penting dalam Python. Salah satu alasan utamanya adalah karena memungkinkan pengembang untuk dengan cepat mengidentifikasi dan mendiagnosis masalah dalam kode mereka. Dengan menangkap dan merekam peristiwa saat terjadi, pengembang dapat melihat di mana kesalahan terjadi, kondisi apa yang menyebabkannya, dan seberapa sering terjadi. Informasi ini kemudian dapat digunakan untuk membuat perbaikan pada kode dan mencegah masalah di masa depan.

Logging juga penting untuk tujuan keamanan. Dengan menangkap dan merekam peristiwa yang terjadi dalam program, pengembang dapat mengidentifikasi ancaman keamanan potensial dan mengambil langkah-langkah untuk menguranginya. Misalnya, jika program mencatat upaya login yang gagal, pengembang dapat menggunakan data tersebut untuk mengidentifikasi pola aktivitas yang mencurigakan dan mengambil tindakan untuk melindungi sistem dari akses yang tidak sah.

Level Logging

Level-logging adalah konsep kategorisasi dari event yang ditangkap dan direkam pada file log pada Python logging. Setiap level-logging memiliki tujuan tersendiri dan memahami cara penggunaannya dengan benar adalah bagian penting dari logging yang efektif.

  • DEBUG
    Ini adalah level-logging terendah dan biasanya digunakan untuk menangkap informasi terperinci tentang bagaimana program bekerja di dalamnya. Log debug umumnya hanya berguna untuk pengembang yang mencoba mendiagnosis masalah atau memecahkan masalah, dan tidak disarankan untuk lingkungan produksi.

  • INFO
    Level-logging ini digunakan untuk menangkap informasi umum tentang operasi program. Info log dapat berguna untuk melacak perilaku keseluruhan program dan memberikan wawasan tentang bagaimana performanya.

  • WARNING
    Level ini digunakan untuk menangkap event yang menunjukkan masalah atau kemungkinan masalah yang perlu diatasi. Log peringatan berguna untuk mengidentifikasi masalah yang mungkin tidak segera kritis, tetapi dapat menyebabkan masalah di kemudian hari.

  • ERROR
    Level-logging ini digunakan untuk menangkap event yang menunjukkan masalah atau kesalahan dalam program. Log kesalahan umumnya lebih serius daripada log peringatan, karena menunjukkan bahwa ada sesuatu yang salah dan perlu diatasi.

  • CRITICAL
    Ini adalah level logging tertinggi dan digunakan untuk menangkap event yang menunjukkan kegagalan kritis dalam program. Log kritis umumnya dicadangkan untuk situasi di mana program telah mengalami crash atau berhenti bekerja sama sekali.

Basic Logging di Python

Dalam Python, logging dasar adalah alat yang powerful untuk menangkap dan merekam kejadian yang terjadi dalam sebuah program. Dengan membuat objek logger dan menetapkan level logging-nya, para pengembang dapat dengan cepat mengidentifikasi dan menangani masalah saat terjadi, serta memastikan bahwa program mereka berjalan dengan lancar dan tanpa kesalahan.

Berikut adalah contoh kode yang menunjukkan cara mengimplementasikan logging dasar di Python:

python
import logging

# Buat objek logger
logger = logging.getLogger(__name__)

# Tetapkan level logging
logger.setLevel(logging.INFO)

# Buat file handler
handler = logging.FileHandler('example.log')

# Tetapkan format logging
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
handler.setFormatter(formatter)

# Tambahkan handler ke objek logger
logger.addHandler(handler)

# Log pesan
logger.info('Ini adalah pesan informasi')

Dalam contoh ini, pertama-tama kita membuat objek logger menggunakan fungsi logging.getLogger(), dan kita menetapkan level logging-nya menjadi INFO menggunakan metode setLevel(). Selanjutnya kita membuat file handler menggunakan fungsi logging.FileHandler(), yang menentukan nama file log yang akan dibuat. Kita juga menetapkan format logging menggunakan fungsi logging.Formatter(), yang menentukan tanggal, level logging, dan pesan yang akan disertakan dalam file log.

Kemudian, kita menambahkan file handler ke objek logger menggunakan metode addHandler(). Hal ini memberitahukan objek logger untuk menangkap dan merekam kejadian menggunakan file handler yang telah kita buat.

Akhirnya, kita mencatat sebuah pesan menggunakan metode logger.info(), yang menangkap pesan informasi dan merekamnya dalam file log.

Berikut adalah contoh output dari kode di atas:

2023-03-07 15:32:29,654 INFO Ini adalah pesan informasi

Seperti yang dapat Anda lihat, pesan log mencakup timestamp, level logging, dan pesan yang kita tentukan dalam format logging. Hal ini menyediakan informasi yang berharga yang dapat digunakan untuk mendiagnosis masalah dan menyelesaikan masalah dalam sebuah aplikasi Python.

Logging Lanjutan di Python

Logging lanjutan di Python melibatkan penggunaan handler untuk mengeluarkan log, memformat pesan log untuk menyertakan informasi tambahan, dan memutar file log untuk mengelola ukuran dan penyimpanan file. Berikut ini adalah contoh kode yang menunjukkan cara menerapkan logging lanjutan di Python:

python
import logging
import logging.handlers

# Buat objek logger
logger = logging.getLogger(__name__)

# Atur level logging
logger.setLevel(logging.INFO)

# Buat handler file rotasi
handler = logging.handlers.RotatingFileHandler('example.log', maxBytes=10000, backupCount=5)

# Atur format logging
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
handler.setFormatter(formatter)

# Tambahkan handler ke objek logger
logger.addHandler(handler)

# Log sebuah pesan
logger.info('Ini adalah pesan info')

Pada contoh di atas, kita membuat handler file rotasi menggunakan fungsi logging.handlers.RotatingFileHandler(), yang menentukan nama file log yang akan dibuat, ukuran maksimum file dalam byte sebelum file baru dibuat, dan jumlah file cadangan maksimum yang akan dipertahankan. Ini memungkinkan kita untuk mengelola ukuran dan penyimpanan file log kita, dan memastikan bahwa kita memiliki catatan peristiwa yang terjadi dalam program kita.

Kita juga memformat pesan log menggunakan fungsi logging.Formatter(), yang mencakup tanggal, level logging, dan pesan dalam file log. Ini menyediakan informasi tambahan yang dapat digunakan untuk mendiagnosis masalah dan menyelesaikan masalah.

Terakhir, kita mencatat pesan menggunakan metode logger.info(), yang menangkap pesan informasi dan mencatatnya dalam file log. Karena kita mengonfigurasi objek logger kita untuk menggunakan handler file rotasi, pesan ini akan ditambahkan ke file log dan file akan diputar sesuai kebutuhan untuk mengelola ukuran dan penyimpanannya.

Berikut ini adalah contoh output dari kode di atas:

2022-11-07 15:32:29,654 INFO Ini adalah pesan info

Seperti yang dapat Anda lihat, pesan log mencakup timestamp, level logging, dan pesan yang kita tentukan dalam format logging. Dengan menggunakan handler file rotasi, kita dapat memastikan bahwa file log kita tidak menjadi terlalu besar dan bahwa kita memiliki catatan peristiwa yang terjadi dalam aplikasi Python kita.

Mengapa tidak menggunakan print()

Di Python, print() dan logging adalah dua cara untuk menampilkan output atau pesan dari program. Namun, ada beberapa perbedaan signifikan antara keduanya.

Perbedaan utama adalah bahwa print() adalah cara sederhana dan langsung untuk menampilkan output di konsol atau terminal, sedangkan logging adalah cara yang lebih kokoh dan terstruktur untuk merekam peristiwa dan pesan yang terjadi selama eksekusi program.

Berikut adalah beberapa perbedaan kunci antara print() dan logging:

  • Keluaran Langsung vs. Ditunda
    Ketika Anda menggunakan print() untuk menampilkan output, keluaran ditampilkan secara langsung di konsol atau terminal. Namun, dengan logging, keluaran biasanya ditunda dan dicatat dalam file log untuk analisis nanti.

  • Tingkat Detail
    Dengan print(), Anda dapat menampilkan pesan atau nilai apa saja yang Anda inginkan. Dengan logging, Anda dapat menentukan tingkat detail untuk setiap pesan, dari informasi debugging hingga kesalahan kritis.

  • Keluaran Terstruktur
    logging menyediakan format keluaran yang lebih terstruktur daripada print(). Dengan logging, Anda dapat menentukan format setiap pesan log, termasuk pesan itu sendiri, tingkat logging, timestamp, dan informasi kontekstual lainnya.

  • Kemampuan untuk Dikonfigurasi
    logging sangat dapat dikonfigurasi, memungkinkan pengembang untuk menentukan pesan mana yang akan ditangkap, di mana merekam pesan tersebut, dan bagaimana pesan tersebut diformat. Dengan print(), Anda memiliki kendali yang jauh lebih sedikit atas bagaimana pesan ditampilkan.

Ada beberapa alasan mengapa logging lebih baik daripada print():

-Ketangguhan
Logging menyediakan cara yang lebih kokoh dan terstruktur untuk merekam peristiwa dan pesan yang terjadi selama eksekusi program. Hal ini memudahkan analisis dan diagnosis masalah, serta mengidentifikasi potensi ancaman keamanan.

  • Ketahanan
    Logging merekam pesan ke file, yang berarti bahwa pesan tersebut persisten dan dapat ditinjau nanti. Ini penting untuk pemecahan masalah dan debugging, serta untuk tujuan audit dan kepatuhan.

  • Scalability
    Ketika bekerja pada program yang besar atau kompleks, pernyataan print() dapat dengan cepat menjadi sangat banyak dan sulit untuk dikelola. Dengan logging, Anda dapat menentukan pesan mana yang akan ditangkap dan bagaimana merekamnya, yang membuatnya lebih mudah untuk mengelola volume pesan.

Referensi

https://docs.python.org/3/library/logging.html
https://realpython.com/python-logging/

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!