Ana içeriğe atla

Python'da Logging Eğitimi

Python'da Logging'in temellerini öğrenin.
Güncel 3 Eki 2026  · 9 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

Python'a yeni başlıyorsanız ve daha fazlasını öğrenmek istiyorsanız, DataCamp'in Python ile Veri Bilimine Giriş kursunu alın.

Günlükleme (Logging) Seviyeleri
Günlükleme Seviyeleri

Genel olarak logging, bir bilgisayar programı tarafından üretilen bir kaydı (log) tutma yöntemidir. Bir log dosyası genellikle kodunuzda (örneğin bir Python kodu) veya bir işletim sisteminde gerçekleşen olayların kayıtlarından oluşur. Bu olaylar veya iletiler bir log dosyasına yazılır; bir ileti ya da olay, farklı kullanıcılar arasındaki bir iletişim de olabilir.

Genellikle logların nasıl üretileceğine geliştiriciler karar verir. Geliştirdikleri bir uygulamanın her işlemini loglamak isteyebilirler, yalnızca bir hata meydana geldiğinde log almak isteyebilirler ya da bir kullanıcının gerçekleştirdiği kritik işlemleri izleyip bunları loglayabilirler. Önemli bir işleme örnek olarak, uygulamaya veya sunucuya hangi son kullanıcı ya da IP adresi tarafından erişildiğinin kontrol edilmesi verilebilir; başarısız bir deneme durumunda geliştirici, loglardan yararlanarak basit bir stack trace'ten daha iyi içgörüler sunabilir.

Güzel bir örnek, Linux'ta sudo kullanıcısı olmadığınız halde sudo kullanıcısı gibi bir kurulum yapmaya çalıştığınızda gördüğünüz "Xyz is not in the sudoers file. This incident will be reported" iletisidir; bu ileti bir log dosyasına yazılır.

İyi haber şu ki Python, yerleşik bir logging modülüyle birlikte gelir ve herhangi bir kurulum gerektirmeden doğrudan kullanabilirsiniz.

Logging, Print Fonksiyonundan nasıl farklıdır?

Logging, özünde bir Print Fonksiyonuna benzer. Ancak Print fonksiyonu, geliştirici için faydalı olabilecek pek çok bilgiden yoksundur. Öte yandan logging, hatanın oluştuğu zaman damgasını ve satır numarasını kaydedebilir. Hataları ya da herhangi bir bilgiyi dosyalara, soketlere vb. yazabilir ve günlüklerinizi ayırt edebilmeniz için beş tür önem (severity) seviyesi sunar.

Burada gösterilen beş Logging seviyesi şunlardır:

  • Debug (10): Koddaki sorunları teşhis etmek için kullanışlıdır.

  • Info (20): Kodda hata olmadığına dair bir teyit olarak işlev görebilir. Info seviyesinde loglamaya iyi bir örnek, bir makine öğrenmesi modelinin eğitim ilerlemesidir.

  • Warning (30): Gelecekte ortaya çıkabilecek bir soruna işaret eder. Örneğin ileride kullanım dışı bırakılabilecek bir modüle ilişkin uyarı veya düşük RAM uyarısı.

  • Error (40): Kodda ciddi bir hata; sözdizimi hatası, bellek yetersizliği hatası, exception'lar olabilir.

  • Critical (50): Programın çalışmayı durdurmasına ya da aniden çıkmasına neden olabilecek bir hata.

Yeterince teori, değil mi?

Şimdi Python kodunda logging'i nasıl uygulayabileceğinizi anlayalım.

Ancak ondan önce, bu derste kullanacağınız bazı logging özniteliklerinin yer aldığı logging öznitelik tablosuna bakalım.

logging öznitelik tablosu
Logging Attributes</a
import logging

Şimdi logging sisteminin sorunsuz çalışması için temel bir yapılandırma oluşturmaya yardımcı olan basicConfig() metodunu çağıracaksınız.

Aşağıdaki parametreleri ayarlamanıza olanak tanır:

  • logging'in önem seviyesi: beş logging seviyesi.
  • olayları bir dosyaya loglamak.
  • filemode kullanarak eski logların üzerine yazarak yalnızca mevcut logları kaydetmek.
  • logların saklandığı dosya biçimi.

basicConfig() metodunun isteğe bağlı olduğunu ve isterseniz atlayabileceğinizi unutmayın.

logging.basicConfig()

Şimdi beş önem seviyesini oluşturalım.

