yukarıdaki çözüm değildir gerçekten doğru - sadece diğer modüllerdeki mesajların gösterilmesi için çubuğu daha yükseğe ayarlayacaktır. Bu noktaya kadar oluşturulan tüm kaydedicileri devre dışı bırakır -
import logging.config
logging.config.dictConfig({
'version': 1,
'disable_existing_loggers': True,
})
Tüm modülleri ithal sonra bu belirlemek zorunda:
çok hızlı bir yaklaşım Bu kod parçasını kullanmak olacaktır. Bu çoğu zaman işe yarayacaktır, ancak bazı modüller (örneğin kodunuzda daha sonra gerçekleşecek) bir sınıf örneği oluşturduğunuzda kaydedicilerini oluşturur. Eğer logging.basicConfig(...)
kullanmak onlar size temel piton öğretici göre loggers kurmak
. Bu işlem, işleyiciyi (günlüğün nereye yönlendirileceği) logging.lastResort
'a ayarlayacağı için bir sorun yaratmaktadır. Bu işlem, süreçte global olarak tüm kaydedicilerinin için Python 3.2 ile başlamasıdır. Bu, artık tüm modüller için tam oturum açmayı etkinleştirdiğiniz anlamına gelir.
Daha iyi bir yaklaşım, yalnızca modülleriniz için farklı bir günlük kaydedici oluşturmak ve basicConfig()
'u kullanmak yerine kendisine bazı işleyicileri vermek. Bunu yapmanın iki yolu vardır
:
1) Tüm fonksiyonu:
import logging
log = logging.getLogger(__name__)
log.setLevel(logging.DEBUG)
formatter = logging.Formatter(fmt="%(asctime)s %(levelname)s: %(message)s",
datefmt="%Y-%m-%d - %H:%M:%S")
ch = logging.StreamHandler(sys.stdout)
ch.setLevel(logging.DEBUG)
ch.setFormatter(formatter)
fh = logging.FileHandler("mylog.log", "w")
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
log.addHandler(ch)
log.addHandler(fh)
Bu size daha sonra log.error("Error found")
gibi kullanabilirsiniz logger log
verecektir. Bu, mylog.log adında yeni bir dosyaya yazacak ve aynı zamanda sys.stdout dosyasını da kaydedecektir. Bunu istediğin gibi değiştirebilirsin. Bir dicti kullanma
2):
import logging
import logging.config
DEFAULT_LOGGING = {
'version': 1,
'formatters': {
'standard': {
'format': '%(asctime)s %(levelname)s: %(message)s',
'datefmt': '%Y-%m-%d - %H:%M:%S' },
},
'handlers': {
'console': {'class': 'logging.StreamHandler',
'formatter': "standard",
'level': 'DEBUG',
'stream': sys.stdout},
'file': {'class': 'logging.FileHandler',
'formatter': "standard",
'level': 'DEBUG',
'filename': 'live_detector.log','mode': 'w'}
},
'loggers': {
__name__: {'level': 'INFO',
'handlers': ['console', 'file'],
'propagate': False },
}
}
logging.config.dictConfig(DEFAULT_LOGGING)
log = logging.getLogger(__name__)
Bu biraz daha uzun, yukarıdaki gibi aynı sonucu verir, ancak okumak belki daha kolay olacaktır. Bu otomatik olarak 'disable_existing_loggers': True
'u da ayarlayacaktır. Bunu istemezseniz, onu eklemeniz ve False olarak ayarlamanız gerekir.