Como se ha mencionado, los manipuladores son tan fáciles de crear y añaden que probablemente sea mejor que solo use dos manipuladores. Sin embargo, si por alguna razón quiere apegarse a uno, el Python logging cookbook tiene una sección que describe más o menos lo que quiere hacer: iniciar sesión tanto en la consola como en el archivo, pero en diferentes niveles (incluso le muestra cómo hacer diferentes formatos)) Lo hace con una sola StreamHandler
en lugar de un FileHandler
, sin embargo:
import logging
# set up logging to file - see previous section for more details
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
datefmt='%m-%d %H:%M',
filename='/temp/myapp.log',
filemode='w')
# define a Handler which writes INFO messages or higher to the sys.stderr
console = logging.StreamHandler()
console.setLevel(logging.INFO)
# set a format which is simpler for console use
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
# tell the handler to use this format
console.setFormatter(formatter)
# add the handler to the root logger
logging.getLogger('').addHandler(console)
# Now, we can log to the root logger, or any other logger. First the root...
logging.info('Jackdaws love my big sphinx of quartz.')
# Now, define a couple of other loggers which might represent areas in your
# application:
logger1 = logging.getLogger('myapp.area1')
logger2 = logging.getLogger('myapp.area2')
logger1.debug('Quick zephyrs blow, vexing daft Jim.')
logger1.info('How quickly daft jumping zebras vex.')
logger2.warning('Jail zesty vixen who grabbed pay from quack.')
logger2.error('The five boxing wizards jump quickly.')
Editar: Como se discutió en los comentarios de este código sigue generando dos manipuladores, pero "oculta" una construcción a través de la utilización de basicConfig() . Le recomiendo encarecidamente que cree ambos explícitamente.
Esto sigue siendo dos controladores. Solo "enmascaró" la creación de 'FileHandler' con' basicConfig (...) ', prefiero crearlos de forma explícita. – plundra
Tienes razón, por supuesto. Sin embargo, asumí que esto (o algo similar) es lo que el asker tenía en mente cuando dijo que estaba enviando a dos lugares con un solo registrador. También tengo que estar de acuerdo con usted en su otro punto: es mucho más claro y más ordenado declarar explícitamente a ambos controladores IMO. – bdeniker