Example #1
0
class SocketLogger(BaseLogger):
    """Send log messages over a socket.

    Yes, there is a SocketHandler in the logging package, but it is a
    dumb-ss about forcing every message to be pickled and unpickled -- much easier
    to just write the messages in a stream over a socket.
    """

    def __init__(self, host=None, port=None, mutex=None):
        """Connect to server.

        :param host: Server host, see TCPClient `host` param
        :param port: Server port, see TCPClient `port` param
        :param mutex: Mutex to use for thread-safety, may be None
        :raise: See TCPClient, also ValueError if port is not an int
        """
        kwd = {}
        if host:
            kwd['host'] = str(host)
        if port:
            kwd['port'] = int(port)
        self._client = TCPClient(**kwd)
        self._level = Level.INFO
        self._fmt = LogWriter(fmt=get_log_format())
        self._mtx = mutex if mutex else NullMutex()

    def set_level(self, level):
        self._level = level

    def log(self, level, name, kvp):
        if level > self._level or self._client is None:
            return
        kvp[Keyword.NAME] = name
        kvp[Keyword.LEVEL] = self._level
        kvp[Keyword.TIME] = time.time()
        self._mtx.acquire()
        try:
            s = self._fmt.format(kvp)
            self._client.send(s)
        finally:
            self._mtx.release()

    def close(self):
        """Close the logger.
        """
        if self._client is None:
            return
        self._mtx.acquire()
        try:
            del self._client
            self._client = None
        finally:
            self._mtx.release()
Example #2
0
    def __init__(self, host=None, port=None, mutex=None):
        """Connect to server.

        :param host: Server host, see TCPClient `host` param
        :param port: Server port, see TCPClient `port` param
        :param mutex: Mutex to use for thread-safety, may be None
        :raise: See TCPClient, also ValueError if port is not an int
        """
        kwd = {}
        if host:
            kwd['host'] = str(host)
        if port:
            kwd['port'] = int(port)
        self._client = TCPClient(**kwd)
        self._level = Level.INFO
        self._fmt = LogWriter(fmt=get_log_format())
        self._mtx = mutex if mutex else NullMutex()