DOLAR 43,7339 0.19%
EURO 51,9339 -0.02%
ALTIN 7.075,012,56
BITCOIN 0%
İstanbul
16°

AÇIK

SABAHA KALAN SÜRE

mthaber

mthaber

16 Haziran 2025 Pazartesi

Log Kaydı Tutan Profesyonel Script Yapımı

Log Kaydı Tutan Profesyonel Script Yapımı
0

BEĞENDİM

ABONE OL

Script Log kaydı tutmak, yazılım geliştirme süreçlerinde önemli bir uygulamadır. Hata ayıklama, sistem izleme, performans analizi ve güvenlik denetimleri gibi birçok amaç için loglar kullanılabilir. Python, log tutma işlemi için oldukça esnek ve güçlü araçlar sunar. logging modülü, Python’da log kaydı tutmak için yaygın olarak kullanılır ve profesyonel scriptlerde de sıklıkla tercih edilir.

Aşağıda, profesyonel bir scriptte log kaydı tutmanın nasıl yapılacağını, hangi tür log seviyelerinin kullanılacağını ve logların yönetilmesi için en iyi uygulamaları ele alacağız.

1. Python logging Modülü İle Temel Log Kaydı

Python’da log kaydı tutmak için en yaygın kullanılan modül logging’dir. Bu modül, log seviyeleri, çıktı formatı, dosya yönetimi gibi birçok özelliği içerir.

1.1. Temel Log Kaydı Yapma

İlk olarak, bir log kaydının nasıl tutulacağını gösterelim:

import logging

# Log seviyesini belirliyoruz
logging.basicConfig(level=logging.DEBUG, 
                    format='%(asctime)s - %(levelname)s - %(message)s', 
                    handlers=[logging.StreamHandler()])

# Farklı log seviyelerinde mesajlar
logging.debug("Bu bir DEBUG mesajıdır.")
logging.info("Bu bir INFO mesajıdır.")
logging.warning("Bu bir WARNING mesajıdır.")
logging.error("Bu bir ERROR mesajıdır.")
logging.critical("Bu bir CRITICAL mesajıdır.")

Bu basit örnekte, log seviyelerini (DEBUG, INFO, WARNING, ERROR, CRITICAL) kullanarak farklı önem derecelerinde mesajlar yazıyoruz. basicConfig fonksiyonu, logların biçimini ve hangi seviyeden sonra log kaydı yapılacağını belirler.

  • level=logging.DEBUG: DEBUG seviyesinden daha yüksek seviyelerdeki loglar kaydedilecektir.
  • format='%(asctime)s - %(levelname)s - %(message)s': Log mesajlarının tarih ve saat bilgisiyle birlikte seviyesini de içerecek şekilde formatı belirliyoruz.

2. Log Seviyeleri

Log kaydında kullanılan farklı seviyeler, log mesajının önem derecesini belirtir. Bu seviyeler, sistemdeki olayları daha iyi analiz etmenize olanak tanır.

  • DEBUG: Geliştiriciler için ayrıntılı bilgi. Çoğu zaman hata ayıklama amacıyla kullanılır.
  • INFO: Genel bilgilendirme mesajları. İşlem başarıyla tamamlandığında kullanılabilir.
  • WARNING: Olası problemlere dair uyarılar. Hala ciddi bir sorun değilse kullanılır.
  • ERROR: Bir hata oluştuğunda, işlem başarısız olduğunda kaydedilen mesajlar.
  • CRITICAL: Sistem çökmesine yol açabilecek ciddi hatalar.

3. Logları Dosyaya Yazma

Logları yalnızca ekrana yazmak yerine bir dosyaya da kaydedebilirsiniz. Bu, geçmiş olayları incelemek ve hata raporları oluşturmak için oldukça kullanışlıdır.

import logging

# Logları hem ekrana hem de dosyaya yazmak için basicConfig
logging.basicConfig(level=logging.DEBUG, 
                    format='%(asctime)s - %(levelname)s - %(message)s',
                    handlers=[logging.FileHandler('app.log'), logging.StreamHandler()])

logging.info("Bu bir dosyaya kaydedilen INFO mesajıdır.")
logging.error("Bu bir dosyaya kaydedilen ERROR mesajıdır.")

Bu örnekte, logging.FileHandler('app.log') kullanılarak logların bir dosyaya yazılması sağlanıyor. Böylece loglar, sadece terminalde değil, aynı zamanda bir dosyada da tutulmuş olur.

