Source code for pyloggr.syslog.tcp_syslog_client

# encoding: utf-8

"""
TCP syslog client
"""

__author__ = 'stef'

import logging
from io import BytesIO
from tornado.gen import coroutine, Return
from tornado.iostream import StreamClosedError
from .base import GenericClient

logger = logging.getLogger(__name__)
security_logger = logging.getLogger("security")


[docs]class SyslogClient(GenericClient): """ Utility class to send messages or whole files to a syslog server, using TCP Parameters ========== server: str RELP server hostname or IP port: int RELP server port use_ssl: bool Should the client connect with SSL """ def __init__(self, server, port, use_ssl=False, verify_cert=True, hostname=None, ca_certs=None, client_key=None, client_cert=None, server_deadline=None): super(SyslogClient, self).__init__(server, port, use_ssl, verify_cert, hostname, ca_certs, client_key, client_cert) @coroutine
[docs] def start(self): """ start() Connect to the syslog server """ yield super(SyslogClient, self).start() raise Return(self.closed_connection_event)
@coroutine
[docs] def stop(self): """ stop() Disconnect from the syslog server """ if not self.stream.closed(): self.stream.close() yield super(SyslogClient, self).stop()
@coroutine
[docs] def send_events(self, events, frmt="RFC5424", compress=False): """ send_events(events, frmt="RFC5424") Send multiple events to the syslog server :param events: events to send (iterable of :py:class:`Event`) :param frmt: event dumping format """ if self.closed_connection_event.is_set(): raise Return((False, len(events) * [False])) buf = BytesIO() nb_events = 0 for event in events: bytes_event = event.dump(frmt=frmt) + "\n" syslog_line = str(len(bytes_event)) + ' ' + bytes_event buf.write(syslog_line) nb_events += 1 if compress: s = yield self.compress_thread.submit(self._compress, buf.getvalue()) s = str(len(s)) + ' ' + s else: s = buf.getvalue() try: if nb_events > 0: try: yield self.stream.write(s) except StreamClosedError: raise Return((False, nb_events * [False])) else: raise Return((True, nb_events * [True])) else: raise Return((True, [])) finally: buf.close()