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

  • Santozz Yazz

    Santozz Yazz

    23 Mart 2014
  • The Verge

    The Verge

    8 AĞUSTOS 2006
  • Tianna Sierra Dance

    Tianna Sierr

    16 EYLÜL 2013