2012-06-25 18 views
12

ZODB kullanarak bir veritabanı oluşturdum, sonra başka bir bilgisayara kopyaladım."ZODB.FileStorage kaydedici için hiçbir işleyici bulunamadı" hata iletisi ZODB veritabanında

no handlers could be found for logger (ZODB.FileStorage) 

Not: Bu veritabanına (kopyalanmış bir) her giriş bu hatayı alıyorum neden acaba programı sonu yok, bunun bir hata olduğuna sanki sadece kırmızı deyimi çıktısını.

Bu sinir bozucu mesaj nedir ve neden giriş yaptığım her seferinde oluyor?

Güncelleştirme yok (1): Python kayıt sistemi nedir? Uygulamamda neden yapılandırmam gerekiyor?

Not:

  1. Sadece ZODB kullanın.

  2. İşletim sistemim Windows XP SP2'dir.

+3

olası yinelenen [Python - Hayır işleyicileri logger bulunamadı "OpenGL.error"] (http://stackoverflow.com/questions/345991/python-no-handlers-could-be-found-for-logger-opengl-error) –

+1

Bu bir ZODB sorunu değil; Uygulamanızda python kayıt sistemini yapılandırmadınız. –

+0

Bu soruyu silmek istedim .Bu konu için ilgili sorumluluğu güncelleyeceğim .thanks jdi –

cevap

27

Kısa Cevap

uygulamanız için yapılandırmanız gerekmez yoktur. Bunu yapmak için yararlıdır.

Uzun Cevap

logging modül herhangi piton kod çıkışı-agnostik kullanmadan fiili uygulamaya bir şekilde günlük bilgileri sağlayan bir piton modülüdür. Herhangi bir derinlikteki kütüphaneler, günlüğe kaydetme modülünü, kayıt bilgisini, uyarıları, hataları, vb. Içe aktarabilir ve kullanıcının bunları nasıl alacağını tam olarak bilmek zorunda değildir.

Gördüğünüz şey, kendi uygulamanızda bir işleyicinin yokluğu ile ilgili. ZODB açık bir şekilde bilgileri günlüğe kaydetmektedir, ancak bir işleyiciyi tanımlamamış olmanız nedeniyle, bu günlüğe kaydetme bilgisi yalnızca etere buharlaştırmaktır. Size bazı günlük bilgi görmek istiyorum, sen Logging Cookbook itibaren bir işleyici

tanımlamak gerekir bildiren ediyor:

import logging 

# create logger with 'spam_application' 
logger = logging.getLogger('spam_application') 
logger.setLevel(logging.DEBUG) 
# create file handler which logs even debug messages 
fh = logging.FileHandler('spam.log') 
fh.setLevel(logging.DEBUG) 
# create console handler with a higher log level 
ch = logging.StreamHandler() 
ch.setLevel(logging.ERROR) 
# create formatter and add it to the handlers 
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 
fh.setFormatter(formatter) 
ch.setFormatter(formatter) 
# add the handlers to the logger 
logger.addHandler(fh) 
logger.addHandler(ch) 

Bu örnek uygulamanız için bir adla bir logger oluşturur. Daha sonra iki tür işleyici oluşturur. Birisi, bir dosyaya DEBUG düzey günlüklerini yazmak için bir dosya işleyicisidir. İkincisi, konsolunuza hata gönderecek bir akış işleyicisidir. Daha ayrıntılı bilgi konsola gidiş görmek isteseydi

, sen INFO günlük düzeyini değiştirebilir:

ch = logging.StreamHandler() 
ch.setLevel(logging.INFO) 

Ayrıca "biçemleyicilerle" kavramını dikkat edin. Farklı işleyiciler için farklı kayıt biçimleri ayarlayabilirsiniz.

Uygulamanızda en azından bir akış işleyici oluşturursanız, artık bir işleyicinin tanımlanmadığı konusunda sizi uyarmayacaktır.

Python 2.7+ için logging modülünde NullHandler bulunur.Bir kütüphanede (örneğin, veritabanı kitaplığınız gibi), son kullanıcı kütüphaneyi herhangi bir kayıt işleyicisi olmadan (siz yaptığınız gibi) kullanırken hataları silen bir varsayılan işleyici olarak kullanılmak üzere tasarlanmıştır. Dolayısıyla, hiç oturum açmayı önemsemiyorsanız ve yalnızca onu susturmak istiyorsanız, kendi kodunuza bir NullHandler ekleyebilirsiniz. Aslında günlük kaydı oluşturmak için önerilir, ancak bu sadece başka seçenekler bulunmaktadır:

Adding NullHandler to the logger

import logging 
logging.getLogger('spam_application').addHandler(logging.NullHandler()) 
+1

+1 bin/snapshotbackup çalıştırırken de bu hatayı alıyorum. –

İlgili konular