logging.debug("A Debug Logging Message")
logging.info("A Info Logging Message")
logging.warning("A Warning Logging Message")
WARNING:root:A Warning Logging Message
logging.error("An Error Logging Message")
ERROR:root:An Error Logging Message
logging.critical("A Critical Logging Message")
CRITICAL:root:A Critical Logging Message

Yukarıdaki çıktılardan da görebileceğiniz gibi, yalnızca önem seviyesi 20'den büyük olanlar başarıyla loglandı; çünkü Python'daki logging'in varsayılan yapılandırması budur.

Ancak yukarıda tartışıldığı gibi, basicConfig() metodunu kullanarak önem seviyelerini değiştirebilirsiniz. Burada önem seviyesini 20 olarak değiştireceksiniz; bu, önem seviyesi 10'dan büyük olan logging seviyelerinin loglanacağı anlamına gelir.

Not: Doğru çıktıyı görmek için lütfen aşağıdaki hücreleri çalıştırmadan önce çekirdeği (kernel) yeniden başlatın.

import logging
logging.basicConfig(level=logging.INFO)
logging.debug("A Debug Logging Message")
logging.info("A Info Logging Message")
INFO:root:A Info Logging Message
logging.warning("A Warning Logging Message")
WARNING:root:A Warning Logging Message
logging.error("An Error Logging Message")
ERROR:root:An Error Logging Message
logging.critical("A Critical Logging Message")
CRITICAL:root:A Critical Logging Message

Şimdi yukarıdaki çıktıları bir log dosyasına yazalım. Bunu başarmak için basicConfig() metodunu kullanacaksınız.

import logging
logging.basicConfig(level = logging.INFO, filename = 'datacamp.log')
logging.debug("A Debug Logging Message")
logging.info("A Info Logging Message")
logging.warning("A Warning Logging Message")
logging.error("An Error Logging Message")
logging.critical("A Critical Logging Message")
çıktı

Gördüğünüz gibi artık loglar datacamp.log adlı bir log dosyasında oluşturuluyor. Yukarıdaki hücreleri birden çok kez çalıştırdığınızda, logların dosyaya o kadar kez eklendiğini fark edeceksiniz. Varsayılan olarak dosya append modundadır.

çıktı

Log dosyasının birden fazla kopya iletilerle yazılmasını (yani append modunu) önlemek için filemode anahtar sözcüğünü kullanabilirsiniz. Filemode, write moduna değiştirilebilir; bu, önceki logların üzerine yazılacağı ve yalnızca mevcut olanların kaydedileceği anlamına gelir. Filemode w olarak ayarlandığından, bu, her basicConfig() çalıştırıldığında log dosyasının write modeda açılacağı ve nihayetinde dosyanın üzerine yazılacağı anlamına gelir.

Logging'deki dosya modu işlevselliği, Python'un sunduğu standart dosya işlemlerine benzer.

import logging
logging.basicConfig(level = logging.INFO, filename = 'datacamp.log', filemode = 'w')
logging.debug("A Debug Logging Message")
logging.info("A Info Logging Message")
logging.warning("A Warning Logging Message")
logging.error("An Error Logging Message")
logging.critical("A Critical Logging Message")

Yukarıdaki kod satırlarını birkaç kez çalıştıralım. Bu kez yalnızca mevcut log kayıtlarının kaydedildiğini ve öncekilerin aşağıda gösterildiği gibi üzerine yazıldığını fark edeceksiniz.

çıktı

Tarih, saat, uyarının veya hatanın üretildiği satır numarası gibi bazı başka logging özniteliklerine bakalım. Şimdiye kadar kabul edeceğiniz üzere, tüm bunlar basit bir Print fonksiyonuna göre avantajdır ve onu sıradan bir Print fonksiyonundan çok daha yetenekli kılar.

Bunu gerçekleştirmek için asctime ve lineno logging özniteliklerini ileteceksiniz. Ayrıca loglarda görüntülemek istediğiniz ileti için bir yer tutucu olacak message özniteliğini de ileteceksiniz. Bu özniteliklerin tümü format metoduna geçirilecektir.

import logging
logging.basicConfig(format='Date-Time : %(asctime)s : Line No. : %(lineno)d - %(message)s', \
                    level = logging.DEBUG)
