SORU
30 Aralık 2008, Salı


Adlandırma Python kaydediciler

Django, her yerde kaydediciler, şu anda kodlu zor isimleri var.

-Seviye günlük modülü (görünüm fonksiyonları bir modül yani) için bunu yapmak için bir dürtü var.

log= logging.getLogger( __name__ )

Sınıf seviyesinde günlük (__init__ sınıf yöntemi olarak yani) için bunu yapmak için bir dürtü var.

self.log= logging.getLogger( "%s.%s" % ( self.__module__, self.__class__.__name__ ) )

getLogger( "hard.coded.name" ) birkaç düzine tekrarlarını yakalıyorum önce ikinci bir görüş arıyorum.

Bu işe yarar mı? Herkesten aynı yaratıcı olmayan yollar ile kendi zararlılarına adlandırma?

Ayrıca, yıkmak ve bu günlük tanımı sınıf bir dekoratör yazayım mı?

CEVAP
31 Aralık 2008, ÇARŞAMBA


Ben tipik bir sınıf düzeyi için bir ihtiyaç kaydediciler kullanın veya bulmak değil, ama en fazla birkaç derse benim modülleri duruyorum. Basit:

import logging
LOG = logging.getLogger(__name__)

Modül ve sonraki en üstünde

LOG.info('Spam and eggs are tasty!')

dosya herhangi bir yerinden genellikle olmak istediğim yerde beni alır. Bu engeller gerek self.log hem de nasıl, hangi eğilimi zahmet benden de bir put-in-her-sınıf bakış açısı ve bu beni 5 karakter daha yakın 79 karakter hatları bu şekilde.

Her zaman pseudo-sınıf-dekoratör: bir kullanabilirsiniz

>>> import logging
>>> class Foo(object):
...     def __init__(self):
...             self.log.info('Meh')
... 
>>> def logged_class(cls):
...     cls.log = logging.getLogger('{0}.{1}'.format(__name__, cls.__name__))
... 
>>> logged_class(Foo)
>>> logging.basicConfig(level=logging.DEBUG)
>>> f = Foo()
INFO:__main__.Foo:Meh

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Art Food Kitty - Kelly Eddington

    Art Food Kit

    7 Kasım 2006
  • kndx

    kndx

    11 Mart 2006
  • UberFacts

    UberFacts

    26 EKİM 2013