logging modülüyle Python loglamayı, 5 Python log
seviyesini, Python hata yönetimini ve yaygın Python hata türlerini anlatır. Son
bölümler aynı logları ve çökmeleri logbrew-sdk 0.1.29 ile LogBrew’e gönderir.
Her örnek Python 3.13 üzerinde çalıştırıldı. Her çıktı bloğu gerçek çıktıyı
gösterir.
Flask uygulaması için bunun yerine Flask loglama rehberini
kullanın. O rehber aynı loglama yapılandırmasına istek izlerini ekler.
İlk Python logunuzu yazın
Bu dosyayıapp.py olarak kaydedin. logging.basicConfig() fonksiyonunu
programın giriş noktasında bir kez çağırın. Her modülde adlandırılmış bir logger
alın.
python3 app.py komutunu çalıştırın. Çıktı standart hataya yazılır.
INFO olduğu için debug kaydı görünmez. logger.exception() metodu
ERROR seviyesinde log yazar ve traceback’i ekler. Bu metodu yalnızca bir
except bloğu içinde çağırın.
Değerleri "payment retry %d of %d", 2, 3 örneğindeki gibi argüman olarak
verin. Python mesajı yalnızca bir handler kaydı kabul ettiğinde oluşturur. Mesaj
şablonu her yeniden denemede aynı kalır, bu yüzden onu arayabilirsiniz.
Python log seviyeleri
Logger bir kaydı yalnızca kaydın seviyesi logger’ın seviyesine eşit veya ondan yüksekse gönderir. Handler daha yüksek ikinci bir seviye ayarlayabilir.
Kök logger
WARNING seviyesiyle başlar. Yeni bir logger’ın seviyesi NOTSET
(0) olur ve üst logger’ın seviyesini kullanır. Canlı ortamda INFO ayarlayın.
DEBUG seviyesini yalnızca geliştirmede veya kısa bir tanı için ayarlayın.
Logger, handler ve formatter
- Logger çağrıyı alır. Logger adının modül yoluyla eşleşmesi için
logging.getLogger(__name__)kullanın. - Handler kayıtları konsol, dosya veya LogBrew gibi bir hedefe gönderir.
- Formatter bir kaydı metne dönüştürür.
logging.NullHandler() ekler. Handler’ları ve seviyeleri uygulama bir kez
yapılandırır. Büyük bir yapılandırma için logging.config.dictConfig()
kullanın.
Python hata yönetimi
Ele alabileceğiniz en özel istisnayı yakalayın. Yalnızca başarı durumunda çalışan kod içinelse, her zaman çalışan kod için finally kullanın. Asıl
nedeni korumak için raise ... from error kullanın.
Bu dosyayı orders.py olarak kaydedin.
- Bir istisnayı ele aldığınız yerde bir kez loglayın. Onu her katmanda loglayıp yeniden fırlatmayın, çünkü her katman yinelenen bir kayıt ekler.
except Exception: passyazmayın. Bir hatayı yok sayarsanız onu nedeniyle birlikteWARNINGveya daha yüksek bir seviyede loglayın.BaseExceptionyerineExceptionyakalayın.BaseExceptionayrıcaKeyboardInterruptveSystemExitistisnalarını da yakalar. Bu ikisi programı bilerek durdurur.- Çağıranların ele alması gereken hatalar için
OrderErrorörneğindeki gibi kendi istisna sınıflarınızı tanımlayın.
Birden fazla hatayı bildirin
Python 3.11 ve sonrası birExceptionGroup fırlatabilir. Tek bir kontrol birden
fazla hata bulduğunda onu kullanın. Her türü except* ile ele alın.
Yaygın Python hata türleri
Bir programın ele alabileceği tüm yerleşik hatalarException sınıfından türer.
Bu tablo en sık gördüğünüz Python hatalarını ve her biri için ilk kontrolü
listeler.
KeyboardInterrupt ve SystemExit istisnaları Exception sınıfından değil,
BaseException sınıfından türer. Bunlar kodunuzdaki hatalar değildir.
Python loglarını LogBrew’e gönderin
LogBrewLoggingHandler standart bir loglama handler’ıdır. Kabul ettiği her
kaydı LogBrew’e gönderir. Konsol handler’ı değişmez.
1
Bir proje anahtarı oluşturun
CLI ile giriş yapın. Bir proje oluşturun. Projenin alım
anahtarını (ingest key) yalnızca sahibinin okuyabildiği bir dosyada
saklayın.CLI anahtarı ekrana yazdırmaz. Canlı ortamda platformunuzun gizli anahtar
yöneticisini kullanın.
2
SDK'yı kurun
Uygulamanın sanal ortamını etkinleştirin. Ardından paketi kurun. Paket
Python 3.10 veya üstünü gerektirir.
3
Anahtarı ve dağıtım bilgilerini ayarlayın
4
Handler'ı ekleyin
Bu dosyayı
worker.py olarak kaydedin. İstemciyi oluşturmadan önce
logging.basicConfig() fonksiyonunu çağırın. İstemci kök logger’a bir
handler ekler. Kök logger’da zaten bir handler varsa basicConfig() hiçbir
şey yapmaz.HttpTransport() olayları arka planda, ilk olaydan 1 saniye sonra veya 50
olayda gönderir. client.shutdown() kalan olayları gönderir ve istemciyi
kapatır.5
Programı çalıştırın
extra={...} içindeki ilkel değerler meta veri olur. İkinci olayda
exceptionName değeri KeyError, exceptionMessage değeri 'seats' olur.
Tam traceback metnini göndermek için handler’ı include_exception_text=True
ile oluşturun.6
Logları geri okuyun
LogBrew’e hangi kayıtların gideceğini seçin
Daha az kayıt göndermek için handler’a kendi seviyesini verin. Konsol yineINFO ve üstünü alır.
Python çökmelerini sorun olarak bildirin
install_process_error_capture(client) betiklerde, worker süreçlerinde,
başlangıç kodunda ve iş parçacıklarında ele alınmamış istisnaları bildirir. Her
çökme 1 sorun olur. Sorun istisna türünü, mesajı, yığın çerçevelerini ve
zincirlenmiş nedenleri içerir. Python traceback’i yine yazdırır ve önceki gibi
çıkar.
Bu dosyayı startup.py olarak kaydedin ve çalıştırın.
FileNotFoundError, seviyesi
critical, mekanizması python.excepthook olur. Çerçeveler dosya adını, satırı
ve fonksiyonu içerir ama tam yolu içermez. Bir iş parçacığındaki çökmenin
seviyesi error olur. Python çıkmadan önce SDK teslim için en fazla 2 saniye
bekler.
Sorunları giderin
Web uygulamaları için Flask loglama rehberine bakın. Log
formatı seçmek için Yapılandırılmış loglama
sayfasına bakın. Diğer çalışma zamanları için SDK
entegrasyonu rehberine bakın.
