Skip to content

Instantly share code, notes, and snippets.

@ZediWards
Last active March 10, 2025 05:11
Show Gist options
  • Save ZediWards/d6634c14535e737b7b159b444c32cb0a to your computer and use it in GitHub Desktop.
Save ZediWards/d6634c14535e737b7b159b444c32cb0a to your computer and use it in GitHub Desktop.
Python logging
# ref https://realpython.com/python-logging/
import logging
# filter for logging handler - console_handler_debugs
def show_only_debugs(record):
return record.levelname == 'DEBUG'
# instantiate logger and handlers
logger = logging.getLogger(__name__)
logger.setLevel('DEBUG') # set to lowest so handlers can start from there
# formatter that can be used on handlers or use multiple formatters for different handlers
formatter = logging.Formatter(
"{asctime} - {levelname} - {message}",
style="{",
datefmt="%Y-%m-%d %H:%M",
)
# create handlers
# console handler
console_handler = logging.StreamHandler()
console_handler.setLevel("DEBUG")
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)
# console handler only debugs filter
console_handler_debugs = logging.StreamHandler()
console_handler_debugs.setLevel('DEBUG')
console_handler_debugs.setFormatter(formatter)
console_handler_debugs.addFilter(show_only_debugs)
logger.addHandler(console_handler_debugs)
# file handler 1
file_handler_1 = logging.FileHandler(
'./decorators/log_file_1.log', mode='a', encoding='utf-8'
)
file_handler_1.setLevel('DEBUG')
file_handler_1.setFormatter(formatter)
logger.addHandler(file_handler_1)
# file handler 2
file_handler_2 = logging.FileHandler(
'./decorators/log_file_2.log', mode='a', encoding='utf-8'
)
file_handler_2.setLevel('WARNING')
file_handler_2.setFormatter(formatter)
logger.addHandler(file_handler_2)
# add handlers to logger
logger.addHandler(console_handler)
logger.addHandler(console_handler_debugs)
logger.addHandler(file_handler_1)
logger.addHandler(file_handler_2)
# logger info things
logger.handlers # look at loggers handlers
logger # look at logger
logger.getEffectiveLevel() # int representation of log level
logger.parent # logger parent
# logs and their int representation
logger.debug('hello debug') # 10
logger.info('hello info') # 20
logger.warning('hello warning') # 30
logger.error('hello error') # 40
logger.critical('hello critical') # 50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment