Package: logger-extras
logging_extrasA collection of useful logging tools for Python 3.InstallationThe majority of the tools in this library require no additional dependencies. To install the library with the base functionality use the following command.pipinstalllogging-extrasTo use theMQTT*classes, install the library with the following command.pipinstalllogging-extras[mqtt]ToolsMQTThandler- A logging handler that publishes logs to an MQTT broker.RelativeTimeFilter- A logging filter that adds a relative time to the log record.DiffTimeFilter- A logging filter that adds a time difference to the log record.TieredFormatter- A logging formatter that allows for different formatting based on the log level.log_function_call- A decorator that logs the arguments and return value of a function call.Upcomming tools:MQTTSubscriber- A logging listener that subscribes to an MQTT broker and logs messages.ExamplesMQTThandlerimportloggingfrompaho.mqtt.clientimportClientfromlogger_extrasimportMQTTConfig,MQTThandlerhandler=MQTThandler(host="localhost",topic="logs",append_logger_name=True,)handler.setFormatter(logging.Formatter("%(levelname)s-%(message)s)"))logger=logging.getLogger(__name__)logger.addHandler(handler)logger.setLevel(logging.INFO)logger.info("Hello World!")# This will publish the following message to the MQTT broker on the topic "logs/__main__":# {#   "timestamp": 1690226241.740354,#   "message": "INFO - Hello World!",#   "raw_message": "Hello World!",#   "level": "INFO", "name": "__main__"# }RelativeTimeFilterimportloggingfromtimeimportsleepfromlogger_extrasimportRelativeTimeFilterhandler=logging.StreamHandler()relative_time_filter=RelativeTimeFilter()handler.addFilter(relative_time_filter)handler.setFormatter(logging.Formatter("%(reltime).3f-%(message)s"))logger=logging.getLogger(__name__)logger.addHandler(handler)logger.setLevel(logging.INFO)logger.info("Hello World!")sleep(2)logger.info("Hello World!")relative_time_filter.reset_time_reference()sleep(1)logger.info("Hello World!")# This will log the following:# 0:00:00 - Hello World!# 0:00:02 - Hello World!# 0:00:01 - Hello World!DiffTimeFilterimportloggingfromtimeimportsleepfromlogger_extrasimportDiffTimeFilterhandler=logging.StreamHandler()handler.addFilter(DiffTimeFilter())handler.setFormatter(logging.Formatter("%(difftime).3f-%(message)s"))logger=logging.getLogger(__name__)logger.addHandler(handler)logger.setLevel(logging.INFO)logger.info("Hello World!")sleep(2)logger.info("Hello World!")sleep(1)logger.info("Hello World!")# This will log the following:# 0:00:00 - Hello World!# 0:00:02 - Hello World!# 0:00:01 - Hello World!TieredFormatterimportloggingfromlogger_extrasimportTieredFormatterhandler=logging.StreamHandler()handler.setFormatter(TieredFormatter(fmt="%(levelname)s-%(message)s",level_fmts={logging.DEBUG:"%(levelname)s-%(funcName)s:%(lineno)d-%(message)s",logging.INFO:"%(message)s",},datefmt=None,style="%",validate=True,))logger=logging.getLogger(__name__)logger.addHandler(handler)logger.setLevel(logging.INFO)logger.debug("Hello World!")logger.info("Hello World!")logger.warning("Hello World!")logger.error("Hello World!")logger.critical("Hello World!")# This will log the following:# DEBUG - __main__:19 - Hello World!# Hello World!# WARNING - Hello World!# ERROR - Hello World!# CRITICAL - Hello World!log_function_callfromlogger_extrasimportlog_function_call@log_function_call(level=logging.INFO)defadd(a,b):returna+b_=add(1,2)# This will log the following:# 2021-08-03 12:00:00,000 - INFO - Calling __main__.add(a=1, b=2)# 2021-08-03 12:00:00,000 - INFO - '__main__.add' returned 3