logging.debug("A Debug Logging Message")
logging.info("A Info Logging Message")
logging.warning("A Warning Logging Message")
logging.error("An Error Logging Message")
logging.critical("A Critical Logging Message")
Date-Time : 2020-03-18 23:58:12,429 : Line No. : 1 - A Debug Logging Message
Date-Time : 2020-03-18 23:58:12,436 : Line No. : 2 - A Info Logging Message
Date-Time : 2020-03-18 23:58:12,437 : Line No. : 3 - A Warning Logging Message
Date-Time : 2020-03-18 23:58:12,440 : Line No. : 4 - An Error Logging Message
Date-Time : 2020-03-18 23:58:12,441 : Line No. : 5 - A Critical Logging Message

Her bir özniteliğin tanımlarına doğrudan bu tabloda bakalım.

  • asctime: LogRecord'un üretildiği, insan tarafından okunabilir zaman. Varsayılan olarak 2020-03-18 22:24:42,670 biçimindedir (virgülden sonraki sayılar zamanın milisaniye kısmıdır). Bu öznitelik bir string olduğundan, sonrasında s anahtar sözcüğünü kullanırsınız.

  • lineno: Logging çağrısının yapıldığı kaynak satır numarası. Bu öznitelik bir tamsayı olduğundan, sonrasında d anahtar sözcüğünü kullanırsınız.

  • message: Kaydedilen ileti; msg % args olarak hesaplanır. Formatter.format() çağrıldığında ayarlanır. format() parametresini kullanırken bu özniteliği belirtmezseniz, loglamak istediğiniz iletiler üretilmeyecektir. Benzer şekilde, message özniteliği için de bir string olduğu için s kullanırsınız.

  • funcName: Logun üretildiği modül veya fonksiyon adını çıktılar. Kodunuzda çok sayıda fonksiyon olduğunda ve logları ait oldukları fonksiyon ya da metoda göre ayırmak istediğinizde faydalıdır.

Basit bir örnek yapalım ve print fonksiyonu yerine logging debug fonksiyonunu nasıl yerleştirebileceğinize bakalım.

import logging

logging.basicConfig(format='%(asctime)s :: %(levelname)s :: %(funcName)s :: %(lineno)d \
:: %(message)s', level = logging.INFO)

def addition(x, y):
    add = x + y
    return add


def subtract(x, y):
    sub = x - y
    return sub


def multiply(x, y):
    mul = x * y
    return mul


def divide(x, y):
    div = x / y
    return div

def exponent(x, y):
    exp = x ** y
    return exp


num1 = 20
num2 = 2

def main():
    add_result = addition(num1, num2)
    logging.info('Add: {} + {} = {}'.format(num1, num2, add_result))

    sub_result = subtract(num1, num2)
    logging.info('Sub: {} - {} = {}'.format(num1, num2, sub_result))

    mul_result = multiply(num1, num2)
    logging.info('Mul: {} * {} = {}'.format(num1, num2, mul_result))

    div_result = divide(num1, num2)
    logging.info('Div: {} / {} = {}'.format(num1, num2, div_result))

    exp_result = exponent(num1, num2)
    logging.info('Exp: {} ** {} = {}'.format(num1, num2, exp_result))


main()
2020-03-19 00:01:27,372 :: INFO :: main :: 35 :: Add: 20 + 2 = 22
2020-03-19 00:01:27,376 :: INFO :: main :: 38 :: Sub: 20 - 2 = 18
2020-03-19 00:01:27,377 :: INFO :: main :: 41 :: Mul: 20 * 2 = 40
2020-03-19 00:01:27,378 :: INFO :: main :: 44 :: Div: 20 / 2 = 10.0
2020-03-19 00:01:27,379 :: INFO :: main :: 47 :: Exp: 20 ** 2 = 400

Sonuç

Bu eğitimi tamamladığınız için tebrikler.

Diğer logging özniteliklerini de denemek ve kodunuzda nasıl kullanılabileceklerini görmek isteyebilirsiniz.

Lütfen bu eğitimle ilgili tüm sorularınızı aşağıdaki yorumlar bölümünde sormaktan çekinmeyin.

Python'a yeni başlıyorsanız ve daha fazlasını öğrenmek istiyorsanız, DataCamp'in Python ile Veri Bilimine Giriş kursunu alın.

Konular
Python

Python Kursları

Kurs

Python’a Giriş

4 sa
7.1M
Python ile veri analizi temellerini sadece dört saatte öğrenin. Bu çevrimiçi kurs, Python arayüzünü tanıtacak ve popüler paketleri keşfedecektir.
Ayrıntıları GörüntüleRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Devamını GörDevamını Gör