write setlevel loggeradapter logger log info example disable_existing_loggers python logging

python - setlevel - Evite `logger=logging.getLogger(__ nombre__)`



python logging example (2)

¿Qué pasa con el nombre de ruta? de https://docs.python.org/2/library/logging.html#formatter-objects

/Users/jluc/kds2/wk/explore/test_so_41.py

import logging #another module, just to have another file... import test_so_41b #not so much to use basicConfig as a quick usage of %(pathname)s logging.basicConfig(level=logging.DEBUG, format=''%(pathname)s %(asctime)s %(levelname)s %(message)s'', # filename=''/tmp/myapp.log'', # filemode=''w'', ) logging.debug(''A debug message'') logging.info(''Some information'') logging.warning(''A shot across the bows'') test_so_41b.dosomething("hey there")

/Users/jluc/kds2/wk/explore/test_so_41b.py

import logging def dosomething(msg): logging.info(msg)

audrey: explora jluc $ python test_so_41.py

salida:

test_so_41.py 2016-01-16 14:46:57,997 DEBUG A debug message test_so_41.py 2016-01-16 14:46:57,997 INFO Some information test_so_41.py 2016-01-16 14:46:57,997 WARNING A shot across the bows /Users/jluc/kds2/wk/explore/test_so_41b.py 2016-01-16 14:46:57,997 INFO hey there

Configuramos el registro como los documentos de django nos dijeron:

https://docs.djangoproject.com/en/2.1/topics/logging/#using-logging

# import the logging library import logging # Get an instance of a logger logger = logging.getLogger(__name__) def my_view(request, arg1, arg): ... if bad_mojo: # Log an error message logger.error(''Something went wrong!'')

Quiero evitar esta línea en cada archivo de Python que quiera registrar:

logger = logging.getLogger(__name__)

Lo quiero simple:

logging.error(''Something went wrong!'')

Pero queremos mantener una característica: queremos ver el nombre del archivo Python en la salida del registro.

Hasta ahora utilizamos este formato:

''%(asctime)s %(name)s.%(funcName)s +%(lineno)s: %(levelname)-8s [%(process)d] %(message)s''

Ejemplo de salida:

2016-01-11 12:12:31 myapp.foo +68: ERROR Something went wrong

¿Cómo evitar logger = logging.getLogger(__name__) ?


Puede usar logging.basicConfig para definir la interfaz predeterminada disponible a través del logging siguiente manera:

import logging logging.basicConfig(level=logging.DEBUG, format=''%(asctime)s %(name)s.%(funcName)s +%(lineno)s: %(levelname)-8s [%(process)d] %(message)s'', )

Esta definición ahora se utilizará cuando haga lo siguiente en cualquier lugar de su aplicación:

import logging logging.error(...)

Si bien __name__ no está disponible, el equivalente (y otras opciones) están disponibles a través de los atributos de LogRecord predeterminados que se pueden usar para el formato de cadena de error, incluido el module , el filename y la pathname . La siguiente es una demostración de dos scripts de esto en acción:

scripta.py

import logging logging.basicConfig(level=logging.DEBUG, format=''%(asctime)s %(module)s %(name)s.%(funcName)s +%(lineno)s: %(levelname)-8s [%(process)d] %(message)s'', ) from scriptb import my_view my_view()

scriptb.py

import logging def my_view(): # Log an error message logging.error(''Something went wrong!'')

La definición de registro se define en scripta.py , con el parámetro del module agregado. En scriptb.py simplemente necesitamos importar el logging para obtener acceso a este valor predeterminado definido. Al ejecutar scripta.py se genera el siguiente resultado:

2016-01-14 13:22:24,640 scriptb root.my_view +9: ERROR [14144] Something went wrong!

Lo que muestra el módulo ( scriptb ) donde se produce el registro del error.

De acuerdo con esta respuesta , puede continuar usando cualquier configuración por módulo de registro de Django, desactivando el manejo de Django y configurando el controlador raíz de la siguiente manera:

# settings.py - django config LOGGING_CONFIG = None # disables Django handling of logging LOGGING = {...} # your standard Django logging configuration import logging.config logging.config.dictConfig(LOGGING)