2016-08-11 31 views
12

Django dokümanlar tavsiye izledi ve bunun gibi günlük kaydını kullanın: benim şimdiki yapılandırma ileözelleştirme

import logging 
logger = logging.getLogger(__name__) 

def today(...): 
    logger.info('Sun is shining, the weather is sweet') 

, çıktı şuna benzer:

2016-08-11 14:54:06 mylib.foo.today: INFO Sun is shining, the weather is sweet 

import logging 

def third_party(...): 
    logging.info('Make you want to move your dancing feet') 

çıktı maalesef li arar: böyle kullanım günlüğü değiştiremez

Ne yazık ki bazı kütüphaneler ke bu:

2016-08-09 08:28:04 root.third_party: INFO Make you want to move your dancing feet 

Bunu görmek istiyorum:

2016-08-09 08:28:04 other_lib.some_file.third_party: INFO Make you want to move your dancing feet 

Fark:

root.third_party == other_lib.some_file.third_party

istediğim>logging.info() 012 yerine root kod kullanıyorsa Bunun çözümü beri

Güncelleme

Bu, Elegant setup of Python logging in Django kopyası değildir: Her modülde alıntı

ait

Başlat, ben

kullanarak logger tanımlamak
logger = logging.getLogger(__name__) 

Fiyat teklifi sonu.

Hayır, logger.info() yerine logging.info() kullanan üçüncü taraf kodunu değiştirmeyeceğim.

Takibi Soru

Avoid logger=logging.getLogger(__name__) without loosing way to filter logs onlar size isterseniz sadece

import logging 

logging.info("Hi! I'm the root logger!") 

yaptığınızda varsayılan olarak ne elde olan (kök logger kullandığınız için var

+0

https://docs.djangoproject.com/en/1.9/topics/ logging/settings.py dosyasında ayarlamalısınız.py –

+0

Olası kopyası [Python loggi'nin zarif kurulumu Django'da ng] (http://stackoverflow.com/questions/1598823/elegant-setup-of-python-logging-in-django) –

+0

@be_good_do_good Evet, günlüğe kaydetmeyi yapıyorum. Soru şudur: 'logger = logging.getLogger (__ name __)' – guettli

cevap

4

Wayne Werner'ın önerdiği gibi, Günlük Kayıt formatı seçeneklerini kullanırdım. İşte bir örnek.

İçerik 1: external_module

import logging 
def third_party(): 
    logging.basicConfig(level=logging.DEBUG) 
    logger = logging.getLogger() 

    logger.info("Hello from %s!"%__name__) 

Dosya 2: main

import external_module 
import logging 

logging.basicConfig(level=logging.DEBUG, 
        format='%(asctime)s %(module)s.%(funcName)s: %(levelname)s %(message)s') 
logger = logging.getLogger(__name__) 

def cmd(): 
    logger.info("Hello from %s!"%__name__) 
    external_module.third_party() 
cmd() 

Çıkış:

2016-08-11 09:18:17,993 main.cmd: INFO Hello from __main__! 
2016-08-11 09:18:17,993 external_module.third_party(): INFO Hello from external_module! 
3

iki (veya üç) seçeneğiniz var farklı bir şey yapın.Eğer en iyi Log Record format options kullanmak olacaktır.Alternatif olarak, kullanmakta olduğunuz kütüphaneler, örneğin

import logging 
import mod_with_lazy_logging 

mod_with_lazy_logging.logger = logging.getLogger(mod_with_lazy_logging.__name__) 

Ya da ast ayrıştırma ve onların günlük kod kodlarını yeniden yazma gibi bir şey yapabilirsiniz. Ama bunu yapma.

+0

Maymun Yama kütüphanesini çalıştırabilir. Ama çok fazla dosya var ... Çok fazla iş gibi geliyor. – guettli

+0

Açık kaynaklı bir kütüphane ise, bakıcıyla ilgili bir sorun bildirmenizi veya bir PR oluşturmanızı öneriyorum. Ya da her ikisi de. 'Logger = logging.getLogger (__ name __)' kullanılmıyor ya da en azından ''library name' 'kullanıldığında tembel/sorumsuz görünüyor. –