Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
lofar_logging.py 1.37 KiB
import logging
import tango
from functools import wraps

def configured_logger(name=''):
    logger = logging.getLogger(name)
    logger.setLevel(logging.DEBUG)

    try:
        from logstash_async.handler import AsynchronousLogstashHandler

        logger.addHandler(AsynchronousLogstashHandler("elk", 5959, database_path='logstash_test.db'))
    except Exception:
        logger.exception("Cannot import or configure logstash_async module, not forwarding logs to ELK stack.")

    return logger

def device_logging_to_python(name = ''):
    """ Call this on a Tango Device instance or class to have your Tango Device log to python instead. """

    logger = configured_logger(name)

    def inner(cls):
        # Monkey patch the python logger to replace the tango logger
        cls.debug_stream = logger.debug
        cls.info_stream = logger.info
        cls.warn_stream = logger.warning
        cls.warning_stream = logger.warning
        cls.error_stream = logger.error
        cls.fatal_stream = logger.fatal
        cls.critical_stream = logger.critical
        return cls

    return inner

def log_exceptions(func):
    @wraps(func)
    def inner(self, *args, **kwargs):
        try:
            return func(self, *args, **kwargs)
        except Exception as e:
            self.error_stream("Caught exception: %s: %s", e.__class__.__name__, e, exc_info=1)
            raise e

    return inner