I want to create two log files, one that logs everything and another that logs, just warnings and errors.
Here is my code,
import logging
logger = logging.getLogger(__name__)
# custom log handlers
err_handler = logging.FileHandler(filename='error.log')
info_handler = logging.FileHandler(filename='info.log')
# setting levels of the handlers
err_handler.setLevel(logging.WARNING)
info_handler.setLevel(logging.INFO)
# formatting for handlers
err_formatter = logging.Formatter('%(name)s - %(asctime)s - %(levelname)s - %(funcName)s - %(message)s')
info_formatter = logging.Formatter('%(name)s - %(asctime)s - %(levelname)s - %(funcName)s - %(message)s')
# setting the formatters
err_handler.setFormatter(err_formatter)
info_handler.setFormatter(info_formatter)
# add the handlers to the custom logger
logger.addHandler(err_handler)
logger.addHandler(info_handler)
logger.info('test_info')
logger.warning('test_warn')
logger.error('test_err')
logger.info('test_info')
The output files are:
info.log__main__ - 2019-08-22 15:13:36,625 - WARNING - <module> - test_warn
__main__ - 2019-08-22 15:13:36,625 - ERROR - <module> - test_err
error.log
__main__ - 2019-08-22 15:13:36,625 - WARNING - <module> - test_warn
__main__ - 2019-08-22 15:13:36,625 - ERROR - <module> - test_err
Why are the info logs not showing?
Well, log works like a filter. logger -> handler. So first you need to ensure your logger's level is at least INFO.
Add logger.setLevel(logging.INFO) after logger = logging.getLogger(__name__).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With