values setlevel multiple logger log info example python logging import

python - setlevel - importar efectos secundarios en el registro: ¿cómo restablecer el módulo de registro?



python logging configuration file example (2)

Depende de lo que el otro módulo esté haciendo; por ejemplo, si llama a logging.disable , puede llamar a logging.disable(logging.NOTSET) para restablecerlo.

Puedes intentar volver a cargar el módulo de logging :

logging.shutdown() reload(logging)

El problema es que esto dejará el módulo de terceros con su propia copia de logging en un estado inutilizable, por lo que podría causar más problemas más adelante.

Considera este código:

import logging print "print" logging.error("log")

Yo obtengo:

print ERROR:root:log

ahora si incluyo un módulo de parte de Thid al comienzo del código anterior y lo vuelvo a ejecutar, solo obtengo:

print

hay alguna pregunta previa sobre esto, pero aquí no puedo tocar el módulo que estoy importando.

El código del módulo de terceros está aquí: http://atlas-sw.cern.ch/cgi-bin/viewcvs-atlas.cgi/offline/DataManagement/DQ2/dq2.clientapi/lib/dq2/clientapi/DQ2 .py? view = markup , pero mi pregunta es más general: independientemente del módulo que estoy importando, quiero un logging limpio que funcione de la manera esperada

Algunas soluciones propuestas (que no funcionan):

from dq2.clientapi.DQ2 import DQ2 import logging del logging.root.handlers[:]

from dq2.clientapi.DQ2 import DQ2 import logging logging.disable(logging.NOTSET)

logs = logging.getLogger(''root'') logs.error("Some error")

el siguiente funciona, pero produjo algunos errores adicionales:

from dq2.clientapi.DQ2 import DQ2 import logging reload(logging)

Yo obtengo:

print ERROR:root:log Error in atexit._run_exitfuncs: Traceback (most recent call last): File "/afs/cern.ch/sw/lcg/external/Python/2.6.5/x86_64-slc5-gcc43- opt/lib/python2.6/atexit.py", line 24, in _run_exitfuncs func(*targs, **kargs) File "/afs/cern.ch/sw/lcg/external/Python/2.6.5/x86_64-slc5-gcc43-opt/lib/python2.6/logging/__init__.py", line 1509, in shutdown h.close() File "/afs/cern.ch/sw/lcg/external/Python/2.6.5/x86_64-slc5-gcc43-opt/lib/python2.6/logging/__init__.py", line 705, in close del _handlers[self] KeyError: <logging.StreamHandler instance at 0x2aea031f7248> Error in sys.exitfunc: Traceback (most recent call last): File "/afs/cern.ch/sw/lcg/external/Python/2.6.5/x86_64-slc5-gcc43-opt/lib/python2.6/atexit.py", line 24, in _run_exitfuncs func(*targs, **kargs) File "/afs/cern.ch/sw/lcg/external/Python/2.6.5/x86_64-slc5-gcc43-opt/lib/python2.6/logging/__init__.py", line 1509, in shutdown h.close() File "/afs/cern.ch/sw/lcg/external/Python/2.6.5/x86_64-slc5-gcc43-opt/lib/python2.6/logging/__init__.py", line 705, in close del _handlers[self] KeyError: <logging.StreamHandler instance at 0x2aea031f7248>

from dq2.clientapi.DQ2 import DQ2 import logging logger = logging.getLogger(__name__) ch = logging.StreamHandler() logger.addHandler(ch) logger.error("log")


Para borrar por completo la configuración de registro existente del registrador de raíz, esto podría funcionar:

root = logging.getLogger() map(root.removeHandler, root.handlers[:]) map(root.removeFilter, root.filters[:])

Sin embargo, esto no se restablece al "valor predeterminado", esto borra todo. StreamHandler agregar un StreamHandler para lograr lo que desea.