"""A handler for sending logs to fluent/Kibana. https://{qa/prod}-kibana-applications.theorchard.io/ """ import logging from requests_futures.sessions import FuturesSession class FluentHandler(logging.Handler): """Logging Handler for fluent.""" def __init__(self, dsn, tag): """Init an object.""" logging.Handler.__init__(self) self.dsn = dsn self.tag = tag self.session = FuturesSession() def emit(self, record): """Emit a record asynchronously, don't wait for a responce.""" message = self.format(record) payload = { 'tag': self.tag, 'timestamp': record.created, 'level': record.levelno, 'level_name': record.levelname, 'message': message, 'meta': { 'file_name': record.filename, 'function_name': record.funcName, 'line': record.lineno, 'logger_name': record.name } } self.session.post(self.dsn, json=payload) def __enter__(self): """Enter to a context manager.""" return self def __exit__(self, exc_type, exc_val, exc_tb): """Exit from a context manager.""" self.session.close()