Example #1
0
class SenSysClient:

    FAKE_DSN = '//key@domain/project'

    def __init__(self, *args, **kwargs):
        self.handler = SysLogHandler(address='/dev/log')
        # it is important to separate `ident` with whitespace for syslog protocol
        self.handler.ident = self.get_tag() + ' '
        super().__init__(*args, **kwargs)

    def get_tag(self):
        raise NotImplementedError

    def set_dsn(self, dsn=None, transport=None):
        # it is important to pass `dsn` into `DjangoClient`,
        # otherwise we could not retrieve message in `self.send()`
        dsn = 'http:{}'.format(self.FAKE_DSN) if dsn is None else dsn
        super().set_dsn(dsn, transport)

    def send(self, auth_header=None, **data):
        # support for standard Sentry Clients through `sensys` client
        if self.get_public_dsn() != self.FAKE_DSN:
            return super().send(auth_header, **data)

        message = json.dumps(data, default=self.datetime_decode)
        self.handler.emit(makeLogRecord({'msg': message}))

    @staticmethod
    def datetime_decode(obj):
        if isinstance(obj, (datetime.datetime, datetime.date, datetime.time)):
            return obj.isoformat()
 def emit(self, record):
     original_msg = record.msg
     # this is needed to properly show the "initial-setup" prefix
     # for log messages in syslog/Journal
     record.msg = '%s: %s' % (self.tag, original_msg)
     SysLogHandler.emit(self, record)
     record.msg = original_msg
Example #3
0
 def emit(self, record):
     """
     Emit the specified log record.
     Provides the following:
     - Replace newlines with spaces per syslog RFCs.
     - Emit stack traces in following log records.
     :param record: A log record.
     :type record: LogRecord
     """
     records = [record]
     message = record.getMessage()
     record.msg = LogHandler.clean(message)
     record.args = tuple()
     if record.exc_info:
         msg = self.formatter.formatException(record.exc_info)
         for line in msg.split('\n'):
             _record = LogRecord(
                 name=record.name,
                 level=record.levelno,
                 pathname=record.pathname,
                 lineno=record.lineno,
                 msg=line,
                 args=tuple(),
                 exc_info=None)
             records.append(_record)
         record.exc_info = None
     for r in records:
         SysLogHandler.emit(self, r)
Example #4
0
 def emit(self, record):
     if self.tag:
         original_msg = record.msg
         record.msg = '%s: %s' % (self.tag, original_msg)
         SysLogHandler.emit(self, record)
         record.msg = original_msg
     else:
         SysLogHandler.emit(self, record)
Example #5
0
 def emit(self, record):
     try:
         SysLogHandler.emit(self, record)
         if self.fallback:
             self._fallback_logging("Connection to syslog re-established. "
                                    "Will do logging there from now on")
             self.fallback = False
     except ResilientSysLogHandler.FallbackException:
         pass
Example #6
0
class RsyslogEmitter(object):
    def __init__(self):
        self.handler = None

    def emit(self, entry):
        if self.handler is None:
            self.handler = SysLogHandler(address='/dev/log', facility='user')
        record = logging.LogRecord('diary-rsyslogger', logging.INFO, None,
                                   None, 'ADMINDIARY: ' + str(entry), (), None,
                                   None)
        self.handler.emit(record)
Example #7
0
    def emit(self, record):
        """
        Wrapper method for SysLogHandler.emit() to encode an unicode message
        to UTF-8 (or whatever).
        """

        msg = record.msg
        if sys.version_info[0] > 2:
            if isinstance(msg, bytes):
                msg = msg.decode(self.encoding)
                record.msg = msg
        else:
            if isinstance(msg, unicode):                        # noqa
                msg = msg.encode(self.encoding)
                record.msg = msg

        SysLogHandler.emit(self, record)
Example #8
0
class RsyslogEmitter(object):
    def __init__(self):
        self.handler = None

    def emit(self, entry):
        if self.handler is None:
            if os.path.exists('/dev/log'):
                self.handler = SysLogHandler(address='/dev/log',
                                             facility='user')
            else:
                get_logger().error(
                    'RsyslogEmitter().emit() failed: /dev/log does not exist, cannot emit entry (%s)'
                    % (entry, ))
                return
        record = logging.LogRecord('diary-rsyslogger', logging.INFO, None,
                                   None, 'ADMINDIARY: ' + str(entry), (), None,
                                   None)
        self.handler.emit(record)
Example #9
0
File: log.py Project: ooici-dm/pyon
 def emit(self, record):
     message = record.getMessage()
     msg_len = len(message)
     if msg_len > self.MTU:
         # Chunk message into MTU size parts
         start_index = 0
         end_index = self.MTU - 1
         while True:
             msg = message[start_index:end_index]
             rec = logging.LogRecord(record.name, record.levelno, record.pathname, record.lineno, msg, None, record.exc_info, record.funcName)
             SysLogHandler.emit(self, rec)
             start_index = start_index + self.MTU
             if start_index >= msg_len:
                 break
             end_index = end_index + self.MTU
             if end_index > msg_len:
                 end_index = msg_len - 1
     else:
         SysLogHandler.emit(self, record)
Example #10
0
class SyslogHandler(Handler):

    syslogger = None

    def __init__(self, server, port):
        Handler.__init__(self)
        self.syslogger = SysLogHandler(address=(server, port))
        assert syslog is not None, "Syslog module not present"

    def close(self):
        pass

    def reopen(self):
        pass

    def emit(self, record):
        params = record.asdict()
        self.syslogger.emit(SysLogRecord(msg=record.msg,
                                         level=record.level,
                                         args=params,
                                         exc_info=None,
                                         pathname=None,
                                         lineno=None,
                                         name=None))
Example #11
0
class SyslogLogger(object):

    __syslog_handler = None

    def __init__(self, address, frmt=None):
        self.__syslog_handler = SysLogHandler(address)
        if frmt is None or frmt == "msg_only":
            self.__syslog_handler.formatter = SyslogLoggerMsgOnlyFormatter()
        else:
            self.__syslog_handler.formatter = SyslogLoggerJSONFormatter()

    def close(self):
        self.__syslog_handler.close()

    def msg(self, event_dict):
        record = LogRecord(event_dict.get("name", "unknown"),
                           event_dict.get("level", "WARNING"),
                           "/not_used/not_used.py", 1,
                           event_dict, [], None)
        self.__syslog_handler.acquire()
        try:
            self.__syslog_handler.emit(record)
        finally:
            self.__syslog_handler.release()
 def emit(self, record):
     original_msg = record.msg
     record.msg = '%s: %s' %(self.tag, original_msg)
     SysLogHandler.emit(self, record)
     record.msg = original_msg