import json import logging # Set up logging logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', handlers=[ # logging.FileHandler("app.log"), logging.StreamHandler() ] ) logger = logging.getLogger(__name__) def _fancy_print(data, log_level=logging.INFO): log_function = { logging.DEBUG: logger.debug, logging.INFO: logger.info, logging.WARNING: logger.warning, logging.ERROR: logger.error, logging.CRITICAL: logger.critical }.get(log_level, logger.info) try: log = json.dumps(data, indent=2, separators=(',', ': ')) except (TypeError, ValueError): log = str(data) log_function(log) def log_debug(data): _fancy_print(data, log_level=logging.DEBUG) def log_info(data): _fancy_print(data, log_level=logging.INFO) def log_warning(data): _fancy_print(data, log_level=logging.WARNING) def log_error(data): _fancy_print(data, log_level=logging.ERROR) def log_critical(data): _fancy_print(data, log_level=logging.CRITICAL) def log_exception(data): _fancy_print(data, log_level=logging.ERROR) def log_exception_with_traceback(data): import traceback log_exception(data) logger.error(traceback.format_exc())