Belki de yok, pydoc'ta bulamadığım için. Fakat python'un günlük paketini kullanarak, belirli bir fonksiyonun kaç kez çağrıldığını bulmak için bir Kaydediciyi sorgulamanın bir yolu var mı? Örneğin, kaç hata/uyarı bildirildi?Logging.error() kaç kere çağrıldı?
9
A
cevap
12
Günlük modülü bunu destekliyor görünmüyor. Uzun vadede muhtemelen yeni bir modül oluşturmanın daha iyi olması ve ihtiyacınız olan özellikleri eklemek için varolan kayıt modülündeki öğeleri alt sınıflara ekleyerek daha iyi olacaksınız, ancak bu davranışı bir dekoratör ile kolayca başarabilirsiniz. :
class callcounted(object):
"""Decorator to determine number of calls for a method"""
def __init__(self,method):
self.method=method
self.counter=0
def __call__(self,*args,**kwargs):
self.counter+=1
return self.method(*args,**kwargs)
import logging
logging.error=callcounted(logging.error)
logging.error('one')
logging.error('two')
print logging.error.counter
Çıktı:
ERROR:root:one
ERROR:root:two
2
0
warnings modülü var - bir dereceye kadar - bunlardan bazıları.
Bu sayma özelliğini özelleştirilmiş bir Handler numarasına eklemek isteyebilirsiniz. Sorun şu ki, bir milyon işleyici var ve bunu birden fazla türe eklemek isteyebilirsiniz.
Filter numarasına eklemek isteyebilirsiniz, çünkü bunlar kullanımdaki İşleyicilerinden bağımsızdır.
7
Ayrıca tüm çağrıları saydığı günlükçüsüne yeni işleyicisi ekleyebilir
:
class MsgCounterHandler(logging.Handler):
level2count = None
def __init__(self, *args, **kwargs):
super(MsgCounterHandler, self).__init__(*args, **kwargs)
self.level2count = {}
def emit(self, record):
l = record.levelname
if (l not in self.level2count):
self.level2count[l] = 0
self.level2count[l] += 1
ardından dict kıç kullanabilirsiniz çağrıların sayısını çıkarmak için erwards.
İlgili konular
- 1. OnKey() neden iki kere çağrıldı?
- 2. Neden boya yöntemi iki kere çağrıldı?
- 3. "N kere tekrarla" deyimi?
- 4. Yöntem çağrıldı?
- 5. Bu döngü kaç kez çalışır?
- 6. mapViewDidFinishLoadingMap: çok erken çağrıldı
- 7. applicationWillResignActive çağrıldı (hızlı 3)
- 8. + [CATransaction synchronize] işleminde çağrıldı
- 9. Promise.onSuccess hemen çağrıldı
- 10. Nesne iddiasıyla çağrıldı
- 11. Kaç dolaşımları
- 12. Gözlemci NSNotification (itemDidFinishPlaying) RANDOMLY iki kez çağrıldı
- 13. Yinelenen vektör elemanlarını N kere tekrar edin
- 14. Listview ItemSelectionChanged yangınları iki kere mi?
- 15. OpenMP - sadece bir kere iş parçacığı oluştur
- 16. UITableView iki kez çağrıldı didSelectRowAtIndexPath
- 17. chrome.tabs.onUpdated.addListener() birden çok kez çağrıldı
- 18. "DOMNodeInserted" olayı ne zaman çağrıldı?
- 19. Kaç satır silindi?
- 20. nasıl kaç orada sonuçlar
- 21. Kaç tane VBO kullanıyorsunuz?
- 22. CLR kaç örnek çalışıyor?
- 23. Node.js: Kaç Redis Müşterisi?
- 24. Kaç hatanın kurtarılabildiğini sınırla?
- 25. bağlantı didReceiveData iphone'da bir Url gönderirken iki kez çağrıldı?
- 26. Delphi: başka bir dizgede bir dizgenin kaç kez oluştuğunu saymak
- 27. MVP - Kaç tane sunum yapıyor
- 28. Dizi kaç öğe null değil?
- 29. SRSS, gruptaki kaç satır sayılır?
- 30. Bir dize kaç bayta sahip
Bu benim için idealdi. Dekoratörün yanıtı, logger'ın çağrıldığı gerçek fonksiyon adını ve satır numarasını gölgeledi. Özel bir işleyici ile mükemmel çalıştı. –