I have the following which creates two loggers -- stream logger and file logger.
# Set up the Logging modules
tmp_file = tempfile.NamedTemporaryFile(mode='w+')
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
c_handler = logging.StreamHandler()
f_handler = logging.FileHandler(tmp_file.name)
c_handler.setFormatter(logging.Formatter('[%(asctime)s %(levelname)s]\t%(message)s'))
f_handler.setFormatter(logging.Formatter('[%(asctime)s] - %(levelname)s %(funcName)s:L%(lineno)s: %(message)s'))
logger.addHandler(c_handler)
logger.addHandler(f_handler)
I would like the Stream
loger to have level of logging.INFO
(it is currently correct) and the File
logger to have level of logging.DEBUG
. How would I do this?
You can use the Handler.setLevel
method to set individual logging level for each handler, on top of the level set for the logger object:
tmp_file = tempfile.NamedTemporaryFile(mode='w+')
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG) # note here
c_handler = logging.StreamHandler()
c_handler.setLevel(logging.INFO) # note here
f_handler = logging.FileHandler(tmp_file.name)
f_handler.setLevel(logging.DEBUG) # note here
c_handler.setFormatter(logging.Formatter('[%(asctime)s %(levelname)s]\t%(message)s'))
f_handler.setFormatter(logging.Formatter('[%(asctime)s] - %(levelname)s %(funcName)s:L%(lineno)s: %(message)s'))
logger.addHandler(c_handler)
logger.addHandler(f_handler)
so that:
logger.debug('hi')
will produce a logging record to the temporary file while producing no output to the console.