En este artículo, aprenderemos cómo agregar una capacidad de registro a una biblioteca, pero no queremos que interfiera con los programas que no usan el registro.
Para las bibliotecas que desean realizar el registro, cree un objeto registrador dedicado e inicialmente configúrelo como se muestra en el código a continuación:
Código #1:
# abc.py import logging log = logging.getLogger(__name__) log.addHandler(logging.NullHandler()) # Example function (for testing) def func(): log.critical('A Critical Error !') log.debug('A debug message')
Con esta configuración, no se producirá ningún registro de forma predeterminada.
import somelib abc.func()
Producción :
NO OUTPUT
Si el sistema de registro se configura, los mensajes de registro comenzarán a aparecer.
Código #2:
import logging logging.basicConfig() somelib.func()
Producción :
CRITICAL:somelib:A Critical Error!
Como funciona ?
- Las bibliotecas presentan un problema especial para el registro, ya que no se conoce la información sobre el entorno en el que se utilizan.
- Como regla general, nunca escriba código de biblioteca que intente configurar el sistema de registro por sí mismo o que haga suposiciones sobre una configuración de registro ya existente.
- Por lo tanto, hay que tener mucho cuidado para proporcionar aislamiento.
- La llamada a
getLogger(__name__)
crea un módulo registrador que tiene el mismo nombre que el módulo que llama. - Dado que todos los módulos son únicos, esto crea un registrador dedicado que probablemente esté separado de otros registradores.
- La
log.addHandler(logging.NullHandler())
operación adjunta un controlador nulo al objeto registrador recién creado. Un controlador nulo ignora todos los mensajes de registro de forma predeterminada. - Por lo tanto, si se usa la biblioteca y nunca se configura el registro, no aparecerán mensajes ni advertencias.
El registro de bibliotecas individuales se puede configurar de forma independiente, independientemente de otras configuraciones de registro, como se muestra en el código que se proporciona a continuación:
Código #3:
import logging logging.basicConfig(level = logging.ERROR) import abc print (abc.func()) Change the logging level for 'abc' only logging.getLogger('abc').level = logging.DEBUG print (abc.func())
Producción :
CRITICAL:abc:A Critical Error! DEBUG:abc:A debug message
Publicación traducida automáticamente
Artículo escrito por manikachandna97 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA