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)