-
Jan David Mol authoredJan David Mol authored
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