Logging in python
The basic setup
- create a logger with a name
- define a handler
- set handler level
- set handler format
- add handler to logger
- if needed, repeat 2-5 to define another handler and add it to logger
We consolidate the above in a reusable function. Its functionality is only slightly more than minimal, but probably sufficient for 99% of a data person's use case.
import logging
def setup_logger(
name: str,
level=logging.DEBUG,
log_to_file=False,
filename="app.log",
file_level=None # optional file-specific level
):
logger = logging.getLogger(name)
logger.setLevel(level)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
# Clear any existing handlers (optional but helps in Jupyter)
if logger.hasHandlers():
logger.handlers.clear()
# Console handler
ch = logging.StreamHandler()
ch.setLevel(level)
ch.setFormatter(formatter)
logger.addHandler(ch)
# Optional file handler with separate level
if log_to_file:
fh = logging.FileHandler(filename)
fh.setLevel(file_level if file_level else level)
fh.setFormatter(formatter)
logger.addHandler(fh)
return logger
Usage