4. Logların Rotası ve Boyutu

Birçok durumda, log dosyasının boyutu arttıkça dosyanın yönetilmesi zorlaşabilir. Log dosyalarının boyutunun kontrol altında tutulması ve belirli aralıklarla yeni dosyaların oluşturulması için RotatingFileHandler kullanılabilir.

import logging
from logging.handlers import RotatingFileHandler

# Log rotası oluşturuluyor ve dosya boyutu sınırı belirleniyor (5MB)
handler = RotatingFileHandler('app.log', maxBytes=5*1024*1024, backupCount=3)
handler.setLevel(logging.INFO)

# Log formatı belirleniyor
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)

# Logger'ı ayarlıyoruz
logger = logging.getLogger()
logger.addHandler(handler)

# Log mesajı ekliyoruz
logger.info("Log dosyası boyut sınırına ulaştı.")
  • maxBytes=5*1024*1024: Dosya boyutu 5 MB’yi geçerse yeni bir log dosyası başlatılır.
  • backupCount=3: Eski log dosyalarından 3 yedeğin saklanacağı belirtilir. Bu sayede gereksiz dosyalar birikmez.

5. Log Formatı

Log mesajlarının formatı, günlüklerin okunabilirliği için çok önemlidir. Yaygın olarak kullanılan formatlar arasında tarih, saat, log seviyesi ve mesaj yer alır. Daha ayrıntılı bilgi isterseniz, %(name)s, %(filename)s, %(funcName)s gibi özellikleri de formatta kullanabilirsiniz.

import logging

logging.basicConfig(level=logging.DEBUG, 
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', 
                    handlers=[logging.StreamHandler()])

logger = logging.getLogger('MyApp')
logger.info("Uygulama başlatıldı.")

Burada, %(name)s ile logger adını eklerken, %(filename)s ile log kaydını yapan dosyanın adını da dahil edebiliriz.

6. Profesyonel Loglama Uygulamaları

Gerçek dünyada, logları daha profesyonel şekilde yönetmek için aşağıdaki uygulamaları da göz önünde bulundurmak önemlidir:

  • Log Seviyelerini Doğru Kullanma: Gereksiz yere DEBUG seviyesinde log kaydını yapmaktan kaçının. Bu, sistemdeki log dosyasının hızla büyümesine yol açabilir.
  • Log Rotası: RotatingFileHandler veya TimedRotatingFileHandler kullanarak logların büyümesini kontrol altında tutun.
  • Logların Dağıtımı: Çok büyük projelerde, logların merkezi bir sisteme gönderilmesi (örneğin ELK Stack veya Splunk) daha verimli olabilir.
  • Hata Takibi: logging modülünü sadece log tutmak için değil, aynı zamanda hata raporlama için de kullanabilirsiniz. Örneğin, loglara izleme kodu (traceback) eklemek için logging.exception() fonksiyonunu kullanabilirsiniz.
import logging

try:
    x = 1 / 0
except ZeroDivisionError as e:
    logging.exception("Bölme hatası oluştu")

Bu, hatayı kaydederken hata mesajı ve traceback bilgisini de içerecektir.

7. Özet ve İyi Uygulamalar

Yüksek kaliteli loglama, yazılımınızın izlenebilirliğini ve hata ayıklama sürecini kolaylaştırır. Profesyonel bir loglama uygulaması için:

  • Log seviyelerini doğru kullanın: DEBUG, INFO, WARNING, ERROR ve CRITICAL seviyelerini doğru bir şekilde sınıflandırın.
  • Logları bir dosyaya kaydedin ve dosya boyutunu kontrol etmek için log rotası kullanın.
  • Log formatını okunabilir yapın: Her log kaydında tarih, saat, log seviyesi ve mesaj yer almalıdır.
  • Hata yönetimi: Hataları detaylı bir şekilde kaydederek sorunun kaynağını hızlıca bulabilirsiniz.
  • Veri güvenliği: Logların içeriği hassas veri içerebilir, bu nedenle loglarda şifreleme veya anonimleştirme tekniklerini kullanmayı düşünebilirsiniz.

Bu şekilde log kaydı tutmak, yazılımınızın bakımını kolaylaştırır ve olası problemlerin hızlıca tespit edilmesini sağlar.